меню без древа но с тремя перемнными
- Войдите на сайт для отправки комментариев
вечер добрый учасникам, постигаю азы ардуино ну и соответственно есть вопрос с привязыванием кнопок к переменным на одном экране:
имеется наброски меню с одним экраном, (никаких древовидных переходов) и а на этом экране нужно изменять 3 перемнные с помощью энкодера и двух кнопок.
Не обращайте внимание на транслит и возможно лишние строки, это всего лишь набросок. Многое еще хочу добавить но пока что вопрос с изменением трех переменных. Конкретно надо чтоб нажатием кнопок переходить между этими переменными а энкодером изменят значения. находил на форуме работу энкодера- взял как приемливый образец: #define ENCODER_DO_NOT_USE_INTERRUPTS
да и вообще создание меню отдаленно мне почему то напоминает таблицу пифагора... не знаю, но вот эти все условия как бы говорят что точка пересечения X и Y и есть цель команды одного if
[code] #define ENCODER_DO_NOT_USE_INTERRUPTS // без прерываний. #include <Encoder.h> // переменные byte vozduh = 0; //переменная для двигателя 12в (0-255) int podazh = 0; // здесь будут шаги nema 17 boolean alarm = 0; // переменная для включения аварии либо 1 либо 0 long old_pos = 0; // старая позиция для энкодера int stroka = 0;// переменная номера строчек меню - вот ее пробовал сделать чтоб между строками переходить. здесь кнопочки Encoder Enc_1(31, 33); //кнопки энкодера int enter = 41; // кнопка стопа на плате int enterEnk = 35; // кнопка на энкодере здесь упускаю все чтоб не мозолить лишним мозг и дальше собственно обработка самих входов: //обработка кнопок выбора строки меню // перход на следующую переменную if (digitalRead(enter)== HIGH) { stroka++;// следующая переменная с верху в низ if (stroka>3)//если уровень больше 3 { stroka=0;// то вернуться к началу } //delay (500); //lcd.clear(); } // перелистывание вверх if (digitalRead(enterEnk)== HIGH) { stroka--;// следующая строка меню на одну строчку if (stroka<0)//если уровень больше 3 { stroka=3;// то вернуться к началу } //delay (500); //lcd.clear(); } //!!!!!!!!!!!!!!!!! обработка нажатия энкодера //для нулевой строки, самой первой.всего три их. long new_pos; new_pos = Enc_1.read()/4; if (new_pos != old_pos) { if (stroka==0 && new_pos > old_pos ) { lcd.clear(); vozduh ++; // увеличиваем значение } if (stroka==0 && new_pos < old_pos ) //delay (100); { lcd.clear(); vozduh -- ; // уменьшаем значение } old_pos = new_pos; } [/code]
пробовал делать перелистывание строк только в одну сторону, ниего не дало, энкодер меняет значения только первой, нулевой переменной.
((
Посмотри тут http://arduino.ru/forum/programmirovanie/prostoe-menyu-dlya-simvolnogo-d...
Только вмето опроса кнопок нужно энкодер воткнуть.
опять же... древо.
ну все равно что-то есть интересное!
Попутный вопрос: возможно я не правильно взял направление?
Экран выводит лишь глобальную перменную, а кнопки и блютуз изминяют ее отдельно, экран перписывает значение опять. Потом еще и через епром для запоминания при выключении.
опять же... древо.
Дерево - нормальный и ественный способ представления меню. Даже если не нужно сворачивать разворачивать, все равно - то, что Вы называете "переходом между переменными" легко реализуется переходом между узлами дерева.
Вы же почему-то отказались от общепринятого способа создания меню и упорно изобретаете велосипед.
Попутный вопрос: возможно я не правильно взял направление?
Совершенно верно. См. выше.
Не, не ! Никаких велосипедов! Хочу как все)
Да и не доставал бы. Но как и остальные пришёл тот период что дальнейшее понятие программирования развивается в примерах и доставанием уже знающих)))
Все вот эти тонкости применения, по ним явно не хватает книжек(
Еще бы почитать ...
все же сделал без древа, дальше иду. Оказалось что кнопки у меня глючили а я все с программой бился)) Разобрался с подтягивающими резисторами, дело пошло дальше. Сейчас стою у задачи: задавать количество шагов с меню, считать их и запоминать. А также делать сброс в 0. курю форум
что не курится совсем((
нужна помощь.
пробовал разные коды но работает только с этим
шилд ramps 1.4 и драйвер на нем 4988, перепробовал практичесски все примеры из форума - нигде не сдвинулся с места , только с этим кодом крутит в одну сторону и без остановки. На данном этапе пытаюсь изучить ШД а именно библитеку http://www.airspayce.com/mikem/arduino/AccelStepper/AccelStepper_8h_source.html
но на буржуйском не особо быстро получается..((
подозреваю из-за того что только в этом примере
сразу указывается что
digitalWrite(enx, LOW);