Еще раз мигаем светодиодом без Delay

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

alexbmd пишет:
искусство а не программирование
Программирование и есть искусство.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

qwone пишет:

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

Будет, Пух, будет.  Хотя бы на проверку условия. 

Pyotr
Offline
Зарегистрирован: 12.03.2014

Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.

Выложу пример для новичков. Хотя сомневаюсь, что кто-то дочитает до пятой страницы.

word currMillis, prevMillis, intervalMs = 20;
byte countCycle, countTwoSec;
byte needBlink=1;//сколько раз мигнуть 
void setup() {
  digitalWrite(13, LOW);
  pinMode(13, OUTPUT);
}

void loop(){
  currMillis = (word)millis();
  if(currMillis - prevMillis >= intervalMs){//
    prevMillis += intervalMs;
    
    switch (countCycle){
      case 0:  //
        if(needBlink) digitalWrite(13, HIGH); 
        break;
      case 1:
        digitalWrite(13, LOW);     
      break;
      case 16: 
        if(needBlink >= 2) digitalWrite(13, HIGH); 
        break;
      case 17:  
        digitalWrite(13, LOW);     
        break;
      case 32:  
        if(needBlink >= 3) digitalWrite(13, HIGH); 
        break;  
      case 33: 
        digitalWrite(13, LOW);     
        break;
//      case 80: 
//      делаем что-то
//        break;        
    }    
    if(++countCycle >= 100){//прошло  2 сек
      countCycle = 0;
      if(++countTwoSec >= 5){//каждые 10 сек меняем число вспышек
      // от ноля до трех
         countTwoSec = 0;  
         needBlink++;
         needBlink = needBlink % 4;
      }
    }
  }
}//END loop()

 

andycat
andycat аватар
Онлайн
Зарегистрирован: 07.09.2017

Pyotr пишет:

Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.

я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(

так что так себе идея.....инструкцию с собой еще таскать

Green
Offline
Зарегистрирован: 01.10.2015

Хе-хе. В ус-ве RTC был на обычном 8-ми ногом МК. А время желательно было, хотя бы изредка, контролировать. Максимум что удалось - светодиод сигнализирующий кодом Морзе.) Инструкция не нужна - всё открытым текстом.)

SLKH
Offline
Зарегистрирован: 17.08.2015

Pyotr пишет:

Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.

Выложу пример для новичков. Хотя сомневаюсь, что кто-то дочитает до пятой страницы.


ещё проще: в "блинк без делэя" в зависимости от температуры изменяется переменная interval. 

Pyotr
Offline
Зарегистрирован: 12.03.2014

Пример с температурой неудачный. Я так не делаю. А вот к примеру у меня драйвер управляет приводами фрамуг на высоте 4,5 метра. Управляется по RS485. Светик мигает-значит не завис. Дисплея нет-снизу не разглядеть.
Один раз - закрыто, три-открыто 100%, 2-промежуточное положение. Зимой может лед намерзнуть и мешать плотному прилеганию. Снизу это не видно, а по блинкам все ясно.

Понравилось - менять частоту мигания в зависимости от температуры. Как только быстро замигал- ложись, а то как долбанет)))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andycat пишет:

Pyotr пишет:

Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.

я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(

так что так себе идея.....инструкцию с собой еще таскать

да, не, нормальная, вспышка раз в секунду - нормальные режим, чем чаще тем больше ошибок, как то так видится