使用具有TX的RF接收器从RF远程获取Arduino串行数据

时间:2018-11-22 09:40:33

标签: arduino

我使用PT2264使用12键的433 Mhz遥控器,并具有通用接收器模块来解码来自该遥控器的信号。接收器模块以9600波特率在TX引脚中输出。 它从远程接收后以REMOTE_ID:KEY_NUMBER的形式发送数据。 例如,从远程按1键后,我得到的是#AAAA:01作为数据。

问题是,如果按下一次,它不会发送任何数据。相反,我们必须保持按下远程键来传输键码。这样会为该密钥创建连续数据突发,格式为#AAAA:01。

现在我的问题是我想将此远程接口连接到ESP8266并切换http资源。我了解这种非常典型的设置,但我需要这种方式。我的问题是如何在序列上将多个相同的键检测为一个事件,以便再次发生该事件时,我可以实现切换操作。

简而言之,我想在按遥控器上的开关时切换资源。

硬件设置很简单: Ive将433Mhx接收器模块TX引脚连接到ESP8266的D13,并使用SoftwareSerial读取数据。 目前我得到了:

#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01#AAAA:01

我只希望将其检测为#AAAA:01 但是如果在几秒钟后再次按下它的第二个#AAAA:01,我们可以使用它切换一些变量。

代码很简单。

#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 14, false, 256);//RX, TX
String readString; //main captured String

int buttonState = LOW; //this variable tracks the state of the button, low if not pressed, high if pressed
int ledState = 0; //this variable tracks the state of the LED, negative if off, positive if on

long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 10;    // the debounce time; increase if the output flickers
const byte interruptPin = 13;
void setup() {
  pinMode(interruptPin, INPUT_PULLUP);
  Serial.begin(9600);
  mySerial.begin(9600);

}

void loop() {
  if (mySerial.available())  {
    char c = mySerial.read();  //gets one byte from serial buffer
    if (c == '#') {
      //do stuff

      int ind1 = readString.indexOf(':');
      String id = readString.substring(0, ind1);
      String key = readString.substring(ind1 + 1);


      Serial.println(id);

      if (id == "AAAA") {
        Serial.println(millis());
        if ((millis() - lastDebounceTime) > 50 ) {
          //lastDebounceTime = millis();
          Serial.println("key Pressed: ");
          Serial.println(key);
        }
      }
      readString = ""; //clears variable for new input
      id = "";
      key = "";

    }
    else {
      readString += c; //makes the string readString
    }
  }
}

我尝试用millis()像代码一样进行消音处理,但是没有用。

0 个答案:

没有答案