Подключение аналоговой клавиатуры
- Войдите на сайт для отправки комментариев
Вс, 01/11/2020 - 10:04
Товарищи знатоки, подскажите начинающему если не трудно. Из-за необходимости освободить цифровые порты пришлось использовать аналоговую клавиатуру, подключил библиотеку Алекса Гайвера, все функции получается реализовать, а вот с одной никак не выходит, хотя этот же код работал на другой библиотеке для цифровых выходов. Кнопка myButt1 запускает серию сообщений "Working" с интервалом 1000ms, а нажатие на кнопку myButt2 должно остановить эту серию и выдать сообщение STOP. Так вот серия запускается, но на кнопку butt2 нет реакции. Возможно я неправильно выставил условие if (myButt2.isClick()) ? Вот ссылка на гайд по библиотеке https://alexgyver.ru/gyverbutton/
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/Gyv... GButton myButt1; GButton myButt2; GButton myButt3; long previousMillis = 0; long interval = 1000; void runSeries(){ for (;;) { if (myButt2.isClick()) { Serial.println("STOP"); } else { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; Serial.println("Working"); } } } } void setup() { Serial.begin(9600); } void loop() { int analog = analogRead(0); myButt1.tick(analog < 860 && analog > 820); myButt2.tick(analog < 740 && analog > 700); myButt3.tick(analog < 650 && analog > 600); if (myButt1.isClick()) { Serial.println("Start"); runSeries(); } if (myButt3.isClick()) { Serial.println("Button 3 pressed"); } }
Используй флаг(и).
А гайвера тут не показывай, не любят его тут.
Используй флаг(и).
А гайвера тут не показывай, не любят его тут.
А можно подробнее про флаг? Мне просто еще не приходилось его применять)) Просто пару дней как с ардуинкой начал играться впервые. А про Гайвера не знал, точнее я про него узнал только тогда, когда нашел эту его библиотеку))
Изучай: http://arduino.ru/tutorials/BlinkWithoutDelay
чтобы кнопка срабатывала, необходимо вызывать ее метод tick() как можно чаще. А чтобы работала аналоговая кнопка - еще и читать analogRead() Переташите эти действия в процедуру runSeriaes() - решите проблему.
Но это кривое решение "в лоб". Правильнее будет переписать программу, избавится от бесконечного цикла for в процедуре и использовать флаги. Старайтесь сразу привыкать к правильной логике программа - не использовать delay, while и бесконечные циклы
чтобы кнопка срабатывала, необходимо вызывать ее метод tick() как можно чаще. А чтобы работала аналоговая кнопка - еще и читать analogRead() Переташите эти действия в процедуру runSeriaes() - решите проблему.
Но это кривое решение "в лоб". Правильнее будет переписать программу, избавится от бесконечного цикла for в процедуре и использовать флаги. Старайтесь сразу привыкать к правильной логике программа - не использовать delay, while и бесконечные циклы
Мне хотя бы и в лоб для начала сделать ,чтобы заработало, я перфекционизмом можно заниматься когда уже хоть немножко буду знать что к чему)) Значит в процедуру runSeries надо скопировать
int analog = analogRead(0);
изучать ардуино на основе чужих скетчей смотрю принцип как сделано и леплю свои.
Неправильно начали изучать. Смотреть чужой код полезно, но лепить свой скетч из кусков не стоит. Нужно понимать, что и зачем в коде - а для этого нужна теория. Я бы посоветовал начать с изучения учебника по языку С/С++ с примерами
Неправильно начали изучать. Смотреть чужой код полезно, но лепить свой скетч из кусков не стоит. Нужно понимать, что и зачем в коде - а для этого нужна теория. Я бы посоветовал начать с изучения учебника по языку С/С++ с примерами
Да это понятно, без теории никуда, но кое-что конечно можно сделать и просматривая другие скетчи, я уже пару своих устройств запустил таким образом и доволен как слон)) Просто мне очень хотелось бы запустить еще одно устройство сегодня и вот только вышеописанная проблемка не дает мне этого сделать. Сами понимаете, что довольно маленькая вероятность того, что если я возьмусь прямо сейчас за учебник С++, то мне удастся понять как применить Ваш совет насчет вызова метод tick(). Если не хотите показать пример как это сделать просто так, то за какую сумму сможете мне в этом помочь? Заранее благодарю!
Если не хотите показать пример как это сделать просто так, то за какую сумму сможете мне в этом помочь? Заранее благодарю!
да я вам уже помог. Строчки, которые я сказал перенести - и есть метод tick() для трех кнопок. Смотрите внимательнее на начало строчки:
myButt3.tick(analog < 650 && analog > 600);
Учите теорию. А то вам ответ подскажут, а вы даже не сможете понять, о чем разговор, как в этом случае.
да я вам уже помог. Строчки, которые я сказал перенести - и есть метод tick() для трех кнопок. Смотрите внимательнее на начало строчки:
К сожалению, никаких изменений не произошло после копирования, серия запускается, но так же не останавливается кнопкой myButt2, программа застревает внутри runSeries
Потому что неправильно перенесли. Попробуйте все же понять, как работает ваш (ваш ? :) код, в частности процедура runSeries()
А подсказывать конкретное место, куда надо поставить каждую строчку - это уже не уважать ни вас, ни себя.
Потому что неправильно перенесли. Попробуйте все же понять, как работает ваш (ваш ? :) код, в частности процедура runSeries()
А подсказывать конкретное место, куда надо поставить каждую строчку - это уже не уважать ни вас, ни себя.
Ну я не считаю, что подсказав Вы проявляете неуважение к кому-либо. Тем не менее, посмотрел, подумал, получилось! Огромное спасибо! Будем грызть гранит науки, а то идей разных полезных устройств масса, а каждый раз платить за каждый скетч довольно накладно, я имею ввиду не то, что программисты дорого берут, а то, что допустим задумал устройство, сформировал прогеру задачу, он сделал, я оплатил, а тут в процессе возникли еще мысли по внедрению еще какой-то функции или изменения существующей и получается человек уже недоволен тем, что договорились по одному набору функций, а тут прибавляются постоянно еще изменения и это все довольно сложно оценивать. Сразу взять и придумать что-то крутое не допиливая тех задание по ходу разработки практически невозможно.
Конечно лучше самому! Вливайтесь...
"как хорошо уметь курить - не надо бабушку просить"
....
Не надо звать,
Не надо ждать,
А можно взять
И написать!