Подскажите пример меню для ардуино
- Войдите на сайт для отправки комментариев
Вс, 27/08/2017 - 22:34
Не могу найти толкового примера меню для ардуино, делаю часы-термометр-анемометр проблема стала именно с меню.
Не могу найти толкового примера меню для ардуино, делаю часы-термометр-анемометр проблема стала именно с меню.
https://www.google.com/search?q=меню+ардуино
Умничать и я могу. Если бы гугл давал нормальные результаты, а не хлам - не просил бы помощи на этом форуме.
Умничать и я могу. Если бы гугл давал нормальные результаты, а не хлам - не просил бы помощи на этом форуме.
Не обязательно в параллель.
я обычно делаю одну горячую кнопку ( иногда на прерывании) и после ее нажатия останавливаю основной цикл и ухожу полностью в обработку меню. Иногда меню сидит в сетапе с записью параметров в еепром, потом рабочий цикл, переход в меню ресетом или завершением цикла по условиям.
Одновременности пока не требовалось.
Не обязательно в параллель.
я обычно делаю одну горячую кнопку ( иногда на прерывании) и после ее нажатия останавливаю основной цикл и ухожу полностью в обработку меню. Иногда меню сидит в сетапе с записью параметров в еепром, потом рабочий цикл, переход в меню ресетом или завершением цикла по условиям.
Одновременности пока не требовалось.
Вот вы обычно делаете так, другие иначе. Вот у каждого своя оригинальная "песня", а чужие песни они "фуфло".
Ну отчего же можно и другие песни послушать. Я спел так как мне приработалось. Может теперь Вы споёте ;)
Моя песня вам не понравится. Надо сначало изучать ООП и Си++. Потом как проектировать программу. А затем слушать "песню". А вы хотите обойтись чужим #inclune "все включено.h"
Я? Мне своих песен хватает, и я описал свои способы и они мнея устраивают. А Вы тут разглагольствуете что и как изучать и кидаетесь странными обвинениями, типа что то хочу у Вас перенять. Мне до Вас и Вашего все равно . Успехов.
Что у кого вы пытаетесь перенять. Я регулярно раз в полгода прикидываю как бы я написал меню. И каждый раз получается на иных принципах, чем раньше. Сейчас в этой теме мы обсужаетм "коня в вакууме". Так как вы "очень одаренный" ТС тупо забыли описать ТЗ и на каком железе реализуете меню. Что у вас кнопки, энкодер, аналоговая клавиатура, сенсор. Экран какой . Вы немного подвиньтесь, а то вы свой спиной закрываете вид из моего хрустального шара.
https://github.com/abcminiuser/micromenu-v2
Ардуино нано + max7219 2последовательно включенных +кнопки(резистивная клавиатура)+ RTC +ds12b20 2шт.
Ну для такой конструкции у меня меню нет. Но упрощеную версию могу показать . Клавиатура из трех кнопок + - shift . Двигать вверх вниз + и -. А вот изменение величины надо (- и shift) или (+ и shift) . Вывод в Serial.
//**/ unsigned long mill; //------Cl_3Btn---------------------- // класс клавиатура из 3х кнопок (+,-,shift) class Cl_3Btn { protected: const byte pin1, pin2, pin3; void (*Do1)(), (*Do2)(), (*Do3)(), (*Do4)(); bool bounce1 = 0, bounce2 = 0; bool btn1, oldBtn1, btn2, oldBtn2; unsigned long past1, past2; public: Cl_3Btn(byte pin1_, byte pin2_, byte pin3_, void (*Do1_)(), void (*Do2_)(), void (*Do3_)(), void (*Do4_)()) : pin1(pin1_), pin2(pin2_), pin3(pin3_), Do1(Do1_), Do2(Do2_), Do3(Do3_), Do4(Do4_) {} void setup() { pinMode(pin1, INPUT_PULLUP); pinMode(pin2, INPUT_PULLUP); pinMode(pin3, INPUT_PULLUP); } void loop() { bool newBtn1 = digitalRead(pin1); bool newBtn2 = digitalRead(pin2); bool newBtn3 = digitalRead(pin3); if (!bounce1 && newBtn1 != btn1) { bounce1 = 1; past1 = mill; } if (bounce1 && mill - past1 >= 10) { bounce1 = 0 ; oldBtn1 = btn1; btn1 = newBtn1; if (!btn1 && oldBtn1 && newBtn3) (*Do1)(); if (!btn1 && oldBtn1 && !newBtn3) (*Do3)(); } if (!bounce2 && newBtn2 != btn2) { bounce2 = 1; past2 = mill; } if (bounce2 && mill - past2 >= 10) { bounce2 = 0 ; oldBtn2 = btn2; btn2 = newBtn2; if (!btn2 && oldBtn2 && newBtn3) (*Do2)(); if (!btn2 && oldBtn2 && !newBtn3) (*Do4)(); } } }; //------------------------------------ int var0 = 4; void viev0() { Serial.println(); Serial.print("var0="); Serial.print(var0); } void minus0() { if (0 < var0) --var0; } void plus0() { if (var0 < 10) ++var0; } //** int var1 = 4; void viev1() { Serial.println(); Serial.print("var1="); Serial.print(var1); } void minus1() { if (0 < var1) --var1; } void plus1() { if (var1 < 10) ++var1; } //** int var2 = 4; void viev2() { Serial.println(); Serial.print("var2="); Serial.print(var2); } void minus2() { if (0 < var2) --var2; } void plus2() { if (var2 < 10) ++var2; } struct Note { void (*viev)(); byte up; byte down; void (*minus)(); void (*plus)(); }; struct Note Menu[] = { viev0, 0, 1, minus0, plus0,//--0 viev1, 0, 2, minus1, plus1,//--1 viev2, 1, 2, minus2, plus2,//--2 }; byte num = 0; //-----компоновка---------------------- void Do1Btn() { num = Menu[num].down; Menu[num].viev(); } void Do2Btn() { num = Menu[num].up; Menu[num].viev(); } void Do3Btn() { Menu[num].minus(); Menu[num].viev(); } void Do4Btn() { Menu[num].plus(); Menu[num].viev(); } Cl_3Btn Keys(/*пин +*/2,/*пин -*/3,/*пин shift*/4, /*обработчик*/Do1Btn,/*обработчик*/Do2Btn,/*обработчик*/Do3Btn,/*обработчик*/Do4Btn); //-----main----------------------- int main() { init(); // setup() Serial.begin(9600); Keys.setup(); Menu[num].viev(); for (;;) { // loop() mill = millis(); Keys.loop(); } return 0; } /*Скетч использует 3050 байт (9%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 264 байт (12%) динамической памяти, оставляя 1784 байт для локальных переменных. Максимум: 2048 байт. */