Получите данные Arduino Serial от RF-пульта с RF-приемником, имеющим TX - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть пульт 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 (), но он не работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...