使用Arduino的射频模块控制电机



我正在进行一个项目,其中使用2个Arduino在RF模块的帮助下使用无线通信。通信的目标是以无线方式驱动电机。

到目前为止,我已经根据本页上的示例代码编写了发射器和接收器的代码: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〃;。

我想这些变量的数据类型有问题。有人知道可能是什么问题吗?

此代码正在比较指针:

if ((char*)buf == Up){
else if ((char*)buf == Down){

您可以更改它以比较所指向的字符,例如:

if (buf[0] == Up[0]){

if( buf[0] == 'U' )

if( memcmp( buf, Up, 1 ) == 0 )

最新更新