Bluetooth управление функциями

Dmitriy311

✩✩✩✩✩✩✩
23 Окт 2019
2
0
приветствую всех.
недавно занялся программированием ардуино.
много почерпнул здесь, за что спасибо Александру.
но остаются вещи, которые вгоняют в ступор, может и элементарщина, но не все получается.
вот пример - написал скетч мигания светодиодов, для имитации приборной панели модели самолета.
управление включением-выключением с ИК пульта работает как надо. однако все это хочется реализовать через блютуз.
и вот здесь совсем не понимаю - почему те функции, которые нормально работают при управлении от ИК пульта - совсем не работают через блютуз. вместо мигания светодиодов получается их включение в случайном порядке. буду признателен за любую помощь.
вот скетч:

/*
пробная имитация огней кабины
*/
#include <IRremote.h> //Подключение библиотеки для работы с ИК-приемником.
IRrecv irrecv(3); // ИК приемник на пин 3
decode_results results; // переменная кодов кнопок

boolean LEDflag1 = false; //флаги мигания светодиодов.
boolean LEDflag2 = false;
boolean LEDflag3 = false;

uint32_t myTimer1, myTimer2, myTimer3, myTimer4, myTimer5; //таймеры мигания светодиодов.

const int red = 12; //пины светодиодов.
const int yellow = 11;
const int blue = 10;
const int green = 7;
const int green2 = 8;

int flag_sost = false; //переменные функций
int sost = 0;
int eng = 0;

void setup()
{
Serial2.begin(9600); //Инициализация монитора serial-порта. на ардуино мега установил в 3й порт, что бы не отключать постоянно приемник при загрузке скетча. не принципиально
irrecv.enableIRIn(); //Включение ИК-приемника.
pinMode(red, OUTPUT); //состояние пинов как выходов светодиодов.
pinMode(yellow, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(green2, OUTPUT);
}

//================= для проверки раскомментировать соответствующий loop ===============

/*
//================= управление от ИК пульта - все работает ===========================
void loop(){
if (irrecv.decode(&results))
{
myTimer1 = millis();myTimer2 = millis();myTimer3 = millis();myTimer4 = millis();myTimer5 = millis();
Serial2.println(results.value); //вывести значение на монитор порта.//Если были получены данные…
if(results.value == 16753245){flag_sost = true;} //если получена команда
irrecv.resume();} //перезапуск ИК приемника

switch (sost){
case 0:{
off();
if (flag_sost == true){
flag_sost = false;
sost=1;
}
}
break;
case 1:{
pribory();
if (flag_sost == true){
flag_sost = false;
sost=0;
}
}
break;
}
}
*/
//==================================================================================================

//============== управление по блютуз - функции мигания не отрабатывают, светодиоды светятся в случайном порядке ========
void loop(){
if (Serial2.available()) // проверка поданных команд
{
eng = Serial2.read();
if(eng == 49){flag_sost == true;} //48 и 49 - коды "0" и "1". менял на буквы, цифры. все одинаково
Serial2.println(eng);

switch (eng){
case 48:{
off();
if (flag_sost == true){
flag_sost = false;
eng=49;
}
}
break;
case 49:{
pribory();
if (flag_sost == true){
flag_sost = false;
eng=48;
}
}
break;
}
}
}
//==========================================================================================

//===================== описание функций мигания светодиодов ===============================

void pribory(){
/*мигание красного светодиода*/
if (millis() - myTimer1 >= 400) // время таймера
{myTimer1 = millis(); // сброс таймера
digitalWrite(red, LEDflag1); //установка флага
LEDflag1 = !LEDflag1;} //сброс флага
/*мигание желтого светодиода*/
if (millis() - myTimer2 >= 900)
{myTimer2 = millis();
digitalWrite(yellow, LEDflag2);
LEDflag2 = !LEDflag2;}
/*мигание синего светодиода*/
if (millis() - myTimer3 >= 1200)
{myTimer3 = millis();
digitalWrite(blue, LEDflag3);
LEDflag3 = !LEDflag3;}
/*зеленые светодиоды не мигают, а загораются и светят постоянно*/
if (millis() - myTimer4 >= 1000)
{myTimer4 = millis();
digitalWrite(green, HIGH);}
if (millis() - myTimer5 >= 2000)
{myTimer5 = millis();
digitalWrite(green2, HIGH);}
}
void off(){
digitalWrite(green, LOW);
digitalWrite(green2, LOW);
digitalWrite(blue, LOW);
digitalWrite(yellow, LOW);
digitalWrite(red, LOW);
}