7. tēma: Signālu ievade, pogas un lēmumu pieņemšana (If-Else)

Tavs šīs stundas izaicinājums: Pareizi pieslēgt spiedpogu maketo platei, nolasīt tās stāvokli (nospiesta vai atlaista) un izveidot C++ programmu, kas ieslēdz LED diodi tikai tad, kad poga ir nospiesta.

Datorika 7. klase (D.7.2.1., D.7.3.1., D.7.6.1.)

Teorija: Kā Arduino nolasa pogas spiedienu?

Iepriekš mēs devām komandas uz āru (OUTPUT), lai ieslēgtu gaismu. Tagad mums jāsaņem informācija iekšā (INPUT) no pogas. Bet elektrībā ir kāds āķis – ja vads "karājas gaisā" un nav nekur pieslēgts, tas uztver traucējumus un "kļūst traks" (Floating pin). Lai to novērstu, mēs izmantosim iebūvēto drošības sistēmu – PULL-UP rezistoru.

[Ievietot attēlu šeit: Ekrānuzņēmums no Tinkercad ar pareizi pieslēgtu pogu pāri maketo plates viduslīnijai un bultiņām uz GND un Arduino 2. pinu]

1. uzdevums: Pogas un LED shēmas izveide

Virtuālajā vidē pievienojiet spiedpogu un atjaunojiet LED diodes slēgumu no iepriekšējās stundas.

Izpildes soļi:

  1. Tinkercad vidē izveidojiet jaunu Circuit projektu un pievienojiet Arduino Uno, maketo plati (Breadboard) un savienojiet 5V un GND līnijas.
  2. Pievienojiet LED diodi 13. pinam (neaizmirstiet 220 omu rezistoru no Anoda uz 13. pinu un vadu no Katoda uz GND).
  3. Atrodiet komponenti "Pushbutton". Novietojiet to tieši pāri maketo plates vidusdalījuma gropītei, lai kājas būtu abās pusēs.
  4. Vienu pogas apakšējo kāju savienojiet ar vadu pie Arduino 2. pina.
  5. Otru pogas apakšējo kāju (tajā pašā horizontālajā līnijā) savienojiet ar melno GND (-) līniju.

2. uzdevums: Serial Monitor (Saziņa ar datoru)

Uzrakstiet kodu, kas nolasa pogas stāvokli un izdrukā to ekrānā, lai mēs redzētu, vai elektronika strādā.

Izpildes soļi:

  1. Pārslēdzieties uz koda (Text) skatu. void setup() ierakstiet: Serial.begin(9600); (Tas atver saziņas kanālu).
  2. Tajā pašā setup() pievienojiet: pinMode(2, INPUT_PULLUP);
  3. void loop() izveidojiet mainīgo, kas nolasa pogu: int pogasStavoklis = digitalRead(2);
  4. Zem tā ierakstiet: Serial.println(pogasStavoklis);. Pievienojiet īsu pauzi: delay(100);, lai dators nepārkarstu no datu daudzuma.
  5. Nospiediet "Start Simulation". Koda loga pašā apakšā atveriet "Serial Monitor". Spaidot pogu, jums jāredz ekrānā skaitļi 1 (atlaista) un 0 (nospiesta).

3. uzdevums: Interaktīvā LED vadība (If-Else)

Apvienojiet pogas nolasīšanu ar LED diodes kontroli – uzrakstiet "If-Else" loģiku.

