串行输入后发送RF信号

时间:2013-10-29 03:26:05

标签: arduino

我试图通过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();
    }

}

1 个答案:

答案 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);
}