我尝试用433 PWM发射机模块来创建无线PWM传输。我找到了用于传输https://github.com/zeitgeist87/RFTransmitter的库和用于读取某些pin https://github.com/xkam1x/Arduino-PWM-Reader上的PWM值的库。
我编写了发送PWM值的代码:
#include "PWM.hpp"
#include <RFTransmitter.h>
#define NODE_ID 1
#define OUTPUT_PIN 11
RFTransmitter transmitter(OUTPUT_PIN, NODE_ID);
PWM my_pwm(2);
// the setup function runs once when you press reset or power the board
void setup() {
my_pwm.begin(true);
}
// the loop function runs over and over again forever
void loop() {
int pwmValue = my_pwm.getValue();
char stringValue[4];
itoa(pwmValue, stringValue, 10);
transmitter.send(stringValue, strlen(stringValue) + 1);
}和类似的接收代码
#include <Servo.h>
#include <PinChangeInterruptHandler.h>
#include <RFReceiver.h>
int PWM_out_pin = 9;
Servo servo;
// Listen on digital pin 2
RFReceiver receiver(2);
void setup() {
servo.attach(PWM_out_pin);
receiver.begin();
}
void loop() {
char msg[MAX_PACKAGE_SIZE];
byte senderId = 0;
byte packageId = 0;
byte len = receiver.recvPackage((byte *)msg, &senderId, &packageId);
String *stringObject = new String(msg);
servo.writeMicroseconds(stringObject->toInt());
}它起作用了,但它没有什么问题。首先,这不是最优的。我把一切都变成了字符串。如何从PWM直接发送int值?第二个问题是它有大约1秒的延迟。有可能让它更快吗?我需要它来实时控制伺服。
谢谢。
发布于 2019-08-13 20:46:50
如何从PWM直接发送int值?
transmitter.send((char*)pwmValue, sizeof(int));然后,在接收端,您不需要将数据转换为字符串。
servo.writeMicroseconds((int) *msg);(int)和(char*)是C型类型。本质上告诉编译器,您希望将数据解释为不同的变量类型。
警告:小心使用"new“关键字,您正在动态分配内存。C/C++中的经验法则:无论您在哪里使用"new“关键字,都应该有一个相应的”删除“调用来清除内存。
就提高速度而言,这里的C/C++代码并不是导致从命令到操作的1秒延迟的限制因素。最有可能的是,您的RF发射机发送/接收堆栈中有一个参数需要调整。在发送PWM值之前,我将对发送和打印一个简单字符串的延迟进行基准测试。
https://stackoverflow.com/questions/57484465
复制相似问题