LCD+STEPPER

Serega_ka
Offline
Зарегистрирован: 26.10.2016

Всем здравствуйте! Я новичек в програмировании Ардуино! Решил собрать себе вот такую штуку

Продвигаюсь потихоньку!

Принцип работы сей штуки такой: "+" и "-" задается число оборотов шаговика (эти обороты отображаются в первой строчке дисплея) нажимается кнопка "старт". Во второй строчке отображается количество нажатий кнопки "старт". Кнопка "сброс" работает по принципу КОРОТКОЕ НАЖАТИЕ - ОБНУЛЕНИЕ КОЛИЧЕСТВА НАЖАТИЙ КНОПКИ "СТАРТ", ДЛИННОЕ НАЖАТИЕ (ОКОЛО 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("    ");      // затрем цифры в конце от прошлого значения, если 
                             //предыдущее значение имело больше символов
                             

 }

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

для кнопок заюзать класс титановый велосипед для тактовой кнопки

делеи тебе не нужны

Serega_ka
Offline
Зарегистрирован: 26.10.2016

НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Serega_ka пишет:

НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!

ну, и что теперь с тобой делать? - усыновить и пороть по субботам солёными розгами?

Serega_ka
Offline
Зарегистрирован: 26.10.2016

знаток или профи?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Serega_ka пишет:

знаток или профи?

бля. иди нахуй, коматоз.

vvadim
Offline
Зарегистрирован: 23.05.2012

Serega_ka пишет:

НОВИЧЕК ЙА!!!!! Очень много непонятных выражений......смысл класс титановый велосипед для тактовой кнопки я понял, но вот реализовать для себя пока что не преставляю как!!!

 

изучай

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

а если учить не хочется - то за денежку тебе код нацарапают
ниже есть раздел "Ищу исполнителя"

_mikka
Offline
Зарегистрирован: 01.11.2015

Тебе нужно несколько раз проверить состояние кнопки. Например в течении 200 - 500 микросекунд.

Все дело в "дребезге" кнопки, это когда в течении долей секунды кнопка замыкается и размыкается несколько раз. А контролеер работает достаточно быстро, чтобы эти колебания поймать.

Serega_ka
Offline
Зарегистрирован: 26.10.2016

кусай за х.й олень! Если не сможешь конкретно объяснить в чем причина описанная например в п.1 не хер вообще лезть!

Serega_ka
Offline
Зарегистрирован: 26.10.2016

ок, с нажатием все понятно, а почему в состоянии покоя-то изменяются значения?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Serega_ka пишет:

Если не сможешь конкретно объяснить в чем причина описанная например в п.1 не хер вообще лезть!

чучело, я тебе написал код, который решает твои жалкие проблемы, код с описанием, создал тему, где все обсосали все достоинства и недостатки.

если ты такой коматоз, что не в состоянии прочитать и вникнуть в суть, то продолжаешь своё жалкое сусчествование ожидании ударов палкой по своей тупой голове.