Les 4: Seriële monitor

Als je aan het programmeren bent wil je zo af en toe iets op het scherm printen. Misschien wil je de waarde van een variabele op een specifiek moment zien? Dit is vooral handig als je een bug hebt in je programma en je wilt weten wat de waarde van een variabele is op het moment dat de bug optreedt. In Python zeg je dan iets als:

for i in range(10):
  print (i)

Maar als een programma wordt geüpload naar een Arduino, dan is het niet vanzelfsprekend dat je met een print-functie iets op het scherm van je computer krijgt. Het programma wordt immers op de Arduino uitgevoerd en niet op je computer. Nu kun je wel een LCD-scherm op je Arduino aansluiting en vervolgens daar de gewenste informatie naartoe schrijven, maar niet elke Arduino hoeft per se een LCD-scherm te hebben. En het vereist natuurlijk wel wat moeite om een LCD-scherm aan te sluiten op een Arduino. Gelukkig is hier een betere oplossing voor!

Zoals je je hopelijk hebt gerealiseerd is de communicatie tussen jouw computer en de Arduino middels de USB-verbinding. Deze verbinding gebruiken we om programma's te uploaden naar de Arduino. Deze zelfde verbinding kunnen we ook gebruiken om tekst te communiceren tussen het programma op de Arduino en een programma op je computer.

Door middel van Serial.print() kunnen we tekst van de Arduino naar je computer sturen. Er moet dan op je computer een programma draaien dat iets met deze tekst doet. Een voorbeeld hiervan is het Seriële Monitor-venster van de Arduino IDE: daarin kun je de tekst zien die de host computer van de Arduino ontvangt. Dit venster kunnen we ook gebruiken om tekst naar de Arduino te sturen: dat zullen we in een latere les behandelen.

Bij de programma's die we tot nu toe gezien hebben weten we niet wat het programma precies doet. We zien alleen het resultaat via de analoge en digitale uitvoer. In sommige gevallen We kunnen alleen zien wat het invoer/uitvoer-gedrag is, via de analoge en di

Opdracht 1

  • Gebruik de hardware-opstelling van de vorige les. Gebruik ook het programma van de vorige les. (Gebruik het programma Voorbeelden->02. Digital->Button)

  • Verander het programma zodat het er als volgt uitziet:

const int buttonPin = 2;      // the number of the pushbutton pin
const int ledPin =  13;       // the number of the LED pin
 
int buttonState = 0;          // variable for reading button status
 
void setup() {
  pinMode(ledPin, OUTPUT);      // initialize LED pin as output 
  pinMode(buttonPin, INPUT);    // initialize button pin as input 
  Serial.begin(9600)
}
 
void loop() {
  buttonState = digitalRead(buttonPin);   // read the button state
  Serial.println(buttonState);
  if (buttonState == HIGH) {         // pushbutton is pressed.
    digitalWrite(ledPin, HIGH);      // turn LED on    
  } 
  else {
    digitalWrite(ledPin, LOW);       // turn LED off
  }
}
  • Zoals je wellicht is opgevallen hebben we in de setup-functie iets toegevoegd. Namelijk Serial.begin(9600) (9600 bit/s of ook bps).

  • Ook in de loop functie hebben we iets toegevoegd om iets te schrijven naar de Seriële monitor. Namelijk Serial.println(buttonState);.

  • Om de uitvoer van het programma op je computer te kunnen zien, gebruik je het Seriële Monitor venster van de Arduino IDE (menu Extra->Seriële-Monitor).

  • De communicatie werkt alleen als de snelheid van de communicatie (bitsnelheid) van de Arduino en van je computer gelijk zijn. Dit stel je in door de selectieknop (rechts onder) in het Seriële Monitor venster.

  • Start nu het programma op en controleer of je in de Seriele monitor continu de waarde van de knop te zien krijgt. Druk ook zo af en toe op de knop.

Opdracht 2

Verander nu het programma zodat je in de Seriële monitor alleen de tekst "Je hebt op het knopje gedrukt" te zien krijgt wanneer je op het knopje drukt.

Opmerkingen:

  • Serial.print(x) stuurt x als tekst naar de computer. Als x een getal is, dat wordt dit eerst in tekst-vorm omgezet. je kunt er daarbij voor kiezen of je een decimale vorm wilt hebben, of een vorm met een ander grondgetal. Bijvoorbeeld: hexadecimaal, via Serial.print(x, HEX);.

Last updated