Werken met microcontrollers vindt plaats in het gebied van "Physical Computing" waarbij interactie met de omgeving gebeurt via sensoren en actuatoren. Doordat er weinig of geen tekstuele communicatie is met de gebruiker, is het soms zeer moeilijk om een sketch te debuggen. De seriële monitor is een onderdeel van de Arduino IDE en biedt de mogelijk om seriële data van de Arduino zichtbaar te maken.
Reageert een sketch niet zoals verwacht, dan kan je door gebruik te maken van seriële monitor makkelijker je fout opsporen. Deze data kan zeer divers zijn. Het kan gaan van gewoon tekst als "'Start" om aan te geven dat een bepaald gedeelte van de sketch uitgevoerd wordt, maar kan ook waarden van variabelen zijn, of de status van een ingang.
De seriële monitor kan een zeer sterk instrument zijn. Het is dan ook een goede praktijk om standaard een verbinding te maken tussen de Arduino en de seriële monitor. Ook als je voor de praktische werking van je sketch niet noodzakelijk is.
Data kan zowel verstuurd worden van de Arduino naar de seriële monitor, maar ook omgekeerd. Je kan dus de seriële monitor als een input apparaat gebruiken. Dit laatste gaan we hier niet behandelen en focussen wij ons volledig op de data versturen van de Arduino naar de seriële monitor
Voordat je data kan verzenden naar de seriële monitor gaan we de verbinding moeten openen. Bij het openen van de verbinding ga je moeten aangeven op welke snelheid de data gaat verstuurd worden. Dit wordt gegeven in baud of bps (bits per second). De snelheid geeft aan hoeveel bits (0 of 1) er per seconden verstuurd worden. De instructie om de seriële communicatie te starten is Serial.begin(<snelheid>);
Bijvoorbeeld:
Serial.begin(9600);
De snelheid waarmee de data verstuurd wordt, gaat moeten overeenkomen met de snelheid waarmee de data gelezen wordt.
Wordt de data trager gelezen dan verstuurd, dan gaat de computer een aantal bits missen. In het omgekeerde geval, als de computer sneller gaat lezen als de data verstuurd wordt, zullen een aantal bits dubbel gelezen worden. In beide gevallen zal de verstuurde data niet overeenkomen met de ontvangen data.

Hoe sneller je data verstuurd wordt, hoe meer kans je krijgt op fouten. Trager versturen van de data vertraagd de uitvoering van je script. Je gaat dus een evenwicht moeten zoeken tussen snelheid en accuraatheid. Gelukkig is de hoeveelheid data die moet verstuurd worden beperkt. Meestal is het zelf noodzakelijk om je script te vertragen om de data leesbaar te maken voor de gebruiker. De standaard waarde van 9600 baud leidt tot goede resultaten.
Omdat de verbinding éénmalig wordt geopend, wordt deze code in de setup() geplaatst.
void setup(){
Serial.begin(9600);
}
In de simulatieomgeving Tinkercad is er geen fysieke data transfer tussen een Arduino en de computer, alles gebeurt in de simulatieomgeving. Bij het openen van de scherm van de seriële monitor ga je daarom niet de snelheid van data-overdracht moeten ingeven. In de code ga je wel de snelheid moeten aangeven. Doe je dit niet, dan zal dit een foutmelding opleveren bij het starten van de simulatie
Wanneer je data verstuurd naar de seriële monitor, dan kan je aangeven of er na de data een end-of-line (EOL) teken wordt meegestuurd. End-of-line of regeleinde teken zorgt ervoor dat na het versturen van de data er een nieuwe lijn gestart wordt. De volgende data die verstuurd wordt, wordt op de volgende regel getoond.
De instructie voor het versturen van data met einderegel-teken is:
Serial.println(<gegeven>);
In onderstaande sketch krijgt in een iteratie (een lus) de variabele i achtereenvolgens de waarde 1, 2, 3, 4 en 5. Deze waarde wordt met Serial.println(i); naar de serial monitor verstuurd. Deze sketch werd uitgevoerd in de simulatieomgeving en het resultaat wordt getoond.
void setup()
{
Serial.begin(9600);
for (int i=1;i<=5;i++){
Serial.println(i);
}
}
void loop()
{
}
Bij Seriel.println( ) staat de ln voor het starten van een nieuwe lijn. Laten we dit weg dan krijgen we de instructie die data verstuurd naar de seriële monitor zonder dat een einderegel-teken meegestuurd wordt.
Serial.print(<gegeven>);
Passen we dit toe op de vorige sketch dan krijgen we:
Enkel cijfers in je seriële monitor zegt niets. Zeker als er op verschillende plaatsen data wordt doorgegeven, dan moet je weten welke data bij welke variabele hoort.
Herhalen we het eerste script, waarin de waarde van i getoond wordt in de seriële monitor, maar nu met meer informatie voor de gebruiker dan krijgen we:

We gaan hier tekst en numerieke data combineren. Per instructie kunnen we slechts één gegeven meegeven.
Dit gegeven kan
Maar onderstaande combinatie lukt niet:
Serial.println("x = ",i);
Om bovenstaand resultaat te bekomen gaan we ofwel de data van één lijn in één variabele plaatsen, of je gaat de data in twee stappen moeten versturen.
De volledige sketch ziet er dan als volgt uit:
Soms kan een combinatie van parameters een verrassend resultaat opleveren.
In onderstaande sketch is i geen integer (geheel getal) maar een float (floating number -> reëel getal).
Voeg je aan de Serial.println() instructie de parameter 3 toe:
Serial.println(i,3);
dan zou je verwachten dat nadat het resultaat van i getoond wordt, het cijfer 3 op het scherm verschijnt. Het cijfer 3 gaat hier echter de nauwkeurigheid, of het aantal cijfers na de komma aangeven.
Als i niet van het type float maar van het type integer, dan is het resultaat nog verrassender
De waarde van i wordt nu niet weergegeven met 3 cijfers na de komma, wat vreemd zou zijn voor een geheel getal. De waarde van i wordt wel weergegeven in het talstelsel 3.
Zorg dat in de seriële monitor het volgende verschijnt:

Je kan de code in de simulatieomgeving aanpassen: Classes ==> Arduino Afstandsonderwijs ==> Les 3 - Seriële monitor => SerialMon Oef01