Цикл в цикле
- Войдите на сайт для отправки комментариев
Пнд, 16/09/2019 - 22:30
Задание: В одном из пунктов главного меню организовать установку времени посредством энкодера (d2,d3,d4), поворачивая меняются часы, при нажатии на энкодер настрйока перескакивает на установку минут. И организовать выход из установки часов и минут посредством длинного тапа.
Проблема: Часы с минутами устанавливаются одновременно, то по очереди. )))
Кусок кода прилагаю. Заранее благодарю за помощь.
void action1() { // ----------- Выполнение 1 пункта меню --------------------------------- if (millis() - lasttime > 1000) { lasttime = millis(); tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK); tft.setCursor (20, 20); tft.print(rtc.getTimeStr()); } do { switch (tset) { case 0: tset =1; break; case 1: tft.setTextColor(ST77XX_RED, ST77XX_BLACK); tft.setCursor (20, 40); if (hsetON < 10) tft.print('0'); tft.print(hsetON); tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK); tft.setCursor (55, 40); tft.print(msetON); if (enc1.isRight()) { hsetON++; if (hsetON >=24) hsetON=0; } if (enc1.isLeft()) { hsetON--; if (hsetON <=0) hsetON=0; } if (enc1.isPress()){ tset++; break; } case 2: tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK); tft.setCursor (20, 40); tft.print(hsetON); tft.setTextColor(ST77XX_RED, ST77XX_BLACK); tft.setCursor (55, 40); if (msetON < 10) tft.print('0'); tft.print(msetON); if (enc1.isRight()) { msetON++; if (msetON >=60) msetON=0; } if (enc1.isLeft()) { msetON--; if (msetON <=0) msetON=0; } if (enc1.isPress()){ tset--; break; } case 3: tset = 1; break; } } while (enc1.isHolded() !=1 ); tft.fillScreen(ST77XX_BLACK); } void action2() { // ----------- Выполнение 2 пункта меню ---------------------------------
Что то ересь какая то...
Вот целый код.
нажатие и удержание кнопки энкодера в несколько секунд.
Если кнопка не нажата, то после case 1 срезу же выполняется case2 - там брейка нет. После case 2 брейка, кстати, тоже нет. Так и должно быть? Думаю именно поэтому всё одновременно устанавливается.
Alex178, меня уже забодало это. Ну почему вы не организовываете меню как цифровой автомат с лямда функциями для управления. А потом в вашей ереси посторонним искать ошибки.
Если кнопка не нажата, то после case 1 срезу же выполняется case2 - там брейка нет. После case 2 брейка, кстати, тоже нет. Так и должно быть? Думаю именно поэтому всё одновременно устанавливается.
Строка 209 и 233. При нажатии должен быть брейк и переход на след. кейс. При повороте брейка нет.
И что это за название case 1,case 2 . Ну зачем так шифроваться . назовите clock, setHour,setMin,setSec.
И что это за название case 1,case 2 . Ну зачем так шифроваться . назовите clock, setHour,setMin,setSec.
А как? там по флажку tset, при нажатии 1 раз плюсует, при повторном отнимает.
Выпилил все ненужное.
Ну если вам нравится гайвер с библиотеками, то почему не организовать так #63
Добавьте нужное и поиск косяков в меню упростися.
Ну если вам нравится гайвер с библиотеками, то почему не организовать так #63
Добавьте нужное и поиск косяков в меню упростися.
Мне понравилось, что у него в библиотеке есть нажатие и долгое нажатие. Что вполне инктуитивно. Если есть у Вас другая аналогичная, буду рад попробовать. И с меню у меня проблем нет. Есть проблема цикла в цикле. Внешний do пока долго не удерживать кнопку энкодера, и внутренний switch с флажком, для установки часов и минут. Внешний работает, а внутренний запускает оба блока одновременно при повороте энкодера, сразу меняет значение часов и значение минут.
Вынеси брейки 2 и 3 кейсов за операторные скобки условий.
63 строка и 87-я
Вы решили поспорить?
Брейк - это не переход на следующий кейс, а выход из свич целиком. А вот отсутствие брейка - как раз переход на следующий кейс.
А если еще и форматировать код, то его и читать удобнее и ошибки находить )))
Чем отличается?
Это:
От этого:
???
Всем спасибо. Разобрался. Все прекрасно заработало одним циклом.
Я все еще охреневаю от того, что в названии темы и что в итоге решали....
Alex178, меня уже забодало это. Ну почему вы не организовываете меню как цифровой автомат с лямда функциями для управления. А потом в вашей ереси посторонним искать ошибки.
а, шо такоэ лямбда функции?
Клапа, это новая секта такая, в которую Пух попал, не разбираясь
а, шо такоэ лямбда функции?
Пятнадцать лет он не был дома (с).))))
А можно пример такого меню на всём этом и во всей красе (простенькое)? Хочу понять как это реализовано, а то представить или возраст или уровень знаний не позволяют. Собаки этакие...
Ну вот под гайверовкие кнопки и простой вариант меню
Управление двумя кнопками - Селект и Верх. Вывод в Сериал.