Очистить кеш на Arduino UNO при удачном подключение по bluetooth и при разрыве соединения

Drew20
Offline
Зарегистрирован: 09.02.2018

Всем добрый день или вечер, возник вопрос связанный с програмирование на ардуино. На данный момент я использую Arduino UNO и блютуз модуль HC-06. Микроконтроллер связывается с телефоном и получает две переменные, а именно задержку для мигания rgb-светодиодом и цвет самого светодиода. Но есть проблема, а именно при завершении работы с микроконтроллером, я отключаюсь от блютуза а светодиод все еще продолжает мигать с заданным цветом и задержкой. Так вот появилась мысль очистить кеш при удачном подключении к блютузу и при разрыве соединения. Возможно я не сильно понятно объяснил свою проблему, если что спрашивайте и я постараюсь уточнить интересующие вас вопросы. Заранее благодарен за любую помощь и советы. Ниже прилагаю скетч:

const byte rPin = 3;
const byte gPin = 5;
const byte bPin = 6;
byte chosed_color;
byte incoming_byte;
int val = -1;  
 
void setup() 
{
  Serial.begin(9600);
  Serial.setTimeout(3);
  pinMode(rPin, OUTPUT);
  pinMode(gPin, OUTPUT);
  pinMode(bPin, OUTPUT);
}
 
void loop() 
{
  if(Serial.available() > 0) 
  {
    incoming_byte = Serial.peek();
    Serial.println(char(incoming_byte)); 
    if(incoming_byte >= '0' && incoming_byte <= '9')
    {
      val = Serial.parseInt() ;
      
    }
    else
    {
      incoming_byte = Serial.read();
      switch(incoming_byte)
      {
      case 'R':
        chosed_color = rPin;
        break;
      case 'G':
        chosed_color = gPin;
        break;
      case 'B':              
        chosed_color = bPin;
        break;
      }
    }
  }
  if(val >= 0 && chosed_color != 0)
  {
    digitalWrite(chosed_color, HIGH);
    delay(val);       
    digitalWrite(chosed_color, LOW);  
    delay(val); 
  }
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что значит "очистить кэш"? Вы можете распознать факт потери соединения? Если можете, то просто прекращайте мигать и всё.

Drew20
Offline
Зарегистрирован: 09.02.2018

я не могу распознать факт потери соединения на микроконтроллере, я этим буду управлять с телефона, тоесть например при нажатии на клавишу у меня обнуляются значения частоты моргания и цвета. Просто я думал что есть какая-то команда связанная с этим

 

ven-til
Offline
Зарегистрирован: 13.02.2018

Нога STATE есть  на выходе  модуля?

Drew20
Offline
Зарегистрирован: 09.02.2018

нет, там только четыри ноги rx-tx-5v-gnd, я вот читаю про команду serial.flush() но в сети разные мнения на счет использования этой команды.

ven-til
Offline
Зарегистрирован: 13.02.2018

Вот тут команды для HC-05. Там есть команда STATE, можно попробовать. Или подключиcя к пину на плате модуля на который завязан светодиод показывающий соединение.

Drew20
Offline
Зарегистрирован: 09.02.2018

та я бы может и рад подключаться к пину, но буквально несколько дней тому впаял модулю намертво на плату расширения, так что хотелось бы как то через скетч влиять на эти процесы

Drew20
Offline
Зарегистрирован: 09.02.2018

все я нашел способ как сделать то что мне нужно

void(* resetFunc) (void) = 0;
/
/
resetFunc(); 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

О, Господи! Набрали бы в поиске по форуму "программный ресет", и первый же результат - http://arduino.ru/forum/programmirovanie/programmnyi-reset#comment-8801

b707
Offline
Зарегистрирован: 26.05.2017

Drew20 пишет:

все я нашел способ как сделать то что мне нужно

void(* resetFunc) (void) = 0;
/
/
resetFunc(); 

 

интересно, чем вам это поможет, если вы не умеете определять момент разрыва соединения?

Drew20
Offline
Зарегистрирован: 09.02.2018

ну не знаю зачем мне момент разрыва тот который вы имеете в виду, мне впринципи это вполне помогает сейчас, все значения обнуляются полностью

b707
Offline
Зарегистрирован: 26.05.2017

Drew20 пишет:

ну не знаю зачем мне момент разрыва тот который вы имеете в виду, мне впринципи это вполне помогает сейчас, все значения обнуляются полностью

так как вы узнаете, когда обнулять?  А если знаете - не проще ли погасить светодиод и все...

Drew20
Offline
Зарегистрирован: 09.02.2018

ну как вам объяснить...я вот нашел функцию которая обнуляет эти значения, и я с телефона отправляю определенный байт когда нужно это функцию запускать, микроконтроллер смотрит если пришел байт то тогда все хорошо и мы грубо говоря гасим светодиод, а понять когда нужно гасить светодиод вообще просто с телефона в нужный момент мы просто посылаем этот байт и как результат светодиод гаснет

 

b707
Offline
Зарегистрирован: 26.05.2017

Drew20 пишет:

ну как вам объяснить...я вот нашел функцию которая обнуляет эти значения, и я с телефона отправляю определенный байт когда нужно это функцию запускать, микроконтроллер смотрит если пришел байт то тогда все хорошо и мы грубо говоря гасим светодиод, а понять когда нужно гасить светодиод вообще просто с телефона в нужный момент мы просто посылаем этот байт и как результат светодиод гаснет

 

ну замечательно. Обьясните только - зачем ради того, чтоб погасить один светодиод - ресетить всю ардуину какой-то специальной функцией?  Подать на светик LOW не проще?

Drew20
Offline
Зарегистрирован: 09.02.2018

ну я как бы нашел метод, он как ни странно заработал, а кидать LOW на диод конечно круто но не факт что мы будем обнулять частоту, а  так одна функция и все решает)))

kalapanga
Offline
Зарегистрирован: 23.10.2016

Вы не точно сформулировали вопрос. У Вас там фигурирует "разрыв соединения". Многие (и я) это поняли как незапланированную потерю связи по блютуз. В этом случае Ваше решение никак не поможет. Оказывается, Вы имели ввиду корректное завершение связи со стороны смартфона, перед которым Вы можете послать дополнительный сигнал. В этом случае решения более чем очевидны.

Drew20
Offline
Зарегистрирован: 09.02.2018

не спорю возможно я не совсем точно и правильно сформулировал вопрос))

b707
Offline
Зарегистрирован: 26.05.2017

kalapanga пишет:

Оказывается, Вы имели ввиду корректное завершение связи со стороны смартфона, перед которым Вы можете послать дополнительный сигнал. В этом случае решения более чем очевидны.

и я бы добавил, что выбранное решение - явно не лучшее. Это все равно как выключать телевизор. отрубая свет во всей квартире, вместо того чтоб просто нажать кнопку на пульте :)

Drew20
Offline
Зарегистрирован: 09.02.2018

я просто плохо представляю как сделать это по другому, если вы сможете мне растолковать другой способ буду благодарен))