Vklop in izklop LED diode s tipko

Za izdelavo vaje, bomo najprej pogledali skico priključitve posameznih elementov na razvojno ploščo Intel Galileo:

Slika 1: Prikaz povezave elementov na razvojno ploščo Intel Galileo.

Vrednosti uporov:

R1 = 470 Ω

R2 = 10 kΩ

Upor R1omejuje tok, ki teče skozi LED diodo in jo s tem ščiti, hkrati pa poskrbi, da priključka 2 (pin 2) razvojne plošče Intel Galileo ne preobremenimo. Pin 2 je izhodni pin, saj procesor na ta pin pošlje 5 V oziroma 0 V, odvisno od tega ali s tipko vklopimo LED diodo ali pa jo izklopimo.

Pin 12 je vhodni pin. Na ta pin je priključena tipka za vklop LED diode. Procesor neprestano preverja, kakšna je napetost na tem pinu. Logično stanje na tem pinu mora biti vedno določljivo. V ta namen je potreben upor, ki ohraja vrednost uporabljenega pina na nivoju logične 1 ali na nivoju logične 0. Upor R2 poskrbi, da je priključek 12 na logičnem stanju 0 (napetost 0 V), kadar tipka ni sklenjena. Ko tipko sklenemo, se na uporu R2 in hkrati pripadajočem pinu 12 pojavi napetosti 5 V (logično stanje 1). Ker je upor povezan na maso (GND) mu pravimo pull down upor.

Slika 2: Vloga pull down upora.

Program za vklop LED diode s tipko:

/*

 Vklop in izklop LED diode s tipko. LED dioda sveti, ko je tipka sklenjena. Tipka je prikljucena na digitalni pin

 12, LED dioda pa na pin 2.  

 Avtor: Milan Ivic, nov. 2013

 */

 //Dolocitev pinov:

 int TipkaPin = 12;

 int LEDPin =  2;

 //Inicializacija spremenljivke PolozajTipke:

 int PolozajTipke = 0;      //Spremenljivka za branje tipke.

 void setup()

 { 

  pinMode(LEDPin, OUTPUT);        //Pin 2 je izhod

  pinMode(TipkaPin, INPUT);       //Pin 12 je vhod

 }

 void loop()

 { 

   PolozajTipke = digitalRead(TipkaPin);      //Branje stanja tipke  

   if (PolozajTipke == HIGH)        //Ali je tipka sklenjena?

   {     

     digitalWrite(LEDPin, HIGH);    //Tipka je sklenjena, vklopi LED diodo    

     delay(1000);                   //Zakasnitev 1 sekunda (1000 ms). 

   }

   else

   {    

     digitalWrite(LEDPin, LOW);     //Izklopi LED diodo, tipka ni sklenjena    

     delay(1000);

   }

 }


Kadar je tipka sklenjena, LED dioda sveti, ko tipka ni sklenjena, LED dioda ne sveti.

V programu smo deklarirali spremenljivko z imenom PolozajTipke tipa int in ji na začetku dodelili vrednost 0. V to spremenljivko se shranjuje vrednost 0 ali 1, odvisno od tega ali je tipka sklenjena (1), oziroma ni sklenjena (0). V if - else stavku se na podlagi stanja tipke LED dioda vklopi oziroma izklopi.

Sedaj želimo program spremeniti tako, da bomo s pritiskom na tipko LED diodo vklopili in bo ostala vklopljena tako dolgo, dokler je ne izklopimo s ponovnim pritiskom na tipko.

 Program za preklapljanje LED diode s tipko:

/*

 Preklapljanje LED dide s tipko. Tipka je priključena na pin 12, LED dioda pa na pin 2.

 Avtor: Milan Ivič, sept. 2014

 */

 int Tipka_Pin = 12;

 int LED_Pin = 2;

 void setup()

 {

   pinMode(Tipka_Pin, INPUT);

   pinMode(LED_Pin, OUTPUT);

 }

   //Deklariranje in inicializacija spremenljivk za shranjevanje prejšnjega stanja Tipke in stanja LED diode:

 int Prejsnje_Stanje_Tipke = LOW;

 int Stanje_LED = LOW;

 void loop()

 {

    //Preberemo stanje tipke in podatek shranimo v lokalno spremenljivko:

   int Trenutno_Stanje_Tipke = digitalRead(Tipka_Pin);

 

   if (Trenutno_Stanje_Tipke != Prejsnje_Stanje_Tipke && Trenutno_Stanje_Tipke == HIGH)

   {

     Stanje_LED = (Stanje_LED == LOW) ? HIGH : LOW;     //Spremenimo stanje LED diode

     digitalWrite(LED_Pin, Stanje_LED);                 //Spremenjeno stanje LED diode pošljemo na pin 2

     delay(50);                                         //50 milisekund zaradi odbijanja kontaktov na tipki

   }

   Prejsnje_Stanje_Tipke = Trenutno_Stanje_Tipke;

 }

V zanki void loop() program prebere (Read) stanje na pinu 12 (tipka) in ga zapiše v lokalno spremenljivko Trenutno_Stanje_Tipke. To stanje je lahko 0 (tipka ni sklenjena) ali 1 (tipka je sklenjena). Nato v if stavku preverjamo stanje tipke.

Operator != je operator primerjanja in pomeni ni enak kot

Operator == je operator primerjanja in pomeni enak kot

Operator && je logični operator za IN (AND)

V if stavku:

if (Trenutno_Stanje_Tipke != Prejsnje_Stanje_Tipke && Trenutno_Stanje_Tipke == HIGH)

s pogojem, zapisanim med navadne oklepaje preverjamo: Ali trenutno stanje tipke ni enako prejšnjemu stanju tipke in ali s trenutnim stanjem tipke pošiljamo na pin 12 napetost 5 V (logično 1). Če je ta pogoj resničen (resničen je takrat, ko ponovno pritisnemo na tipko), v bloku ukazov spremenimo stanje LED diode. Če je LED dioda pred pritiskom na tipko svetila jo izklopimo in obratno. Preden se zanka ponovi, v spremenljivko Prejsnje_Stanje_Tipke shranimo trenutno stanje tipke, saj bo naslednji pritisk na tipko zanesljivo predstavljal drugačno stanje od predhodnega.