Izpildes soļi:

  1. Neaizmirstiet void setup() pievienot LED pinu: pinMode(13, OUTPUT);
  2. Sadaļā void loop(), pēc pogas stāvokļa nolasīšanas mainīgajā, izveidojiet if bloku.
  3. Ierakstiet nosacījumu: if (pogasStavoklis == LOW) { (atcerieties, LOW nozīmē, ka poga piespiesta pie GND).
  4. Iekšā figūriekavās { } ierakstiet komandu LED diodes ieslēgšanai: digitalWrite(13, HIGH);
  5. Pēc aizverošās figūriekavas pievienojiet } else { un iekšā ierakstiet komandu LED izslēgšanai digitalWrite(13, LOW);. Palaidiet un testējiet!

4. uzdevums (Zvaigznītes izaicinājums): "Reversais" luksofors

Ātrākajām komandām – pievienojiet shēmai sarkanu un zaļu LED. Kad poga nav nospiesta, deg sarkanā gaisma. Kad nospiež, sarkanā izslēdzas un iedegas zaļā.

Izpildes soļi:

  1. Maketo platei pievienojiet vēl vienu LED diodi (ar savu rezistoru) pie brīva pina, piemēram, 12.
  2. Neaizmirstiet setup() sadaļā pieteikt jauno pinu kā OUTPUT.
  3. Papildiniet savu if-else bloku. "If" daļā (kad poga nospiesta) viena diode jāieslēdz (HIGH), bet otra jāizslēdz (LOW).
  4. "Else" daļā (kad poga atlaista) komandām jābūt tieši otrādāk.

Biežākās kļūdas (un kā tās labot):

Koda piemērs (Pogas kontrolēta LED diode)


int buttonPin = 2; // Nodefinējam portus ar vārdiem ērtībai
int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  // INPUT_PULLUP pieslēdz iekšējo rezistoru, padarot pinu HIGH (1) 
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  // Nolasām pogas stāvokli (0 vai 1)
  int pogasStavoklis = digitalRead(buttonPin);
  
  // Drukājam monitorā testēšanai
  Serial.println(pogasStavoklis);

  // Ja poga nospiesta (savienota ar zemi / LOW)
  if (pogasStavoklis == LOW) {
    digitalWrite(ledPin, HIGH); // Ieslēdz LED
  } else {
    digitalWrite(ledPin, LOW);  // Izslēdz LED
  }
}
        
Pēc simulācijas palaišanas LED diode nedegs. Nospiežot un turot pogu ar peli, LED diode iedegsies. Atlaižot pogu, tā uzreiz izslēgsies. Serial Monitor vienlaicīgi rādīs ciparu 0 (nospiesta) vai 1 (atlaista).
⬅ Iepriekšējā stunda Nākamā stunda ➡
7. stunda: Ievade un Izvade (Pogas un If-Else)

7. tēma: Signālu ievade, pogas un lēmumu pieņemšana (If-Else)

Tavs šīs stundas izaicinājums: Pareizi pieslēgt spiedpogu maketo platei, nolasīt tās stāvokli (nospiesta vai atlaista) un izveidot C++ programmu, kas ieslēdz LED diodi tikai tad, kad poga ir nospiesta.

Datorika 7. klase (D.7.2.1., D.7.3.1., D.7.6.1.)

Teorija: Kā Arduino nolasa pogas spiedienu?

Iepriekš mēs devām komandas uz āru (OUTPUT), lai ieslēgtu gaismu. Tagad mums jāsaņem informācija iekšā (INPUT) no pogas. Bet elektrībā ir kāds āķis – ja vads "karājas gaisā" un nav nekur pieslēgts, tas uztver traucējumus un "kļūst traks" (Floating pin). Lai to novērstu, mēs izmantosim iebūvēto drošības sistēmu – PULL-UP rezistoru.

[Ievietot attēlu šeit: Ekrānuzņēmums no Tinkercad ar pareizi pieslēgtu pogu pāri maketo plates viduslīnijai un bultiņām uz GND un Arduino 2. pinu]

1. uzdevums: Pogas un LED shēmas izveide

Virtuālajā vidē pievienojiet spiedpogu un atjaunojiet LED diodes slēgumu no iepriekšējās stundas.

Izpildes soļi:

  1. Tinkercad vidē izveidojiet jaunu Circuit projektu un pievienojiet Arduino Uno, maketo plati (Breadboard) un savienojiet 5V un GND līnijas.
  2. Pievienojiet LED diodi 13. pinam (neaizmirstiet 220 omu rezistoru no Anoda uz 13. pinu un vadu no Katoda uz GND).
  3. Atrodiet komponenti "Pushbutton". Novietojiet to tieši pāri maketo plates vidusdalījuma gropītei, lai kājas būtu abās pusēs.
  4. Vienu pogas apakšējo kāju savienojiet ar vadu pie Arduino 2. pina.
  5. Otru pogas apakšējo kāju (tajā pašā horizontālajā līnijā) savienojiet ar melno GND (-) līniju.

