communiceren met de Arduino

Het programmeren van de Arduino gebeurt via een USB->serieel omzetter die ingebouwd zit in het systeem. Datzelfde kanaal kunnen we in het programma gebruiken om communicatie tot stand te brengen tussen de Arduino en de aangesloten PC/laptop.

Het gebruik is super eenvoudig. Het begint met het initialiseren van het Serial-object in de setup() functie. De enige parameter die moet meegegeven worden is de baudrate (zie theorie). Een veelgebruikte baudrate is 9600, maar we kunnen gaan tot 115200. De initialisatie gebeurt dus als volgt:

Serial.begin(115200);

Daarna kan in de loop-functie gebruik worden gemaakt van het Serial-object om bijvoorbeeld via de instructie

Serial.println("Hello World");

de tekst "hello world" naar de PC/laptop te sturen.

Uiteraard kunnen ook waarden van variabelen geprint worden, en kan zelfs gebruik gemaakt worden van een extra parameter om de waarde in een bepaald formaat weer te geven.

Zo zal

Serial.println(100,HEX);

de waarde 100 (decimaal) in hexadecimale vorm doorsturen via het serieel kanaal.

hoe te zien?

Hoe kunnen we op de PC/laptop zien wat de Arduino ons stuurt? Dat kan via het terminal venster van de Arduino software. Rechtsboven staat een knop met een vergrootglas. Wanneer je daarop klikt opent het terminalvenster, en wordt verbinding gemaakt met dezelfde seriële poort als deze die ingesteld staat om mee te programmeren.


 

In dit venster zal de tekst die door de Arduino gestuurd wordt zichtbaar worden in het grote venster. In de bovenste invoerregel kan tekst geplaatst worden. Wanneer men op de knop "verzenden" drukt zal deze tekst door de PC/laptop naar de Arduino gezonden worden. Ook voor het lezen van data heeft het Serial-object een aantal functies.

opgelet!

communiceren kost tijd! Kort door de bocht gerekend kunnen we aan een baudrate van 115200 baud 11520 karakters/seconde doorsturen. Dat wil zeggen dat een simpele boodschap als "Hello World" dat uit 11 karakters bestaat, zal aangevuld worden met een carriage return en een linefeed karakter (nieuwe regel en naar het begin van de regel opschuiven) waardoor het totaal te verzenden bytes op 13 komt. Dit zal dus minstens 13/11520 = 1,128ms tijd in beslag nemen, waardoor de timing van het ganse programma gewijzigd wordt.

Hou dus altijd rekening met de vertraging door communicatie.

Meer info en voorbeelden over het Serial-object vind je uiteraard op https://www.arduino.cc/en/Reference/Serial
 

artikel under construction

Deze pagina wordt nog aangevuld.

Oplossing looplicht

Voor deze oefening bestaan verschillende oplossingen. Hier volgt één van de meest eenvoudige.

De toepassing die hier gedemonstreerd wordt is dat je binnen een lus de waarde van de teller kunt gebruiken als variabele om op een elegante manier code te schrijven.

de setup

In de setup moeten we pinnen 3 tot 10 als output definiëren. We kunnen dit door 8 regels na elkaar met elke keer de pinMode instructie, maar dit is ook met een for-loop op te lossen.

void setup() {
  for(int i=3; i<=10;i++) {
    pinMode(i,OUTPUT);
  }
}

We initialiseren de teller op 3, en laten hem lopen tot en met 10. Voor elk van deze waarden voeren we een pinMode instructie uit, waarbij i de te configureren pin is.

Op dezelfde manier laten we nu de opeenvolgende leds aan- en uitgaan.

void loop() {
  for(int i=3; i<=10;i++) {
    digitalWrite(i,HIGH);
    delay(250);
    digitalWrite(i,LOW);
  }
}

De delay(250) zorgt voor een vertraging van 250ms, waardoor het looplicht 4 stappen per seconde neemt, en de gevraagde 4Hz frequentie bereikt wordt.

Een simulatie kun je vinden via deze link.

 

labo 1

Oefeningen: basis 1 - systeem testen

Begin met het testen van je programmeeromgeving door het voorbeeldprogramma "blink" uit te voeren. Hoe je dit kunt doen zie je in onderstaande video (gebruik oortjes in de les!!).

  • zoek uit via welke poort de Arduino verbonden is met de laptop
  • Zoek op hoeveel stroom elke pin kan leveren of verwerken.
  • Wat zijn de verschillende pinModes, en wat is het onderscheid?

Oefeningen : basis 2 - morsecode SOS

Maak een nieuw programma. Plaats een rode LED op pin 12 en schrijf een programma waarbij de led SOS in morsecode weergeeft. Een streep duurt 0,3s en een punt 0,1s. De pauze tussen strepen en punten is 0,1s. De pauze tussen twee letters is 0,3s en de pauze tussen twee woorden is 0,7s.

Gebruik lussen om het programma zo efficiënt mogelijk te maken

Oefeningen: basis 3 - looplicht met vaste frequentie

Verbind 8 led's met pinnen 3..10 en programmeer een looplicht. Frequentie van het looplicht is 4Hz.

Oefeningen: basis 4 - knightrider effect

Maak met dezelfde configuratie en dezelfde frequentie een knightrider.

Oefeningen: basis 5 - RGB led aansturen

PLaats een RGB led op pinnen 3 (rood),4 (groen) en 5 (blauw). Maak een programma dat door de 7 basismengkleuren heen loopt, aan een frequentie van 1Hz.

Oefeningen: gevorderd 1 - 7-segment display animatie

Gebruik een dubbel 7-segment display en laat de segmenten in een 8-animatie oplichten.

Oefeningen: gevorderd 2 - 7-segment teller

Maak een teller op 1 display die doorlopend telt van 0 tot en met 9. Gebruik een array om de letterpatronen op te slaan. segA=pin3, segB=pin4,... Frequentie van de teller is 2Hz.

Oefeningen: gevorderd 3 - dubbele 7-segment teller

Maak van voorgaande opgave een 00 tot 99 teller door gebruik te maken van multiplexing. Pin10 bepaalt welk van beide displays actief is.

Oefeningen: gevorderd 4 - volledige morse code

Zorg dat alle letters in morsecode kunnen worden weergegeven. Zoek een manier om het morse alfabet efficiënt op te slaan, zodat niet per letter een functie dient geschreven te worden.

de presentatie

opgelet! deze wordt als bestand gedownload en dus niet in een venster getoond.

de presentatie in pdf formaat