Arduino voor kinderen

LED bedienen via Serial

In één van de vorige hoofdstukken ging de LED telkens AAN en weer UIT.
Ditmaal gaan we de LED aan- en uitschakelen via Serial.read().

ALS DAN ANDERS vergelijking

Hiervoor gebruiken we een ALS DAN ANDERS:
if ( ) {

}
else if ( ) {

}
else {

}

Een voorbeeld van een ALS DAN ANDERS lus uit MakeCode voor de Micro:bit

Tussen de haakjes kan een vergelijking uitgevoerd worden zoals is gelijk aan (==), is ongelijk aan (!=), kleiner- of groter dan (< of >) en kleiner/groter en gelijk aan (<= of >=)
Bijvoorbeeld:
if (vandaag == "maandag") {
// doe iets op maandag
}
else if (vandaag != "zaterdag") {
// dit wordt alleen uitgevoerd als het geen maandag is aangezien deze bij de IF al gekozen is
// en ook geen zaterdag is
}
else {
// dit gebeurd in alle gevallen die hierboven niet zijn uitgevoerd
}


Merk op de dat de else if kan worden weggelaten, maar er kunnen ook nog meer else if regels toegevoegd worden.

Bekijk de code hieronder en bekijk ook de commentaarregels om te begrijpen wat er gebeurd:

void setup() {
  // maak van pin 13 een uitgang
  pinMode(13,OUTPUT);

  // start de seriele poort
  Serial.begin(9600);

  // zorg ervoor dat de LED uit is
  digitalWrite(13,LOW);
}

void loop() {
  if (Serial.available()) {
    // als er een letter/cijfer ontvangen wordt sla deze dan op als state
    char state = Serial.read();

    if (state == '1') {
      // als de ontvangen letter/cijfer gelijk is aan '1' dan gaat de led aan
      digitalWrite(13, HIGH);
      Serial.println("LED ON");
    }
    else if (state == '0') {
      // als de ontvangen letter/cijfer gelijk is aan '0' dan gaat de led uit
      digitalWrite(13, LOW);
      Serial.println("LED OFF");
    }
    else {
      // in alle andere gevallen gebeurd er niks
  }
}

Als bovenstaande code is geupload naar de Arduino kun je een 1 of een 0 versturen om de led aan of uit te zetten.

Kun je de code zo aanpassen dat als de gebruiker een verkeerde letter of cijfer verstuurd er en melding verschijnt in het serial venster?

Een andere toepassing van seriële communicatie is het communiceren tussen bepaalde sensoren of andere apparaten. In het vvolgende hoofdstuk gebruiken we 2 Arduino’s die met elkaar kunnen communiceren via de seriële poort.

Seriële comunicatie tussen 2 Arduino’s

Seriële communicatie is zeer geschikt om te communiceren tussen 2 verschillende apparaten. In dit voorbeeld gebruiken we 2 Arduino’s die via serial met elkaar kunnen communiceren:

De verbinding is erg simpel. Verbind de aarde (Gnd) van beide Arduino’s met elkaar. Verbind vervolgens pin 0 (Rx) van de ene Arduino met pin 1 (Tx) van de andere Arduino en herhaal dat andersom ook voor de 2e Arduino zoals hierboven is weergegeven.

De Rx pin is de ontvang pin, de R staat voor receive wat Engels is voor ontvang, en de Tx is de verzend pin, de T komt van het Engelse woord Transmit.

Goed ezelsbruggetje om te onthouden voor het aansluiten van seriële communicatie tussen 2 apparaten is dat je altijd de mond (Tx) verbind met het oor (Rx) want met je mond kun je wel praten maar niet luisteren…

Als elektronische apparaten met elkaar worden verbonden is het belangrijk om de Gnd van de ene te verbinden met de Gnd van het andere apparaat!
Hierboven wordt dat gedaan met de blauwe verbinding tussen de twee Arduino’s
Daarnaast is het ook van belang om in de gaten te houden of beide apparaten hetzelfde voltage gebruiken. In het geval van de Arduino is dat 5V maar bijvoorbeeld een Micro:bit gebruikt 3.3V en die zou zomaar kapot kunnen gaan van 5V.

Onderstaande code is voor de verzendende Arduino en zorgt ervoor dat iedere seconde een 1 of een 0 verzonden wordt.

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print(1);
  delay(1000);
  Serial.print(0);
  delay(1000);
}

Gebruik voor de andere Arduino de code uit de vorige oefening waarbij via serial de led aan en uit wordt gedaan.

Bekijk wat er gebeurd als beide Arduino’s aan staan. Je zult zien dat het ledje op de 2e Arduino aan en uit gaat door de 0 en de 1 die de andere Arduino verzend.

Leave a Reply

Your email address will not be published. Required fields are marked *