Простейшее меню выбора на 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() чтобы одно нажатие несколько раз не обрабатывалось (если все флаги в условиях сойдутся, мало ли))) ).
void loop() { btnUp.tick(); // Обработка кнопки вверх btnDown.tick(); // Обработка кнопки вниз if (btnUp.click() && disp1_y == 1) { disp1_y = 0; disp1_n = 0; disp1_v_y(); btnUp.resetState(); } if (btnDown.click() && disp1_n == 1) { disp1_y = 0; disp1_n = 0; disp1_v_n(); btnDown.resetState(); } if (btnUp.click() && disp2_y == 1) { disp2_y = 0; disp2_n = 0; disp2_v_y(); btnUp.resetState(); } if (btnDown.click() && disp2_n == 1) { disp2_y = 0; disp2_n = 0; disp2_v_n(); btnDown.resetState(); } }"неужтонепонятно"
я о другом, что мы хотим от ТС если мэтры от Adafruit такое пишут:
/*! @brief Instantiate Adafruit ILI9341 driver with hardware SPI using a specific SPI peripheral (not necessarily default). @param spiClass Pointer to SPI peripheral (e.g. &SPI or &SPI1). @param dc Data/Command pin # (required). @param cs Chip select pin # (optional, pass -1 if unused and CS is tied to GND). @param rst Reset pin # (optional, pass -1 if unused). */ /**************************************************************************/ Adafruit_ILI9341::Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs, int8_t rst) : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, spiClass, cs, dc, rst) {} #endif // end !ESP8266 ================================================================ /*! @brief Instantiate Adafruit ST7735 driver with selectable hardware SPI @param spiClass Pointer to an SPI device to use (e.g. &SPI1) @param cs Chip select pin # @param dc Data/Command pin # @param rst Reset pin # (optional, pass -1 if unused) */ Adafruit_ST7735::Adafruit_ST7735(SPIClass *spiClass, int8_t cs, int8_t dc, int8_t rst) : Adafruit_ST77xx(ST7735_TFTWIDTH_128, ST7735_TFTHEIGHT_160, spiClass, cs, dc, rst) {} #endif // end !ESP8266Как думаете за это на костёр или можно ограничится лесоповалом? )))
Ой из контекста вырвал, ой ж@па горит )))
Добрый день!
Пытаюсь сделать простейшее меню в выбором, но опыта маловато. Прошу помощи.
Вид меню:
================
Заголовок 1
Первый вариант
Второй вариант
================
Соответственно имеется 2 кнопки под выбор вариантов.
Хочется сделать так что бы при выборе "Первый вариант" - запускался один void
А при выборе "Второй вариант" - соответственно другой void
Это я собственно сделал через обработку кнопки с присвоением флагов. И всё работает, но только на первом выборе void`ов.
То есть когда допустим выбираю "Первый вариант" - то меня кидает к нужному void, а затем программа продолжает выполнятся и начинает кидать по далее стоящим void`ам.
Собственно вопрос: как не дать программе исполнять void`ы, допустим до присвоения нужного флага, который будет присвоен в определённый момент.
Понимаю что описал сумбурно, если нужно будет - прикреплю видео с проблемой "в железе".
Код прикладываю (это само собой не основной проект, а лишь отладка работы с меню).
Заранее благодарю за ответ!
Если еще актуально, вот глянь как я реализовал меню на экодоре и 2004
смотри код в сообщении от Пт, 21/08/2015 - 11:15
https://arduino.ru/forum/proekty/kontroller-dlya-pivovarni-moya-versiya