Arduino voor kinderen

Seriële communicatie

Via zogenaamde seriële communicatie kan de Arduino berichten versturen en ontvangen van de computer, een andere Arduino of bijvoorbeeld een sensor.

Serial.begin()

Met behulp van Serial.begin() wordt de communicatie opgezet. Dit wordt doorgaans gedaan binnen setup() omdat dit maar éénmaal hoeft te gebeuren.

Baudrate
Tussen de haakjes wordt de snelheid waarmee letters en cijfers (karakters) worden verstuurd opgegeven. Deze snelheid wordt de baudrate genoemd. Hoe hoger de baudrate hoe meer karakters er per seconde verstuurd worden.
Er zijn verschillende baudrates mogelijk en meestal maakt het niet uit welke gebruikt wordt zolang de ontvanger en de zender maar dezelfde baudrate gebruiken. In dit boek wordt meestal 9600baud gebruikt:
Serial.begin(9600);
Andere vaak gebruikte baudrates zijn: 57600 en 115200

Serial.print() en Serial.println()

Om berichten te versturen worden de functies print() en println() gebruikt.
De functie println() komt van het Engelse printline wat print regel betekend. Onderstaande commando print (schrijft) de tekst Hello world en doet een enter om een nieuwe regel te beginnen:
Serial.println(“Hello world”);
Als in plaats van println() de functie print() gebruikt was zal er geen nieuwe regel worden gemaakt:
Serial.print(“Hello world”);
Probeer deze code maar eens:

void setup() {
  // start de seriële communicatie met 9600baud
  Serial.begin(9600);

  // print 2 aparte regels tekst
  Serial.println("Hello");
  Serial.println("World");
}

void loop() {
 
}


Open nadat dit programma is geüpload de seriële monitor en geef op welke baudrate wordt gebruikt:

In het venster komt nu Hello World te staan op 2 losse regels.

Als de tekst onleesbaar binnen komt, zoals bijvoorbeeld ????????, staat waarschijnlijk de baudrate verkeerd!

Pas de code nu aan door de println te veranderen in print:

Bekijk het verschil.

Serial.read

Middels Serial.println() en Serial.print() kunnen we berichten versturen/schrijven naar de computer. Met behulp van Serial.read() kunnen berichten die vanuit de computer naar de Arduino zijn gestuurd gelezen worden:

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

void loop() {
  if (Serial.available()) { 
    // Echo serial data on serial device
    Serial.println(Serial.read());
  }  
}

In het bovenstaande programma wordt ieder karakter (letters, cijfers en andere tekens op het toetsenbord) die naar de Arduino wordt gestuurd terug geschreven naar de computer.

Serial.available()
Met Serial.available (available is Engels voor beschikbaar) kan opgemerkt worden of er iets via de seriële poort binnen komt.
Aangezien de loop() continu doorlopen wordt willen we alleen bij de println() uitkomen als er ook echt iets te printen is. Dit wordt gedaan door:
if (Serial.available()) {<br><br>} 
Hierboven staat eigenlijk: ALS via Serial iets binnenkomt DAN wordt de code tussen de { en } uitgevoerd. De { en } worden ook wel accolades genoemd en worden veel gebruikt in programma’s voor de Arduino.

Als dit programma geüpload is naar de Arduino kan via de regel bovenin het seriële venster tekst verstuurd worden naar de Arduino:

In dit geval wordt de tekst Hello World verstuurd en telkens als de Arduino één karakter ontvangen heeft wordt deze met println() weer terug gestuurd. De letters komen echter als getallen, elk op een eigen regel weer terug:

Computers zien letters als getallen, het commando println() vertaalt ze in dit geval niet terug naar leesbare letters maar print de ASCII waarden van de letters.

ASCII waarden

Ieder karakter is voor een computer eigenlijk een getal, we noemen dit ASCII waarden:

Via bovenstaande lijst is te zien dat het getal 72 overeenkomt met de letter H
De getallen 72 101 108 108 111 wordt dus Hello, de 32 is een spatie (SP) en tot slot is 87 111 114 108 100 samen world.
Deze ASCII waarden zijn niet zo gemakkelijk te lezen maar gelukkig kan de Arduino deze zelf ook vertalen naar gewone karakters door gebruik te maken van Serial.write() in plaats van Serial.print():

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

void loop() {
  if (Serial.available()) { 
    // Echo serial data on serial device
    Serial.write(Serial.read());
  }  
}

Als nu nogmaals Hello World verstuurd wordt zal deze tekst ook weer leesbaar tereggestuurd worden naar het Serial venster:

Programma naam en upload datum printen

Vaak wordt seriële communicatie gebruikt om fouten in het programma op te sporen (debuggen). Het kan dan handig zijn om tijdens het starten van het programma de naam en de upload datum te printen:

void setup(){
  Serial.begin(9600);
  // print de naam en de datum waarop deze sketch gëupload is naar het Serial venster
  Serial.print("Sketch:   ");   Serial.println(__FILE__);
  Serial.print("Uploaded: ");   Serial.println(__DATE__);
}
 
void loop(){ 

}

Seriële communicatie kunnen we voor talloze doeleinden gebruiken. In het volgende hoofdstuk gebruiken we Seriële communicatie om het ledje op pin 13 van de Arduino aan en uit te schakelen.

Leave a Reply

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