![](/img/trans.png)
[英]How to control a servo motor using servo library in C++ on 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.