簡體   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