Работа с COM-портом и засыпание
- Войдите на сайт для отправки комментариев
Добрый день.
Создал приложение на телефоне (в программе appinventor) для управления телевизором с телефона через Arduino.
Возникло несколько проблем:
1. не могу правильно организовать считывание и проверку данных с COM-порта, делал по образу и подобию как в интернете, но пришлось (получено эмпирическим путем) при чтении ставить паузу delay(2), иначе считывал только 1 символ, т.е. я не могу понять вообще логики работы чтения с ком порта.
2. модуль блутуз HC-05 засыпать через 2 минуты если на телефоне не проявлять активность, что тоже не удобно и приходится после каждого простоя подключать в программе блутузку по новой.
3. Как правильно организовать массив строк для сравнения данных поступающих из ком порта
#define counts 52
#include "IRremote.h"
IRsend irsend;
// ВАЖНО !!! (PIN 3;) вЫход ИК передатчика ((PIN 3;)на другой пин изменить нельзя)
unsigned long xKEY[]={0xE0E040BF, 0xE0E0807F, 0xE0E0807F, 0xE0E0D12E,0xE0E020DF,0xE0E0A05F,0xE0E0609F,0xE0E010EF,0xE0E0906F,0xE0E050AF,0xE0E030CF,0xE0E0B04F,0xE0E0708F,0xE0E08877,0xE0E034CB, 0xE0E0C837, 0xE0E0E01F, 0xE0E0D02F, 0xE0E048B7, 0xE0E008F7, 0xE0E0F00F,0xE0E0D629,0xE0E058A7,0xE0E09E61,0xE0E0F20D, 0xE0E0D22D, 0xE0E0F807,0xE0E01AE5,0xE0E01AE5, 0xE0E0B44B,0xE0E016E9, 0xE0E006F9,0xE0E08679,0xE0E046B9, 0xE0E0A659,0xE0E036C9,0xE0E028D7,0xE0E0A857,0xE0E06897,0xE0E0639C,0xE0E0CE31,0xE0E000FF, 0xE0E0FC03, 0xE0E07C83, 0xE0E07C83, 0xE0E0A45B, 0xE0E0A25D, 0xE0E052AD, 0xE0E012ED, 0xE0E0926D, 0xE0E0E21D,0xE0E0629D };
char* KEY[]={"KEY_POWER","KEY_CYCLEWINDOWS","KEY_SOURCE","KEY_HDMI","KEY_1", "KEY_2", "KEY_3", "KEY_4", "KEY_5", "KEY_6", "KEY_7", "KEY_8", "KEY_9", "KEY_0", "KEY_TTXMIX","KEY_PREVIOUS","KEY_VOLUMEUP","KEY_VOLUMEDOWN","KEY_CHANNELUP","KEY_CHANNELDOWN","KEY_MUTE","KEY_LIST","KEY_MENU", "KEY_SMART","KEY_GUIDE","KEY_TOOLS","KEY_INFO","KEY_BACK","KEY_RETURN","KEY_EXIT","KEY_SELECT", "KEY_UP", "KEY_DOWN","KEY_RIGHT","KEY_LEFT","KEY_A", "KEY_B", "KEY_C", "KEY_D", "KEY_FS","KEY_SEARCH","KEY_LANGUAGE","KEY_SUPPORT","KEY_SWITCHVIDEOMODE","KEY_PSIZE","KEY_SUBTITLE","KEY_REWIND","KEY_PAUSE","KEY_FASTFORWARD","KEY_RECORD","KEY_PLAY","KEY_STOP" };
void setup (){
Serial.begin(9600);
Serial.println("ready");
}
void loop() {
int i=0, j=0, ok=0;
char c;
String buffer="";
while (Serial.available() == 0){}
while (Serial.available()>0) {c=Serial.read();buffer+=c;delay(2);}//загоняем прочитанное в буфер
//buffer[i++]='\0';//закрываем массив
for(int k=0;k<52;k++) if (buffer==KEY[k]) {SendIRCode(xKEY[k],buffer); ok=1; break;}
if (ok==0) {Serial.print(buffer);Serial.println(" - code not found ");}
} //END LOOP
//процедура отправляет данные на ик порт и в ком порт текст
void SendIRCode(unsigned long ir, String txt)
{ irsend.sendSAMSUNG(ir,32);delay(20);
irsend.sendSAMSUNG(ir,32);
Serial.print("0x");
Serial.print(ir,HEX);
Serial.println(" - "+txt);
}