我使用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()像代码一样进行消音处理,但是没有用。