Запоминание данных с ИК пульта.
- Войдите на сайт для отправки комментариев
Здравствуйте. Не раз поднималась тема по запоминанияю кода, посылаемого пультом от кондиционера для управления, собственно, самим кондиционером. Решил и я побиться над этой задачей. Библиотека IRemote, как и ожидалось, не дала результата. Но встал фундаментальный вопрос: достаточно ли просто "запомнить" последовательность импульсов инфракрасного диода или всё это гораздо сложнее?
Для проверки был написан такой вот скетч:
#define Rsvr 3 #define btn1 5 #define btn2 4 #define led 6 #define IRled 7 #define membytes 100 byte interrupt=0; volatile byte data[membytes+1]; volatile unsigned long data_delay[membytes]; volatile unsigned long last_data; volatile int datacount=0; void setup() { pinMode(Rsvr, INPUT); pinMode(btn1, INPUT); pinMode(btn2, INPUT); pinMode(led, INPUT); pinMode(IRled, INPUT); cleanData(); Serial.begin(9600); } void loop() { if (digitalRead(btn1) == HIGH) { delay(300); if (!interrupt) { cleanData(); digitalWrite(led, HIGH); interrupt=1; attachInterrupt(1, recRaw, CHANGE); } else { interrupt=0; digitalWrite(led, LOW); detachInterrupt(1); data_delay[0]=0; } } if (digitalRead(btn2) == HIGH) { delay(500); digitalWrite(led, HIGH); for (int i=1; i<=datacount; i++) { digitalWrite(IRled, data[i]); delayMicroseconds(data_delay[i]); } digitalWrite(led, LOW); } } void cleanData() { for (int i=0; i<=membytes; i++) { data[i]=0; data_delay[i]=0; } data[membytes+1]=0; datacount=1; last_data=0; } void recRaw() { if (datacount==membytes) { return; } data[datacount]=!digitalRead(Rsvr); data_delay[datacount-1]=micros()-last_data; last_data=micros(); datacount++; }
Но:
1) При выводе в сериал монитор записанных данных вижу всегда разные значения задержек (критически разные - отличаются на порядок)
2) На собранной мной схеме не заработал так-же скетч из примеров к библиотеке (который запоминает код и выдаёт его по кнопке), когда проверял его на пульте от телевизора, хотя раньше он отлично запоминал коды телевизионного пульта.
Использую такой приёмник TSOP4838
И инфракрасный диод TSAL7400