Button PUSH Counter with LCD display - Arduino for beginners

Discutii despre placile de dezvoltare compatibile Arduino
User avatar
Levy
Gold User
Posts: 1581
Joined: 02 Oct 2013 15:07
Location: ABSURDISTAN

Button PUSH Counter with LCD display - Arduino for beginners

Unread postby Levy » 16 May 2021 12:21

Pentru incepatori in arduino, destul de util, pentru ca invata si despre folosirea ecranelor LCD 1602 cat si a starii butoanelor.
Ecranul LCD din acest experiment se numeste 1602, pentru ca poate afisa 16 caractere pe 2 randuri, mai sint si alte modele, cel mai raspandit fiind 2004.

pentru inceput, adaugam libraria LiqidCrystal si declaram variabilele din software...

Code: Select all

#include <LiquidCrystal.h>
int Button1State = 0;
int LastButton1State = 0;
 
int Button2State = 0;
int LastButton2State = 0;
 
int Counter = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int XCoorD = 5;


dupa care in setup

Code: Select all

void setup()
{
  lcd.begin(16,2);
  pinMode(10,INPUT);
  pinMode(9, INPUT);
  lcd.setCursor(2,0);
  lcd.print("PRESS BUTTONS");
  lcd.setCursor(XCoorD,1);
  lcd.print(Counter);
 
}

initializam lcd-ul, definim pinii 10 si 9 ca INPUT pentru butoane, setam cursorul lcd pe caracterul 2 randul 0. Cursorul se seteaza de la caracterul 0 si randul 0, astfel primul rand nu este randul 1 ci randul 0, iar primul caracter nu este in pozitia 1 ci in pozitia zero. Sper ca nu am facut prea multa ceata cu aceasta explicatie :haha: :haha:

Prima data ne apucam de legat firele de componente.
Lista cu componente necesare acestui montaj este urmatoarea:
Image

Schema acestuia este aici:
Image

Dupa toate astea ne apucam de partea care se repeta din cod pana la nesfarsit. Void loop...

Code: Select all

    Button1State = digitalRead(9);
    if (Button1State != LastButton1State)
    {
      if (Button1State == HIGH)
      {
        Counter = Counter - 1;
        lcd.clear();
        lcd.setCursor(2,0);
        lcd.print("PRESS BUTTONS");
        lcd.setCursor(XCoorD,1);
        lcd.print(Counter);
        }
    } else { }
  delay(5);
  LastButton1State = Button1State;

- starea butonului o citim din pinul 9 digital
- daca starea butonului NU este egala cu ultima stare a butonului..
- si daca starea butonului 1 este HIGH
- atunci numaratorul (Counter) este egal cu numaratorul -1 (pentru ca acesta este butonul care va scadea un numar din numarator la fiecare apasare)
- daca toate astea sint indeplinite, stergem ecranul lcd, setam cursorul la x=2 si y=0 adica al doilea caracter (de fapt al 3-lea!!!) si linia 1 (de fapt linia zero)
- si afisam textul "APASA PE BUTOANE"
- dupa care setam coordonatele pentru afisarea numaratorului
-si afisam numaratorul.
Am avut nevoie de aceasta secventa, pentru ca daca ne ramane degetul pe buton sa nu fuga datele la nesfarsit. Astfel facut codul, numaratorul va adauga UN SINGUR numar (sau va scadea dupa caz) la numarator.

Pentru a face si butonul care adauga un numar se va face aceasi secventa pentru variabilele declarate pentru butonul 2.

Astfel forma finala a numaratorului va fi acesta.

Code: Select all

#include <LiquidCrystal.h>
int Button1State = 0;
int LastButton1State = 0;

int Button2State = 0;
int LastButton2State = 0;

int Counter = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int XCoorD = 5;

void setup()
{
  lcd.begin(16,2);
  pinMode(10,INPUT);
  pinMode(9, INPUT);
  lcd.setCursor(2,0);
  lcd.print("PRESS BUTTONS");
  lcd.setCursor(XCoorD,1);
  lcd.print(Counter);
 
}

void loop()
{
   Button1State = digitalRead(9);
     if (Button1State != LastButton1State)
    {
      if (Button1State == HIGH)
      {
        Counter = Counter - 1;
        lcd.clear();
        lcd.setCursor(2,0);
        lcd.print("PRESS BUTTONS");
        lcd.setCursor(XCoorD,1);
        lcd.print(Counter);
        }
    } else { }
  delay(5);
  LastButton1State = Button1State;
 
   Button2State = digitalRead(10);
     if (Button2State != LastButton2State)
    {
      if (Button2State == HIGH)
      {
        Counter = Counter + 1;
        lcd.clear();
        lcd.setCursor(2,0);
        lcd.print("PRESS BUTTONS");
        lcd.setCursor(XCoorD,1);
        lcd.print(Counter);
        }
    } else { }
  delay(5);
  LastButton2State = Button2State; 
}


Mentionez ca nu am facut acest montaj fizic, ci doar simulat in tinkercad, in functie de viteza de reactie a aliexpress (care nu e fantastica :haha: ) probabil va fi executata si fizic.
Montajul din tinkercad i-l puteti gasi aici.

Un video facut pe fast forward despre acest montaj puteti vedea aici
phpBB [video]
Dacă ai tăiat și ultimul copac, ai otrăvit și ultimul râu și ai prins și ultimul pește, ai să fi uimit să constați că banii nu sunt comestibili !

Image

Return to “Arduino”

Who is online

Users browsing this forum: No registered users and 69 guests