Меню с помощью библиотеки m2tklib
- Войдите на сайт для отправки комментариев
Сб, 07/04/2012 - 09:34
Я так понял, что библиотека m2tklib заточена на работу с конпками. Но кнопки должны подключаться каждая к своему входу, что меня не устраивает т.к. я экономлю входы.
Но была некая доработка библиотеки, после чего библиотека стала работать с событиями Arduino. Но как заставить библиотеку вопринимать эти события я не понимаю. Подскажите пожалуйста разобраться с примером!
За основу возьмем пример идущий в составе самой библиотеки под названием Combo
#include <glcd.h> // inform Arduino IDE that we will use GLCD library #include "M2tk.h" #include "utility/m2ghglcd.h" uint8_t uiKeySelectPin = 3; uint8_t uiKeyDownPin = 2; uint8_t uiKeyUpPin = 1; uint8_t uiKeyExitPin = 0; uint8_t select_color = 0; uint8_t select_priority = 0; void fn_ok(m2_el_fnarg_p fnarg) { /* accept selection */ } void fn_cancel(m2_el_fnarg_p fnarg) { /* discard selection */ } const char *fn_idx_to_color(uint8_t idx) { if ( idx == 0 ) return "red"; else if (idx == 1 ) return "green"; return "blue"; } const char *fn_idx_to_priority(uint8_t idx) { switch(idx) { case 0: return "lowest"; case 1: return "low"; case 2: return "medium"; case 3: return "high"; case 4: return "highest"; } return ""; } M2_LABEL(el_label1, NULL, "Color:"); M2_COMBO(el_combo1, NULL, &select_color, 3, fn_idx_to_color); M2_LABEL(el_label2, NULL, "Priority: "); M2_COMBO(el_combo2, "v1", &select_priority, 5, fn_idx_to_priority); M2_BUTTON(el_cancel, NULL, "cancel", fn_cancel); M2_BUTTON(el_ok, NULL, " ok ", fn_ok); M2_LIST(list) = { &el_label1, &el_combo1, &el_label2, &el_combo2, &el_cancel, &el_ok }; M2_GRIDLIST(list_element, "c2",list); M2tk m2(&list_element, m2_es_arduino, m2_eh_2bs, m2_gh_glcd_ffs); void setup() { m2.setPin(M2_KEY_SELECT, uiKeySelectPin); m2.setPin(M2_KEY_NEXT, uiKeyDownPin); m2.setPin(M2_KEY_PREV, uiKeyUpPin); m2.setPin(M2_KEY_EXIT, uiKeyExitPin); } void loop() { m2.checkKey(); if ( m2.handleKey() ) { m2.draw(); } }
Кусок скетча отвечающего за распознование нажатия определенной кнопки:
uint8_t readButtons() { int b,c = 0; c=analogRead (A0); if (c == 0) { //Serial.println("KeyNone"); return M2_KEY_NONE; } else if (c>615 && c<630) { // Serial.println("KeySelect"); return M2_KEY_EVENT(M2_KEY_SELECT); } else if (c>685 && c<700) { // Serial.println("KeyExit"); return M2_KEY_EVENT(M2_KEY_EXIT); } else if (c>765 && c<785) { // Serial.println("KeyNext"); return M2_KEY_EVENT(M2_KEY_NEXT); } else if (c>875 && c<893) { // Serial.println("KeyPrev"); return M2_KEY_EVENT(M2_KEY_PREV); } else if (c==1023) { // Serial.println("KeyDataUp"); return M2_KEY_EVENT(M2_KEY_DATA_UP); } }
Как их связать, подскажите пожалуйста, заранее благодарен!!!
Примеров у автора я не нашел, кроме этого (m2esarduinoir.c).
В иделе, хочу объеденить m2tklib и Matrix Keypad 4x4
Всем спасибо, очень помогли, но я разобрался.
а это не поможет?
http://arduino.ru/forum/programmirovanie/menyu-dlya-tekstovogo-lcd-pomogite-optimizirovat
rln.nnov.ru/index.php
Всем спасибо, очень помогли, но я разобрался.
Подскажи как ты это реализовал.
Кому интересно - реализация работы меню m2tklib с аналоговой кнопки.
adc_key_in - установите свои значения
Доброго времени суток.
Уважаемые форумчане помогите советом или примером. Я в программировании и микроконтроллерах новенький.
Для одного проекта мне нужно реализовать своего рода меню. В проекте используется ардуино, LCD, энкодер с кнопкой и датчики с исполнительными механизмами. Как мне организовать такую вещь - после включения нужно выбрать один из 3х вариантов при помощи энкодера и после нажатия на кнопкувыбрать тот или иной параметр который в последствии будет учавствовать в исполнении программы
Скетч в качестве примера меню при помощи энкодера.
По скетчу думаю понятно к каким пинам подключается дисплей и энкодер с кнопкой.
Спасибо большое буду разбираться