Простейшее меню выбора на LCD 2004
- Войдите на сайт для отправки комментариев
Добрый день!
Пытаюсь сделать простейшее меню в выбором, но опыта маловато. Прошу помощи.
Вид меню:
================
Заголовок 1
Первый вариант
Второй вариант
================
Соответственно имеется 2 кнопки под выбор вариантов.
Хочется сделать так что бы при выборе "Первый вариант" - запускался один void
А при выборе "Второй вариант" - соответственно другой void
Это я собственно сделал через обработку кнопки с присвоением флагов. И всё работает, но только на первом выборе void`ов.
То есть когда допустим выбираю "Первый вариант" - то меня кидает к нужному void, а затем программа продолжает выполнятся и начинает кидать по далее стоящим void`ам.
Собственно вопрос: как не дать программе исполнять void`ы, допустим до присвоения нужного флага, который будет присвоен в определённый момент.
Понимаю что описал сумбурно, если нужно будет - прикреплю видео с проблемой "в железе".
Код прикладываю (это само собой не основной проект, а лишь отладка работы с меню).
Заранее благодарю за ответ!
001 | #define _LCD_TYPE 1 // Тип подключения дисплея (I2C) |
002 | #include <EncButton.h> // Библеотека работы с кнопками |
003 | #include <LiquidCrystal_I2C.h> // Библиотека работы с дисплеем (I2C 20x04) |
004 | EncButton<EB_TICK, 3> btnUp(INPUT_PULLUP); // Кнопка вверх |
005 | EncButton<EB_TICK, 2> btnDown(INPUT_PULLUP); // Кнопка вниз |
006 |
007 | LiquidCrystal_I2C lcd(0x27, 20, 4); // Параметры дисплея |
008 |
009 | boolean disp1_y; |
010 | boolean disp1_n; |
011 | boolean disp2_y; |
012 | boolean disp2_n; |
013 | boolean disp3_y; |
014 | boolean disp3_n; |
015 | boolean disp4_y; |
016 | boolean disp4_n; |
017 |
018 | void setup () { |
019 | lcd.init(); // Инициализация дисплея |
020 | lcd.backlight(); // Включить подсветку |
021 | main_info(); // Переход к main_info(); |
022 | } |
023 |
024 | void main_info() { |
025 | lcd.clear(); |
026 | lcd.home(); |
027 | lcd.print( "TB disp1" ); |
028 | lcd.setCursor(0, 2); |
029 | lcd.print( "Yes" ); |
030 | lcd.setCursor(0, 3); |
031 | lcd.print( "No" ); |
032 | disp1_y = 1; |
033 | disp1_n = 1; |
034 | } |
035 |
036 | void disp1_v_y() { |
037 | lcd.clear(); |
038 | lcd.home(); |
039 | lcd.print( "disp1_v_y" ); |
040 | delay(3000); |
041 | test_dist2(); |
042 | } |
043 |
044 | void disp1_v_n() { |
045 | lcd.clear(); |
046 | lcd.home(); |
047 | lcd.print( "disp1_v_n" ); |
048 | delay(3000); |
049 | test_dist2(); |
050 | } |
051 |
052 | void test_dist2() { |
053 | lcd.print( "TB disp2" ); |
054 | lcd.setCursor(0, 2); |
055 | lcd.print( "Yes" ); |
056 | lcd.setCursor(0, 3); |
057 | lcd.print( "No" ); |
058 | disp2_y = 1; |
059 | disp2_n = 1; |
060 | } |
061 |
062 | void disp2_v_y() { |
063 | lcd.clear(); |
064 | lcd.home(); |
065 | lcd.print( "disp2_v_y" ); |
066 | delay(3000); |
067 | test_dist3(); |
068 | } |
069 |
070 | void disp2_v_n() { |
071 | lcd.clear(); |
072 | lcd.home(); |
073 | lcd.print( "disp2_v_n" ); |
074 | delay(3000); |
075 | test_dist3(); |
076 | } |
077 |
078 | void test_dist3() {} |
079 |
080 | void loop () { |
081 | btnUp.tick(); // Обработка кнопки вверх |
082 | btnDown.tick(); // Обработка кнопки вниз |
083 |
084 | if (btnUp.tick() && disp1_y == 1) { |
085 | disp1_y = 0; |
086 | disp1_n = 0; |
087 | disp1_v_y(); |
088 | } |
089 |
090 | if (btnDown.tick() && disp1_n == 1) { |
091 | disp1_y = 0; |
092 | disp1_n = 0; |
093 | disp1_v_n(); |
094 | } |
095 |
096 | if (btnUp.tick() && disp2_y == 1) { |
097 | disp2_y = 0; |
098 | disp2_n = 0; |
099 | disp2_v_y(); |
100 | } |
101 |
102 | if (btnDown.tick() && disp2_n == 1) { |
103 | disp2_y = 0; |
104 | disp2_n = 0; |
105 | disp2_v_n(); |
106 | } |
107 |
108 |
109 | } |
исполнять void`ы
Это сильно!
Ничего не понял, но очень интересно!
Жучка, ты лучше дом охраняй, не исполняй void-ы, трудно это
void - по русски Пустота. Это важнейшая концепция Даосизма.
Пустота
По представлениям даосов, Дао возникает в Пустоте. Пустота порождает пространство и время – Космос. Следовательно, Космос рождается в Пустоте. А Пустота – это не нечто полностью не существующее. Она появляется из Единого и Нераздельного как первый необходимый шаг к раздельности. Чтобы раздельность могла осуществиться, она должна быть отделена от другой раздельности промежутком, который и есть Пустота. Даосские мудрецы понимают ее как Пустоту утробы «матери мира», вмещающей в себя и вскармливающей все сущее; или как пустоту колесной втулки, держащей колесо мирового круговорота. Для того чтобы быть собой до конца, Пустота должна сама опустошиться, чтобы в результате стать полнейшей наполненностью.
---------------------------
Так что нефиг наезжать на просветлённого! Тут вам не прогнивший Запад! У нас - свобода совести, понимаешь!
Пипей, затролили жучку.)
Это что за такой энкодер финтипуперный, аж с двумя кнопками ?
Одна втыкивает, вторая вытыкивает... )))))
ТС хотел сказать подпрограммы, неужтонепонятно...
ТС хотел сказать подпрограммы, неужтонепонятно...
Если хотел, то почему не сказал? Кто или что помешало?
Так можно сказать, что в посте #1 я хотел полностью решить все настоящие и будущие проблемы ТС, "неужтонепонятно".
Encbutton примеры еще раз посмотрите, btnUp.tick(); это опрос кнопок, а в условиях нужен click
Также рекомендуется делать сброс флагов resetState() чтобы одно нажатие несколько раз не обрабатывалось (если все флаги в условиях сойдутся, мало ли))) ).
01
void
loop
() {
02
btnUp.tick();
// Обработка кнопки вверх
03
btnDown.tick();
// Обработка кнопки вниз
04
05
if
(btnUp.click() && disp1_y == 1) {
06
disp1_y = 0;
07
disp1_n = 0;
08
disp1_v_y();
09
btnUp.resetState();
10
}
11
12
if
(btnDown.click() && disp1_n == 1) {
13
disp1_y = 0;
14
disp1_n = 0;
15
disp1_v_n();
16
btnDown.resetState();
17
}
18
19
if
(btnUp.click() && disp2_y == 1) {
20
disp2_y = 0;
21
disp2_n = 0;
22
disp2_v_y();
23
btnUp.resetState();
24
}
25
26
if
(btnDown.click() && disp2_n == 1) {
27
disp2_y = 0;
28
disp2_n = 0;
29
disp2_v_n();
30
btnDown.resetState();
31
}
32
33
34
}
"неужтонепонятно"
я о другом, что мы хотим от ТС если мэтры от Adafruit такое пишут:
01
/*!
02
@brief Instantiate Adafruit ILI9341 driver with hardware SPI using
03
a specific SPI peripheral (not necessarily default).
04
@param spiClass Pointer to SPI peripheral (e.g. &SPI or &SPI1).
05
@param dc Data/Command pin # (required).
06
@param cs Chip select pin # (optional, pass -1 if unused and
07
CS is tied to GND).
08
@param rst Reset pin # (optional, pass -1 if unused).
09
*/
10
/**************************************************************************/
11
Adafruit_ILI9341::Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs,
12
int8_t rst)
13
: Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, spiClass, cs, dc,
14
rst) {}
15
#endif // end !ESP8266
16
17
================================================================
18
19
/*!
20
@brief Instantiate Adafruit ST7735 driver with selectable hardware SPI
21
@param spiClass Pointer to an SPI device to use (e.g. &SPI1)
22
@param cs Chip select pin #
23
@param dc Data/Command pin #
24
@param rst Reset pin # (optional, pass -1 if unused)
25
*/
26
Adafruit_ST7735::Adafruit_ST7735(SPIClass *spiClass, int8_t cs, int8_t dc,
27
int8_t rst)
28
: Adafruit_ST77xx(ST7735_TFTWIDTH_128, ST7735_TFTHEIGHT_160, spiClass, cs,
29
dc, rst) {}
30
#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