2. uzdevums: Serial Monitor (Saziņa ar datoru)

Uzrakstiet kodu, kas nolasa pogas stāvokli un izdrukā to ekrānā, lai mēs redzētu, vai elektronika strādā.

Izpildes soļi:

  1. Pārslēdzieties uz koda (Text) skatu. void setup() ierakstiet: Serial.begin(9600); (Tas atver saziņas kanālu).
  2. Tajā pašā setup() pievienojiet: pinMode(2, INPUT_PULLUP);
  3. void loop() izveidojiet mainīgo, kas nolasa pogu: int pogasStavoklis = digitalRead(2);
  4. Zem tā ierakstiet: Serial.println(pogasStavoklis);. Pievienojiet īsu pauzi: delay(100);, lai dators nepārkarstu no datu daudzuma.
  5. Nospiediet "Start Simulation". Koda loga pašā apakšā atveriet "Serial Monitor". Spaidot pogu, jums jāredz ekrānā skaitļi 1 (atlaista) un 0 (nospiesta).

3. uzdevums: Interaktīvā LED vadība (If-Else)

Apvienojiet pogas nolasīšanu ar LED diodes kontroli – uzrakstiet "If-Else" loģiku.

Izpildes soļi:

  1. Neaizmirstiet void setup() pievienot LED pinu: pinMode(13, OUTPUT);
  2. Sadaļā void loop(), pēc pogas stāvokļa nolasīšanas mainīgajā, izveidojiet if bloku.
  3. Ierakstiet nosacījumu: if (pogasStavoklis == LOW) { (atcerieties, LOW nozīmē, ka poga piespiesta pie GND).
  4. Iekšā figūriekavās { } ierakstiet komandu LED diodes ieslēgšanai: digitalWrite(13, HIGH);
  5. Pēc aizverošās figūriekavas pievienojiet } else { un iekšā ierakstiet komandu LED izslēgšanai digitalWrite(13, LOW);. Palaidiet un testējiet!

4. uzdevums (Zvaigznītes izaicinājums): "Reversais" luksofors

Ātrākajām komandām – pievienojiet shēmai sarkanu un zaļu LED. Kad poga nav nospiesta, deg sarkanā gaisma. Kad nospiež, sarkanā izslēdzas un iedegas zaļā.

Izpildes soļi:

  1. Maketo platei pievienojiet vēl vienu LED diodi (ar savu rezistoru) pie brīva pina, piemēram, 12.
  2. Neaizmirstiet setup() sadaļā pieteikt jauno pinu kā OUTPUT.
  3. Papildiniet savu if-else bloku. "If" daļā (kad poga nospiesta) viena diode jāieslēdz (HIGH), bet otra jāizslēdz (LOW).
  4. "Else" daļā (kad poga atlaista) komandām jābūt tieši otrādāk.

Biežākās kļūdas (un kā tās labot):

Koda piemērs (Pogas kontrolēta LED diode)


int buttonPin = 2; // Nodefinējam portus ar vārdiem ērtībai
int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  // INPUT_PULLUP pieslēdz iekšējo rezistoru, padarot pinu HIGH (1) 
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  // Nolasām pogas stāvokli (0 vai 1)
  int pogasStavoklis = digitalRead(buttonPin);
  
  // Drukājam monitorā testēšanai
  Serial.println(pogasStavoklis);

  // Ja poga nospiesta (savienota ar zemi / LOW)
  if (pogasStavoklis == LOW) {
    digitalWrite(ledPin, HIGH); // Ieslēdz LED
  } else {
    digitalWrite(ledPin, LOW);  // Izslēdz LED
  }
}
        
Pēc simulācijas palaišanas LED diode nedegs. Nospiežot un turot pogu ar peli, LED diode iedegsies. Atlaižot pogu, tā uzreiz izslēgsies. Serial Monitor vienlaicīgi rādīs ciparu 0 (nospiesta) vai 1 (atlaista).
⬅ Iepriekšējā stunda Nākamā stunda ➡