У меня есть пульт 433 МГц с 12 ключами, использующий PT2264 и имеющий универсальный приемный модуль для декодирования сигнала с этого пульта.Выход модуля приемника в выводе TX со скоростью 9600 бод.Данные отправляются после получения от удаленного пользователя в виде REMOTE_ID: KEY_NUMBER.например, после нажатия клавиши 1 на пульте дистанционного управления, я получаю #AAAA: 01 это как данные.
Проблема в том, что он не отправляет никаких данных при однократном нажатии.Вместо этого мы должны держать дистанционную клавишу нажатой, чтобы передать код клавиши.Это создает пакет непрерывных данных для этого ключа в формате #AAAA: 01.
Теперь моя проблема заключается в том, что я хочу подключить этот пульт к ESP8266 и переключить ресурс http.Я понимаю, что это очень типичная установка, но мне нужно это так.Моя проблема заключается в том, как обнаружить несколько одинаковых клавиш как одно событие в последовательном соединении, чтобы, если это произойдет снова, я мог выполнить действие переключения.
Короче говоря, я хочу переключать ресурс при нажатии переключателя на пульте дистанционного управления.
Аппаратная настройка проста: я подключил 433-мегабитный приемный модуль TX-пин к DSP ESP8266 и использовал 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 (), но он не работал.