ARDUINO Попеременный вывод значений куда либо.

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
Что то я не понял..
1) Если убрать последний режим, оставить предпоследний. Как он работать будет ?
2) не понял смысл вот этого:
hasChange = true;
if (!hasChange) return;
Как тут hasChange может быть false для выхода ?
 

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
Если убрать последний режим, оставить предпоследний. Как он работать будет ?
любой последний режим работает дольше обычного, после того как с DAK реализовали функцию, с маркером 255, для определения конца массива.
не понял смысл вот этого:
авторский ваш код) только из-за нового компилятора, по его требованию, закомментировал неиспользуемое.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
1) Вот, значит проблема именно в этом последнем символе. Может режим mode не соответствует размеру ?


2) Я такое не мог написать.. или там что то еще должно быть между этими строками, что бы hasChange могло измениться.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
Вот, значит проблема именно в этом последнем символе. Может режим mode не соответствует размеру ?
byteuint8_t1 байт0… 255Целые числа
C++:
uint8_t mode = 0;
Я такое не мог написать
тогда уже сложно что-то сказать, этому куску кода много лет, надо обдумывать)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
Надо вывести в монитор порта значения режима и посмотреть что происходит когда последний режим меняется на начальный.
 

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
@Старик Похабыч, вот откуда это началось) https://community.alexgyver.ru/thre...66-narodnyj-monitoring.5067/page-4#post-84191
тогда до следующего раза, когда будет время, посмотрю этот код заново...
Надо вывести в монитор порта значения режима и посмотреть что происходит когда последний режим меняется на начальный.
запускается режим 255, что и следовало ожидать)

решение логичное, нужно просто ограничить диапазон для mode 0..4
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
Тогда как только запускается режим 255, чего быть не должно по идее. Сделать режим 0. Один цикл 255 не страшно

вот откуда это началось) https://community.alexgyver.ru/thre...66-narodnyj-monitoring.5067/page-4#post-84191
тогда до следующего раза, когда будет время, посмотрю этот код заново...
Так там совсем другое дело
Если не было изменений- то выход
А если были, то идем дальше.
Сбрасываем флаг , что изменения были
Далее если время меньше выход и флаг остается сброшеным.

там порядок другой совсем. И есть шанс, что флаг изменения может измениться из вне!
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
Тогда как только запускается режим 255, чего быть не должно по идее. Сделать режим 0.
C++:
    mode++;
    if (mode > 4) mode = 0; //добавил эту строчку
    if (sizeof(c.orderDisplay) == mode) mode = 0;
вот так работает) как и думал, надо ограничить mode от 0 до 4, пока работает исправно, понаблюдаю)
 

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
@Старик Похабыч @DAK поднимаю тему, придумал такой интерфейс конструктора) была беседа, сделать через добавление режима,
так лучше будет?)
только не совсем понятно, как получить обратную связь, считать настройки и вывести готовый набор конструктора)
и пока не понятно, что передается после нажатии кнопки)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
Так как я недавно стал делать что то похожее, то склоняюсь к сохранению данных исключительно в формате json - там , имея достаточный объем памяти под структуру, можно хранить массив без видимых ограничений.
Но в твоем проекте ты активно используешь Гайвер ПОртал, а я его игнорирую полностью, предпочитаю углубиться в html, css и javascript, все это я не люблю, но порой бывает дико интересно.
До момента динамического выделения разных данных для отображения я не дошел, т.к. изначально выделил 10 ячеек для отображения и этого для моих нужд хватает выше крыши.

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

ЗЫ. А может я не о том совсем...
 

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
@Старик Похабыч, а вот запрет удаления единственной записи непонятно как реализовать. По идее, с примеров, этого не должно быть. Либо часы вынести отдельно, а уже остальное добавлять по желанию.

Храню настройки в еепром.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,220
1,291
Москва
В еепром тоже можно хранить до размера еепром, главное сначала хранить все постоянное, а потом все переменное структурированное.
Я для работы сразу выбрал esp32, т.к. нужна синхронизация времени с инетом, поэтому храню все настройки в файлах конфигурации.
Ну так, что бы понятно было как у меня выглядит это эффект огня из примеров фастлед наложенный на часы:
 
  • Лойс +1
Реакции: bort707

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
@Старик Похабыч вот думаю и думаю, ведь при клонировании клонируется и уникальный id.
Теоретически думаю, при клонировании можно бы изменять этот id через скрипт, но тогда формат нужен другой.
Т.к. если клонировать непоследовательно, то сбивается порядок.
Можно подумать над вашим вариантом https://playcode.io/1337061

upd: значительно переделал код) вот так выглядит приятнее)
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,542
296
@Старик Похабыч
Во такой вариант накатал, хорошая замена прошлому коду)
Алекс написал, изучай массивы)
C++:
int myMods[] = {0, 1, 2, 3}; // режимы
int myTime[] = {4, 2, 2, 2}; // время
int countTime = sizeof (myTime) / sizeof (int *);

void setup() {
  Serial.begin(115200);
}

void loop() {
  static uint32_t tmr;
  static byte mode = 0;
  if (millis() - tmr >= myTime[mode] * 1000) {
    tmr = millis();
    if (++mode >= countTime )mode = 0;
    switch (myMods[mode]) {
      case 0:
        Serial.println("0");
        break;
      case 1:
        Serial.println("1");
        break;
      case 2:
        Serial.println("2");
        break;
      case 3:
        Serial.println("3");
        break;
      case 4:
        Serial.println("4");
        break;
    }
  }
}
а ввод будет через динамические компоненты)
dyn1.jpg