А если в коде куча ветвлений, то многие ветви будут выполнятся в только в исключительных ситуациях, а нормальной ситуации процессор на них не будет затрачивать ни такта.
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 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()
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(
так что так себе идея.....инструкцию с собой еще таскать
Хе-хе. В ус-ве RTC был на обычном 8-ми ногом МК. А время желательно было, хотя бы изредка, контролировать. Максимум что удалось - светодиод сигнализирующий кодом Морзе.) Инструкция не нужна - всё открытым текстом.)
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
Выложу пример для новичков. Хотя сомневаюсь, что кто-то дочитает до пятой страницы.
ещё проще: в "блинк без делэя" в зависимости от температуры изменяется переменная interval.
Пример с температурой неудачный. Я так не делаю. А вот к примеру у меня драйвер управляет приводами фрамуг на высоте 4,5 метра. Управляется по RS485. Светик мигает-значит не завис. Дисплея нет-снизу не разглядеть.
Один раз - закрыто, три-открыто 100%, 2-промежуточное положение. Зимой может лед намерзнуть и мешать плотному прилеганию. Снизу это не видно, а по блинкам все ясно.
Понравилось - менять частоту мигания в зависимости от температуры. Как только быстро замигал- ложись, а то как долбанет)))
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(
так что так себе идея.....инструкцию с собой еще таскать
да, не, нормальная, вспышка раз в секунду - нормальные режим, чем чаще тем больше ошибок, как то так видится
Оптимизировать в плане использовать одну функцию, а не по функции для каждого LED.
это всего лишь часть кода, у меня нужно "мигать" 6 разными портами в разной последовательности (по очереди и вместе) с разными интервалами. соответственно нужно написать для каждого порта отдельно функцию, а хотелось бы одну универсальную. Которая принимает номер порта и период.
1. Хранить снаружи и передавать по ссылке в функцию третий параметр - timer.
2. Как уже было сказано, использовать класс.
Опять же, чудес не бывает: в тексте оно, может, и будет короче, а в коде - вряд ли: все равно на каждый светодиод необходим свой собственный набор параметров: номер порта, период мигания и время последнего переключения.
"1. Хранить снаружи и передавать по ссылке в функцию третий параметр - timer."
я задумывался про хранение снаружи переменной, но в голову не приходит как это сделать компактно, чтобы не было при каждом вызове функции мигания 100500 строк кода, что убьет весь смысл отдельной функции.
где можно более-менее понятно для новичка почитать про классы на русском.
А если в коде куча ветвлений, то многие ветви будут выполнятся в только в исключительных ситуациях, а нормальной ситуации процессор на них не будет затрачивать ни такта.
Будет, Пух, будет. Хотя бы на проверку условия.
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
Выложу пример для новичков. Хотя сомневаюсь, что кто-то дочитает до пятой страницы.
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(
так что так себе идея.....инструкцию с собой еще таскать
Хе-хе. В ус-ве RTC был на обычном 8-ми ногом МК. А время желательно было, хотя бы изредка, контролировать. Максимум что удалось - светодиод сигнализирующий кодом Морзе.) Инструкция не нужна - всё открытым текстом.)
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
Выложу пример для новичков. Хотя сомневаюсь, что кто-то дочитает до пятой страницы.
Пример с температурой неудачный. Я так не делаю. А вот к примеру у меня драйвер управляет приводами фрамуг на высоте 4,5 метра. Управляется по RS485. Светик мигает-значит не завис. Дисплея нет-снизу не разглядеть.
Один раз - закрыто, три-открыто 100%, 2-промежуточное положение. Зимой может лед намерзнуть и мешать плотному прилеганию. Снизу это не видно, а по блинкам все ясно.
Понравилось - менять частоту мигания в зависимости от температуры. Как только быстро замигал- ложись, а то как долбанет)))
Иногда нужно миганием светодиода отображать режим работы простого устройства.
Например: 1 блинк-температура ниже уставки, 2-в пределах нормы, 3-перегрев.
я тоже как то сделал такое примитивное устройство, температуру отправляет на MQTT брокер, и по количеству вспышек можно определить ошибку, отвалился интернет или брокер или еще что то, но вот незадача, я тупо забыл какая ошибка на сколько вспышек :(
так что так себе идея.....инструкцию с собой еще таскать
да, не, нормальная, вспышка раз в секунду - нормальные режим, чем чаще тем больше ошибок, как то так видится
Прошу в помощи, не могу понять как сделать отдельную функцию для "мигания" которая может работать с несколькими светодиодами одновременно
как оптимизировать этот код убрав эти повторения?
Эта функция прекрасно работает с отдельными светодиодами, но по понятным причинам не работает с несколькими одновременно
Оптимизировать в каком ключе?
static
uint32_t timer;
// локальная переменная с сохранением между вызовами
Это я понимаю, но как это обойти не знаю.
Оптимизировать в плане использовать одну функцию, а не по функции для каждого LED.
это всего лишь часть кода, у меня нужно "мигать" 6 разными портами в разной последовательности (по очереди и вместе) с разными интервалами. соответственно нужно написать для каждого порта отдельно функцию, а хотелось бы одну универсальную. Которая принимает номер порта и период.
Вариант #1: завернуть функционал в class.
Можно ли немного по подробнее, я новичок. Где есть справка по class ?
Собственно, варианта 2:
1. Хранить снаружи и передавать по ссылке в функцию третий параметр - timer.
2. Как уже было сказано, использовать класс.
Опять же, чудес не бывает: в тексте оно, может, и будет короче, а в коде - вряд ли: все равно на каждый светодиод необходим свой собственный набор параметров: номер порта, период мигания и время последнего переключения.
"1. Хранить снаружи и передавать по ссылке в функцию третий параметр - timer."
я задумывался про хранение снаружи переменной, но в голову не приходит как это сделать компактно, чтобы не было при каждом вызове функции мигания 100500 строк кода, что убьет весь смысл отдельной функции.
где можно более-менее понятно для новичка почитать про классы на русском.
чтобы не было при каждом вызове функции мигания 100500 строк кода, что убьет весь смысл отдельной функции.
Ты уже в этом форум написал в несколько раз больше. чем нужно для задачи.
Ты уже в этом форум написал в несколько раз больше. чем нужно для задачи.
ваш комментарий очень помог, спасибо!
Пинки под зад по интернету не передаются, извиняй уж. А кроме этого тебе вряд ли что-то поможет.
где можно более-менее понятно для новичка почитать про классы на русском.