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 не хер вообще лезть!
чучело, я тебе написал код, который решает твои жалкие проблемы, код с описанием, создал тему, где все обсосали все достоинства и недостатки.
если ты такой коматоз, что не в состоянии прочитать и вникнуть в суть, то продолжаешь своё жалкое сусчествование ожидании ударов палкой по своей тупой голове.