Официальный сайт компании Arduino по адресу arduino.cc
LCD+STEPPER
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Всем здравствуйте! Я новичек в програмировании Ардуино! Решил собрать себе вот такую штуку
Продвигаюсь потихоньку!
Принцип работы сей штуки такой: "+" и "-" задается число оборотов шаговика (эти обороты отображаются в первой строчке дисплея) нажимается кнопка "старт". Во второй строчке отображается количество нажатий кнопки "старт". Кнопка "сброс" работает по принципу КОРОТКОЕ НАЖАТИЕ - ОБНУЛЕНИЕ КОЛИЧЕСТВА НАЖАТИЙ КНОПКИ "СТАРТ", ДЛИННОЕ НАЖАТИЕ (ОКОЛО 2-3 СЕК) - ОБНУЛЕНИЕ ЧИСЛА ОБОРОТОВ!
В процессе разобрался с дисплеем и выводом необходимой информации, но вот по кнопкам возникли небольшие вопросы:
1. Была написана программа для 2-х кнопок ("+" и "-" ) и вывод значений на дисплей, но я не могу понять как сделать так чтоб 1 клик "+" = плюс 1, а 1 клик "-" = минус 1 единица. В реальности получается что 1 клик = больше 1 единицы, так еще и в состоянии покоя (т.е. сборка стоит без каких-либо действий) число оборотов шаговика растет или уменьшается!
2. Не представляю как реализовать сброс!
Собственно сам сам скеч:
#include <Wire.h> #include <LiquidCrystal.h> // инициализация с указанием контактов подключения LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // задаем переменные int upPin = 8; // пин + counter int downPin = 7; // пин - counter int Count = 0; // счетчик общий int CountH = 0; // счетчик крючков boolean upPinCurentState = LOW; // текущее состояние кнопки + boolean upPinLastState = LOW; // предыдущее состояние кнопки + boolean downPinCurentState = LOW; // текущее состояние кнопки - boolean downPinLastState = LOW; // предыдущее состояние кнопки - void setup() { // красивая "загрузка" программы при старте :) lcd.begin(16, 2); lcd.print("Loading"); delay(500); // ждем 0.5 секунды lcd.print("."); delay(500); // ждем 0.5 секунды lcd.print("."); delay(1000); // ждем 1 секунду lcd.clear(); //очистка экрана // Задаем режим работы портов pinMode(upPin, INPUT); // Инициализация входа кнопки + pinMode(downPin, INPUT); // Инициализация входа кнопки - } // избавляемся от дребезга upPin boolean debounceupPin(boolean upPinLastState) { boolean currentupPin = digitalRead(upPin); if (upPinLastState != upPinCurentState) { delay(100); currentupPin = digitalRead(upPin); delay (500); } return currentupPin; } // избавляемся от дребезга downPin boolean debouncedownPin(boolean downPinLastState) { boolean currentdownPin = digitalRead(downPin); if (downPinLastState != downPinCurentState) { delay(100); currentdownPin = digitalRead(downPin); delay (500); } return currentdownPin; } void loop() { //действие кнопки upPin upPinCurentState = debounceupPin(upPinLastState); if (upPinCurentState == HIGH && upPinLastState == LOW) { CountH = CountH + 1; } upPinLastState = upPinCurentState; //действие кнопки downPin downPinCurentState = debouncedownPin(downPinLastState); if (downPinCurentState == HIGH && downPinLastState == LOW) { CountH = CountH - 1; } downPinLastState = downPinCurentState; if (CountH < 0) CountH = 0; // вывод на дисплей lcd.setCursor(0, 0); // устанавливаем курсор в 0-ом столбце, 1 строке lcd.print("Count="); lcd.print(Count); lcd.print(" "); // затрем цифры в конце от прошлого значения, если //предыдущее значение имело больше символов lcd.setCursor(0, 1); // устанавливаем курсор в 0-ом столбце, 1 строке lcd.print("CountH="); lcd.print(CountH); lcd.print(" "); // затрем цифры в конце от прошлого значения, если //предыдущее значение имело больше символов }
для кнопок заюзать класс титановый велосипед для тактовой кнопки
делеи тебе не нужны
НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!
НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!
ну, и что теперь с тобой делать? - усыновить и пороть по субботам солёными розгами?
знаток или профи?
знаток или профи?
бля. иди нахуй, коматоз.
НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!
изучай
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku
http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki
http://arduino.ru/Reference
а если учить не хочется - то за денежку тебе код нацарапают
ниже есть раздел "Ищу исполнителя"
Тебе нужно несколько раз проверить состояние кнопки. Например в течении 200 - 500 микросекунд.
Все дело в "дребезге" кнопки, это когда в течении долей секунды кнопка замыкается и размыкается несколько раз. А контролеер работает достаточно быстро, чтобы эти колебания поймать.
кусай за х.й олень! Если не сможешь конкретно объяснить в чем причина описанная например в п.1 не хер вообще лезть!
ок, с нажатием все понятно, а почему в состоянии покоя-то изменяются значения?
Если не сможешь конкретно объяснить в чем причина описанная например в п.1 не хер вообще лезть!
чучело, я тебе написал код, который решает твои жалкие проблемы, код с описанием, создал тему, где все обсосали все достоинства и недостатки.
если ты такой коматоз, что не в состоянии прочитать и вникнуть в суть, то продолжаешь своё жалкое сусчествование ожидании ударов палкой по своей тупой голове.