我正在进行一个项目,其中2个Arduino被用来使用无线通信与射频模块的帮助。通讯的目的是以无线方式驱动马达。
到目前为止,我已经根据本页上的示例代码:https://randomnerdtutorials.com/rf-433mhz-transmitter-receiver-module-with-arduino/为发射机和接收器编写了代码。
下面的代码用于驱动发射机模块。此代码类似于具有修改输出的示例代码。
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
RH_ASK driver;
void setup()
{
Serial.begin(9600); // Debugging only
if (!driver.init())
Serial.println("init failed");
}
void loop()
{
const char *msg = "U";
driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
delay(1000);
}此代码用于接收消息并驱动电机。
#include <RH_ASK.h>
#include <SPI.h>
const int motorPin1 = 2;
const int motorPin2 = 3;
RH_ASK driver(2000, 7, 6, 5);
const char *Up = "U";
const char *Down = "D";
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
Serial.begin(9600);
if (!driver.init())
Serial.println("init failed");
}
void loop() {
uint8_t buf[1];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) // Non-blocking
{
int i;
// Message with a good checksum received, dump it.
if ((char*)buf == Up){
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
}
else if ((char*)buf == Down){
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
}
else{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
}
Serial.println((char*)buf);
}
}接收端代码中的最后一行用于通过串行接口检查是否接收到任何消息。情况就是这样。但是由于某种原因,接收到的消息与提供的控制文本不一样。从本质上说,发送"U“与字符"U”是不一样的。
我想这些变量的数据类型有问题。有人知道问题出在哪里吗?
发布于 2022-03-15 11:32:34
此代码是比较指针:
if ((char*)buf == Up){
else if ((char*)buf == Down){您可以更改它以比较所指向的字符,例如:
if (buf[0] == Up[0]){或
if( buf[0] == 'U' )或
if( memcmp( buf, Up, 1 ) == 0 )https://stackoverflow.com/questions/71480747
复制相似问题