Простейшее меню выбора на LCD 2004
- Войдите на сайт для отправки комментариев
Добрый день!
Пытаюсь сделать простейшее меню в выбором, но опыта маловато. Прошу помощи.
Вид меню:
================
Заголовок 1
Первый вариант
Второй вариант
================
Соответственно имеется 2 кнопки под выбор вариантов.
Хочется сделать так что бы при выборе "Первый вариант" - запускался один void
А при выборе "Второй вариант" - соответственно другой void
Это я собственно сделал через обработку кнопки с присвоением флагов. И всё работает, но только на первом выборе void`ов.
То есть когда допустим выбираю "Первый вариант" - то меня кидает к нужному void, а затем программа продолжает выполнятся и начинает кидать по далее стоящим void`ам.
Собственно вопрос: как не дать программе исполнять void`ы, допустим до присвоения нужного флага, который будет присвоен в определённый момент.
Понимаю что описал сумбурно, если нужно будет - прикреплю видео с проблемой "в железе".
Код прикладываю (это само собой не основной проект, а лишь отладка работы с меню).
Заранее благодарю за ответ!
#define _LCD_TYPE 1 // Тип подключения дисплея (I2C) #include <EncButton.h> // Библеотека работы с кнопками #include <LiquidCrystal_I2C.h> // Библиотека работы с дисплеем (I2C 20x04) EncButton<EB_TICK, 3> btnUp(INPUT_PULLUP); // Кнопка вверх EncButton<EB_TICK, 2> btnDown(INPUT_PULLUP); // Кнопка вниз LiquidCrystal_I2C lcd(0x27, 20, 4); // Параметры дисплея boolean disp1_y; boolean disp1_n; boolean disp2_y; boolean disp2_n; boolean disp3_y; boolean disp3_n; boolean disp4_y; boolean disp4_n; void setup() { lcd.init(); // Инициализация дисплея lcd.backlight(); // Включить подсветку main_info(); // Переход к main_info(); } void main_info() { lcd.clear(); lcd.home(); lcd.print("TB disp1"); lcd.setCursor(0, 2); lcd.print("Yes"); lcd.setCursor(0, 3); lcd.print("No"); disp1_y = 1; disp1_n = 1; } void disp1_v_y() { lcd.clear(); lcd.home(); lcd.print("disp1_v_y"); delay(3000); test_dist2(); } void disp1_v_n() { lcd.clear(); lcd.home(); lcd.print("disp1_v_n"); delay(3000); test_dist2(); } void test_dist2() { lcd.print("TB disp2"); lcd.setCursor(0, 2); lcd.print("Yes"); lcd.setCursor(0, 3); lcd.print("No"); disp2_y = 1; disp2_n = 1; } void disp2_v_y() { lcd.clear(); lcd.home(); lcd.print("disp2_v_y"); delay(3000); test_dist3(); } void disp2_v_n() { lcd.clear(); lcd.home(); lcd.print("disp2_v_n"); delay(3000); test_dist3(); } void test_dist3() {} void loop() { btnUp.tick(); // Обработка кнопки вверх btnDown.tick(); // Обработка кнопки вниз if (btnUp.tick() && disp1_y == 1) { disp1_y = 0; disp1_n = 0; disp1_v_y(); } if (btnDown.tick() && disp1_n == 1) { disp1_y = 0; disp1_n = 0; disp1_v_n(); } if (btnUp.tick() && disp2_y == 1) { disp2_y = 0; disp2_n = 0; disp2_v_y(); } if (btnDown.tick() && disp2_n == 1) { disp2_y = 0; disp2_n = 0; disp2_v_n(); } }
исполнять void`ы
Это сильно!
Ничего не понял, но очень интересно!
Жучка, ты лучше дом охраняй, не исполняй void-ы, трудно это
void - по русски Пустота. Это важнейшая концепция Даосизма.
Пустота
По представлениям даосов, Дао возникает в Пустоте. Пустота порождает пространство и время – Космос. Следовательно, Космос рождается в Пустоте. А Пустота – это не нечто полностью не существующее. Она появляется из Единого и Нераздельного как первый необходимый шаг к раздельности. Чтобы раздельность могла осуществиться, она должна быть отделена от другой раздельности промежутком, который и есть Пустота. Даосские мудрецы понимают ее как Пустоту утробы «матери мира», вмещающей в себя и вскармливающей все сущее; или как пустоту колесной втулки, держащей колесо мирового круговорота. Для того чтобы быть собой до конца, Пустота должна сама опустошиться, чтобы в результате стать полнейшей наполненностью.
---------------------------
Так что нефиг наезжать на просветлённого! Тут вам не прогнивший Запад! У нас - свобода совести, понимаешь!
Пипей, затролили жучку.)
Это что за такой энкодер финтипуперный, аж с двумя кнопками ?
Одна втыкивает, вторая вытыкивает... )))))
ТС хотел сказать подпрограммы, неужтонепонятно...
ТС хотел сказать подпрограммы, неужтонепонятно...
Если хотел, то почему не сказал? Кто или что помешало?
Так можно сказать, что в посте #1 я хотел полностью решить все настоящие и будущие проблемы ТС, "неужтонепонятно".
Encbutton примеры еще раз посмотрите, btnUp.tick(); это опрос кнопок, а в условиях нужен click
Также рекомендуется делать сброс флагов resetState() чтобы одно нажатие несколько раз не обрабатывалось (если все флаги в условиях сойдутся, мало ли))) ).
"неужтонепонятно"
я о другом, что мы хотим от ТС если мэтры от Adafruit такое пишут:
Как думаете за это на костёр или можно ограничится лесоповалом? )))
Ой из контекста вырвал, ой ж@па горит )))
Добрый день!
Пытаюсь сделать простейшее меню в выбором, но опыта маловато. Прошу помощи.
Вид меню:
================
Заголовок 1
Первый вариант
Второй вариант
================
Соответственно имеется 2 кнопки под выбор вариантов.
Хочется сделать так что бы при выборе "Первый вариант" - запускался один void
А при выборе "Второй вариант" - соответственно другой void
Это я собственно сделал через обработку кнопки с присвоением флагов. И всё работает, но только на первом выборе void`ов.
То есть когда допустим выбираю "Первый вариант" - то меня кидает к нужному void, а затем программа продолжает выполнятся и начинает кидать по далее стоящим void`ам.
Собственно вопрос: как не дать программе исполнять void`ы, допустим до присвоения нужного флага, который будет присвоен в определённый момент.
Понимаю что описал сумбурно, если нужно будет - прикреплю видео с проблемой "в железе".
Код прикладываю (это само собой не основной проект, а лишь отладка работы с меню).
Заранее благодарю за ответ!
Если еще актуально, вот глянь как я реализовал меню на экодоре и 2004
смотри код в сообщении от Пт, 21/08/2015 - 11:15
https://arduino.ru/forum/proekty/kontroller-dlya-pivovarni-moya-versiya