繁体   English   中英

使用 RF 模块控制带有 Arduino 的电机

[英]Using an RF module to control a motor with Arduino

我正在从事一个项目,其中 2 个 Arduino 用于在 RF 模块的帮助下使用无线通信。 通信的目的是无线驱动电机。

到目前为止,我已经根据此页面上的示例代码编写了发射器和接收器的代码: https://randomnerdtutorials.com/rf-433mhz-transmitter-receiver-module-with-arduino/

以下代码用于驱动发射器模块。 此代码类似于修改了 output 的示例代码。

#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 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM