我试图通过RF发射器重现一个简单的433mhz信号。我使用RCSwitch来捕获这个信号,当我写一个简单的“发送”代码时,它工作得很好 - 它通过无线插座关闭了一个灯。我的问题与这个黑客没有关系。
如果我在下面使用此代码,我的信号会正确显示。
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
mySwitch.enableTransmit(3);
mySwitch.setPulseLength(183);
mySwitch.setRepeatTransmit(6);
}
void loop() {
mySwitch.send(5526835, 24);
delay(5000);
}
然而,当我尝试使用串行输入执行更复杂的代码时,我的信号不起作用。据我所知,pulseLength设置为350而不是我所需的183.
我的代码有点长,所以我不会发帖,但我要求串口输入。 “11”表示设备1接通,“10”表示设备1关闭。代码似乎按预期工作,甚至提供输出信号,但脉冲长度回到350.是否有“中断”或串行输入对输出信号做了什么?我甚至玩过中断,但仍然无法让这个更复杂的例子起作用。
编辑: - 要求提供什么设备的代码
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int inputData; int signalInt = 0;
void setup() {
Serial.begin(9600);
mySwitch.enableTransmit(3);
mySwitch.setPulseLength(183);
mySwitch.setProtocol(1);
mySwitch.setRepeatTransmit(6);
}
void loop(){
Serial.println("Enter Device ID Integer:");
startProcess();
}
void startProcess(){
while (Serial.available() > 0){
inputData = Serial.parseInt();
convertToDevice(inputData);
}
startProcess();
}
void convertToDevice(int input){
String x = String(input);
toggleDevice(x.charAt(0), x.charAt(1));
}
void toggleDevice(char deviceId, char sig){
signalInt = 0;
delay(2000); //only here to see if this helped
if(deviceId == '1'){
if(sig == '0'){ // device off
mySwitch.send(5526844, 24);
delay(2000);
startProcess();
}
if(sig == '1'){ // device on
mySwitch.send(5526835, 24);
delay(2000);
startProcess();
}
} // end device 1
if(signalInt == 0){
Serial.println('Nope, wrong code');
startProcess();
}
}
答案 0 :(得分:1)
NB Pulse length must be set AFTER Protocol because setProtocol(1) also sets pulse length = 350.
你应该尝试:
void setup() {
Serial.begin(9600);
mySwitch.enableTransmit(3);
mySwitch.setProtocol(1);
mySwitch.setPulseLength(183);
mySwitch.setRepeatTransmit(6);
}