🚚 Besplatna dostava za narudžbe veće od 35EUR

TIPKALO (PUSH BUTTON)

TIPKALO (PUSH BUTTON)-Uncategorized @hr

ŠTO SU?

Tipkalo je najčešće korišteni switch u elektronici i nema potreba da se dugo zadržavamo na tome što je. Vrlo kratko, s jednom sličicom, prikazati ćemo što i kako radi, a zatim ga odmah idemo spojiti na Dasduino.

PULL-UP OTPORNIK

Svako tipkalo moramo spajati preko pull-up ili pull-down otpornika na Dasduino. Već smo pričali o pull-up otpornicima i floatanju pinova Dasduina. Provjerimo što se događa kada tipkalo ima, odnosno što kada nema ovog otpornika.

Tipkalo lijevo spojimo na +5V koje će se pri pritisku tipke proslijediti na digitalni pin 7. Tipkalo desno spajamo na pin 6, ali dodajemo mu 10k otpornik kako prikazuje slika dolje.

Ono što očekujemo je da će pinovi 7 i 6 Dasduina imati očitanja LOW(0) kada nisu aktivirano, odnosno HIGH(1) kada su tipke pritisnute. Provjerimo što se u stvarnosti događa.

Napišimo mali sketch koji će čitati stanja digitalnih pinova 7 i 6.

int lijevoT = 7; // tipkalo lijevo, bez pull-up otpornika, je na pinu 7
int desnoT = 6;  // tipkalo desno, s pull-up otpornikom, je na pinu 6
void setup()
{
  pinMode(lijevoT, INPUT);
  pinMode(desnoT, INPUT); // definiramo ih kao ulazne pinove
  Serial.begin(9600);  // započinjemo serijsku komunikaciju, preko koje ćemo čitati stanje pinova
}
void loop()
{
  // ispisujemo stanja pinova 7 i 6
  Serial.write("Tipkalo lijevo: ");
  Serial.write( digitalRead(lijevoT) );
  Serial.write("\t");
  Serial.write("Tipkalo desno: ");
  Serial.writeln( digitalRead(desnoT) );
}
Očitanja nam izgledaju otprilike ovako:

Pin na kojem se nalazi tipkalo bez pull-up otpornika floata, te je nekorisno kao tako. Dakle, pull-up/pull-down otpornik je jednostavno nešto bez čega tipkalo ne ide.

TIPKALO KAO AKTIVATOR

Tipkalo želimo koristiti na način da kada je pritisnuto/aktivirano upali LED diodu na 13om pinu. Nema problema:

int tipkalo = 6;
int led = 13; // iskoristimo LEDicu na pinu 13
              // koju ćemo pritiskom na tipku paliti odnosno gasiti
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(tipkalo, INPUT);
}
void loop()
{
  digitalWrite(led, digitalRead(tipkalo) ); 
  
  // ovo je isto kao:
  /*
  int stanjeTipke = digitalRead(tipkalo); // sprema vrijednost 0 ako tipka nije pritisnuta
                                          // ili 1 kada je tipka pritisnuta
  digitalWrite(led, stanjeTipke);  // stanje tipke 1(HIGH) - LEDica svijetli
                                   // stanje tipke 0(LOW)  - LEDica ne svijelti
 */
}

TIPKALO KAO PREKIDAČ

Tipkalo možemo koristiti i kao prekidač. Koristiti ćemo boolean funkciju te pritiskom na tipku na pinu 6 prebacivati stanje iz LOW(0) u HIGH(1) i obratno. To radimo ovako:

int tipkalo = 6;
int led = 13; // iskoristimo LEDicu na pinu 13
              // koju ćemo pritiskom na tipku paliti odnosno gasiti
int stanjeTipke; // varijabla u koju spremamo zadnje stanje tipkala
bool boolLed = true;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(tipkalo, INPUT);
}
void loop()
{
  stanjeTipke = digitalRead(tipkalo);
  // ako se promjeni stanje pin 6
  if ( digitalRead(tipkalo) != stanjeTipke )
  {
    boolLed = !boolLed;         // promjeni i stanje LEDice
    digitalWrite(led, boolLed);  
  }
}

TIPKALO KAO BROJAČ

Koristiti ćemo varijablu brojač koju ćemo povećavati za 1 prilikom svakog novog pritiska tipkala. Ovdje moramo pripaziti na pojavu debouncing. Radi se o tome da koliko god mi brzo pustili tipku kod će nekoliko puta očitati da je aktivna te nepotrebno povećavati brojač. To možemo riješiti pomoću funkcije delay() koja će zaustaviti kod dok mi ne stignemo pustiti tipkalo ili malo sofisticiranije kao u sketchu ispod:

int tipkalo = 6; //tipkalo na pinu6
int brojac = 0; //brojac je 0 na pocetku
bool boolBrojac = false; // bool s kojim kontroliramo ulazak u dio koda
                         // koji povecava vrijednost "brojaca"
void setup()
{
  pinMode(tipkalo, INPUT); //definiramo tipkalo kao ulazni pin
  Serial.begin(9600);  // stanje varijable brojac prikazivati cemo u Serial Monitoru
  Serial.println("Pocetno stanje brojaca: " + String(brojac)); // "pozdravna" poruka
}
void loop()
{
  if ( digitalRead(tipkalo) == HIGH && boolBrojac == false ) // ako je tipka pritisnuta i vec nismo u if-u
  {
    boolBrojac = true; // usli smo u brojac
    brojac++;  // isto sto i brojac = brojac + 1;
    Serial.println("Stanje brojaca: " + String(brojac)); // ispis stanja brojaca
  // ovaj if obaviti će se samo jednom
     // iako ce vise puta digitalno ocitanje tipkala biti HIGH(1)
     // odamah po ulasku mijenjamo "boolBrojac" koji je uvijet za ulazak u if
  // samo kada je tipka deaktivirana, zelimo promijeniti
  // "boolBrojac" kako bi ponovno mogao uci u prvi if
  // te ponovnim pritiskom mogao povecati varijablu "brojac"
  if( digitalRead(tipkalo) == LOW && boolBrojac == true ) boolBrojac = false;
}