Работа с COM-портом и засыпание

Нет ответов
CROGOT
Offline
Зарегистрирован: 12.04.2015

Добрый день.
Создал приложение на телефоне (в программе 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);
 }