Arduino C++ is een versie van C++ aangepast voor Arduino microcontrollers en andere compatibele microcontroller-systemen. Het bevat speciale functies en bibliotheken om hardware zoals sensoren, motoren en dergelijke gemakkelijk uit te lezen of aan te sturen. Arduino C++ code wordt geschreven in de Arduino IDE. Dit is een eenvoudige programmeer omgeving om te gebruiken. Ze helpt bij het ontwikkelen, compileren en uploaden van de code naar de hardware. Hierdoor is het een goede keuze voor zowel beginners als gevorderden.
Voor installatie-instructies van de Arduino IDE en configuratie-details van het ESP32-DevKitC bord, raadpleeg ‘Installeren Arduino IDE‘ en ‘Configuratie van ESP32-DevKitC in Arduino IDE‘. Deze zijn ook te vinden onder ‘Technische Info’.
We gaan hieronder de Arduino C++ taal uitleggen. Hier wordt niet te diep in de Arduino C++ taal in gegaan, maar genoeg om de workshops te maken en meer. Ik begin met het invoeren van de taal delen die we in de workshops gebruiken. Zodra die klaar zijn, voeg ik ook andere toe.
Als je deze pagina voor het eerst bekijkt, kun je het beste van boven naar onderen werken om zo een goed overzicht te krijgen van Arduino C++. Later kun je rechtstreeks naar het onderwerp gaan wat je nog een keer wil bekijken. Zoeken met de zoekbalk kan natuurlijk ook.
]]>Omschrijving
De ‘for’-lus in Arduino is een manier om een stuk code meerdere keren achter elkaar uit te voeren zonder dat je die code steeds opnieuw hoeft te schrijven. Het werkt door eerst een startpunt in te stellen (zoals ‘i = 0’), dan te bepalen hoe lang de herhalingen doorgaan (bijvoorbeeld zolang ‘i’ minder is dan 5), en ten slotte te bepalen hoe de variabele verandert na elke herhaling (meestal door ‘i’ met 1 te verhogen). Dit is handig om bijvoorbeeld een LED meerdere keren te laten knipperen. In plaats van vijf keer dezelfde code te schrijven, gebruik je een ‘for’-lus om te zeggen: “Doe deze actie vijf keer”. Het maakt je programma korter en makkelijker te begrijpen.
Syntax
for(a;b;c){functies}
Parameters
a: hier geef je de begin waarde op, bijvoorbeeld ‘int i=1’
b: hier geef je aan hoe lang het uitgevoerd moet worden, bijvoorbeeld ‘i<11’
c: hier geef je aan hoe ‘i’ dient te veranderen, bijvoorbeeld ‘i=i+1’ (de verkorte schrijfwijze is: ‘i++’)
functies: dit zijn de commando regels die uitgevoerd dienen te worden zolang er aan de voorwaarde die bij b is opgegeven. Bijvoorbeeld zolang i kleiner is dan 11.
Geeft terug
Niets.
Voorbeeld
void setup() { Serial.begin(115200); } void loop() { for(int i=1 ; i<11 ; i=i+1 ){ Serial.print("i = "); Serial.println(i); } Serial.println("Klaar."); Serial.println(); delay(20000); // wacht 20 seconden }
Toelichting voorbeeld
setup()
De seriële poort wordt geopend om gegevens naar de seriële monitor te schrijven.
loop()
Op regel 6 wordt gebruik gemaakt van de ‘for’-lus. Hier krijgt ‘i’ de begin waarde ‘1’, wordt de lus uitgevoerd zolang ‘i’ kleiner is dan 11 en ‘i’ wordt elke keer met 1 verhoogt.
Dus regel 6 wordt uitgevoerd en gaat dan de lus uitvoeren (indien i kleiner is dan 11), dit zijn de regels 7 en 8. Daarna gaat hij weer naar regel 6 en ‘i’ wordt met 1 verhoogt. Er wordt gecontroleerd of ‘i’ nog altijd kleiner is als 11. Zo ja, de regels 7 en 8 worden weer uitgevoerd. Dit gaat zo verder totdat het ‘i’ 11 wordt, de controle wordt uitgevoerd en ‘i’ is dus NIET meer kleiner dan 11. De lus wordt nu niet meer herhaald.
Regels 10, 11 en 12 worden uitgevoerd en het programma gaat weer naar regel 6. De ‘for’-lus begint weer opnieuw. Hier krijgt ‘i’ de begin waarde ‘1’, wordt de lus uitgevoerd zolang ‘i’ kleiner is dan 11 en ‘i’ wordt elke keer met 1 verhoogt.
Dit herhaald zich totdat je de microprocessorboard uitzet.
Uitvoer
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
Klaar.
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
Klaar.
Bovenstaand blijft zich herhalen totdat de microcontrollerboard uitgezet wordt.
Notities en waarschuwingen
Je kunt hier verschillende type variabelen gebruiken voor ‘i’.
Functies in programmeren zijn zoals kleine, herbruikbare stukjes code die een specifieke taak uitvoeren. Je kunt een functie vergelijken met een recept in een kookboek. Het recept geeft stap-voor-stap instructies over hoe je iets moet bereiden. Net zoals je een recept kunt gebruiken om een maaltijd meerdere keren te maken, kun je een functie herhaaldelijk gebruiken om dezelfde actie of berekening uit te voeren in je programma.
Waarom Gebruiken We Functies?
Functies helpen je om je code te organiseren door het op te splitsen in kleinere, beheersbare stukken. Dit maakt je code makkelijker te lezen en te onderhouden. Stel je voor dat je een heel groot project hebt; het is veel handiger om dat in kleinere stukjes te verdelen.
Hoe Werken Functies?
Elke functie heeft een naam. Wanneer je die naam in je programma gebruikt, voert de functie de taak uit die eraan is gekoppeld. Functies kunnen ook gegevens ontvangen, die we “parameters” noemen, en ze kunnen gegevens teruggeven, bekend als “return waarden”. Dit maakt functies erg flexibel en krachtig.
Functies in C++
In C++ kun je je eigen functies schrijven om specifieke taken uit te voeren. Dit kan variëren van eenvoudige berekeningen tot complexe taken. Naast het schrijven van je eigen functies, biedt C++ ook een uitgebreide bibliotheek met standaardfuncties. Deze standaardfuncties helpen je met veel voorkomende taken, zoals het manipuleren van tekst, het sorteren van lijsten, en het werken met bestanden.
Voorbeelden van standaardfuncties in C++ zijn:
Extra Functionaliteit
Soms heb je speciale functies nodig die je moet importeren. Deze voeren zeer specifieke taken uit, zoals het aansturen of uitlezen van elektronische componenten. Bijvoorbeeld een display, real-time clock of temperatuursensor. Deze functies maken het mogelijk om extra componenten te gebruiken en voegen extra functionaliteit toe aan je microprocessorbord, zoals:
Door functies te gebruiken, kun je efficiënter programmeren en wordt je code overzichtelijker en makkelijker te onderhouden.
Omschrijving
Het digitalRead() functie wordt gebruikt in het programma gebruikt om de status van een digitale pin op een microcontroller (zoals de Arduino / ESP32) te lezen. De pin die gelezen wordt, moet wel eerst als invoer gedefinieerd worden. Dit doe je met de functie pinMode(). Daarna kan met de functie digitalRead() een digitale pin gelezen worden. Dit resulteert in een waarde ‘hoog’ (HIGH) of ‘laag’ (LOW). Deze waarde wordt door de functie terug gegeven en kan in een variabele opgeslagen worden voor later gebruik.
Syntax
digitalRead(pin)
Parameters
pin: is het GPIO nummer dat je uit wil lezen. Dus voor bijvoorbeeld GPIO1 voer je hier ‘1’ in.
Geeft terug
HIGH of LOW.
Voorbeeld
int knopPin = 16; int retourWaarde = 0; void setup() { pinMode(knopPin, INPUT); // Stel de pin in als een invoerpin } void loop() { retourWaarde = digitalRead(knopPin); // leest de waarde uit van de invoer pin en kent deze toe aan de variabele retourWaarde delay(1000); // Wacht 1 seconde // rest van het programma }
Toelichting voorbeeld
Eerst worden 2 variabelen gedefinieerd. Een bevat een waarde die aangeeft om welke pin het gaat (knopPin). Dit is handig omdat je tijdens de ontwikkeling van het programma deze waarde overal moeten wijzigen als deze tijdens het ontwikkelen wijzigt. In de andere variabele zetten we de waarde die uitgelezen wordt. Hier onthoud het programma wat de status is van de invoer pin als deze uitgelezen wordt. Anders zou je elke keer dat je deze waarde nodig hebt de pin opnieuw moeten uitlezen. Deze waarde zou intussen best anders kunnen zijn. In de setup() wordt de pin als invoer (INPUT) gedefinieerd. In de eerste regel van de loop() wordt de waarde van de invoer pin gelezen en toegekend aan de variabele ‘retourWaarde’ om ergens anders in het programma gebruikt te worden.
Notities en waarschuwingen
Kies wel een pin die een digitaal signaal aan kan en voor invoer geschikt is.
Omschrijving
Serial verwijst niet naar een enkele functie, maar naar een verzameling functies die communicatie tussen een computer en een microcontrollerbord mogelijk maken. Over het algemeen is er ten minste één poort beschikbaar voor deze communicatie. Bovendien kan een microcontrollerbord ook met andere apparaten communiceren via deze poorten.
Hieronder bespreek ik enkele basis functies die het mogelijk maken om waarden vanaf het microcontrollerbord weer te geven in de seriële monitor van de Arduino IDE, en om gegevens vanuit de Arduino IDE (via de seriële monitor) naar het microcontrollerbord te sturen. Deze functionaliteit wordt vaak gebruikt voor het debuggen van een programma.
Hoe maak je de seriële monitor zichtbaar in de Arduino IDE?
Dit kan op drie manieren, door:
Zie de drie oranje pijlen in afb. 1
Overzicht seriële monitor
In afbeelding 2 zie je het volledige venster van de seriële monitor. Linksboven wordt de poort getoond die door de seriële monitor wordt gebruikt, welke overeenkomt met de poort van het microcontrollerbord (in afb.2 is dit ‘COM4’). Direct daaronder bevindt zich het invoerveld (dit gebruik je voor de communicatie van de computer naar het microcontrollerbord), met rechts de ‘Verzenden’ knop. Onder het invoerveld vind je het uitvoergedeelte van het venster, waar de gegevens die van het microcontrollerbord naar de computer worden gestuurd, worden weergegeven.
Op de onderste regel staan de opties:
Een microcontrollerboard kan meerdere seriële poorten hebben. De ESP32 die in deze workshop wordt gebruikt, heeft drie seriële poorten, ook wel UART’s genoemd. UART staat voor Universal Asynchronous Receiver/Transmitter. In je programma worden deze aangeduid als Serial, Serial1 en Serial2. Serial is verbonden met de USB-poort, waardoor het mogelijk is om te communiceren met de seriële monitor van de Arduino IDE. In deze ga ik allen in uitleg licht ik alleen Serial toe.
Omschrijving
De Serial.begin() functie start de communicatie tussen je Arduino en de computer via de seriële monitor. Bij het gebruik van deze functie geef je aan hoe snel de gegevens verstuurd moeten worden. Deze snelheid moet hetzelfde zijn als de snelheid die je instelt in de seriële monitor op je computer. Normaal gesproken zet je deze functie één keer in het begin van je code, meestal in het blokje dat setup() heet, zodat je Arduino weet dat hij klaar is om te beginnen met het verzenden en ontvangen van informatie.
Syntax
Serial.begin(snelheid);
Parameters
Serial: seriële poort object. Mogelijke waarden voor de ESP32 zijn: Serial, Serial1 en Serial2.
snelheid: Dit is de snelheid waarmee de seriële poort van de computer en de microcontroller met elkaar communiceren. Mogelijke waardes zijn: 300, 1200, 2400, 4800, 9600, 192000, 38400, 57600, 74880, 115200, 230400, 250000, 500000, 1000000 en 2000000 baud. De vetgedrukte zijn de meest gebruikelijke. Hiervan wordt 115200 in de workshops gebruikt.
Geeft terug
Niets
Voorbeeld
void setup() { Serial.begin(115200); // opent seriële poort en zet de snelheid op 115200 baud } void loop() { Serial.print("Hallo!"); }
Toelichting voorbeeld
void setup()
Serial.begin(115200);
Start de communicatie met de seriële poort op een snelheid van 115200 baud. Dit betekent dat je deze snelheid ook moet kiezen in het venster van de seriële monitor op je computer.
void loop()
Serial.print(“Hallo!”);
Stuurt informatie van het microcontrollerbord naar de computer.
Notities en waarschuwingen
Zorg ervoor dat de snelheid die je in je programma instelt hetzelfde is als de snelheid die je kiest in de seriële monitor. Als deze niet hetzelfde zijn, werkt het niet goed en zie je misschien gekke tekens op je scherm.
Let op dat je ‘Serial.begin()’ met een hoofdletter ‘S’ schrijft.
Omschrijving
Met de functies Serial.print() en Serial.println() kun je gegevens van je microcontrollerbord naar de seriële monitor op je computer sturen. Als je Serial.println() gebruikt, stuurt het de gegevens en gaat daarna automatisch naar de volgende regel. Als je Serial.print() gebruikt, blijft de cursor op dezelfde regel staan, en wat je daarna stuurt, komt direct achter de vorige gegevens te staan.
Syntax
Serial.print(gegevens)
Serial.println(gegevens)
Parameters
Serial: seriële poort object. Mogelijke waarden voor de ESP32 zijn: Serial, Serial1 en Serial2.
gegevens: zijn teksten, getallen of variabelen (bij variabelen de inhoud ervan) die je naar de seriële monitor wil sturen.
Geeft terug
Niets
Voorbeeld
void setup() { Serial.begin(115200); // opent seriële poort en zet de snelheid op 115200 bps } void loop() { Serial.println("Eerste regel."); Serial.println("Tweede regel."); Serial.print("Begin derde regel "); Serial.print("en het vervolg van de derde regel, "); Serial.println("het einde van de derde regel."); Serial.println("Vierde regel."); Serial.println(); int getal = 10; Serial.print("Het getal is: "); Serial.println(getal); Serial.print("Het tweede getal is: "); Serial.println(5); delay(300000); }
Uitvoer van het programma:
Eerste regel.
Tweede regel.
Begin derde regel en het vervolg van de derde regel, het einde van de derde regel.
Vierde regel.
Het getal is: 10
Het tweede getal is: 5
Elk gebruik van println() zorgt ervoor dat je naar een nieuwe regel gaat na het versturen van de tekst, terwijl print() je op dezelfde regel houdt.
Toelichting voorbeeld
In het stukje code hierboven, worden verschillende dingen verstuurd van je microcontroller naar de seriële monitor op je computer. Hier is wat er stap voor stap gebeurt:
void setup()
Serial.begin(115200);
Dit initialiseert de seriële communicatie met een baud rate (snelheid) van 115200 bits per seconde. Het zorgt ervoor dat de Arduino kan communiceren met een computer via de seriële monitor.
void loop()
Serial.println(“Eerste regel.”);
Dit stuurt de tekst “Eerste regel.” naar de seriële monitor en gaat daarna naar de volgende regel.
Serial.println(“Tweede regel.”);
Dit stuurt de tekst “Tweede regel.” en gaat naar de volgende regel.
Serial.print(“Begin derde regel “);
Dit stuurt de tekst “Begin derde regel ” naar de monitor, maar blijft op dezelfde regel.
Serial.print(“en het vervolg van de derde regel, “);
Dit voegt de tekst “en het vervolg van de derde regel, ” direct achter de vorige tekst toe en blijft op dezelfde regel.
Serial.println(“het einde van de derde regel.”);
Dit voegt “het einde van de derde regel.” toe aan het einde van de derde regel en gaat daarna naar de volgende regel.
Serial.println(“Vierde regel.”);
Dit stuurt “Vierde regel.” en gaat naar de volgende regel.
Serial.println();
Deze opdracht verstuurd geen gegevens naar de computer, maar zorgt er wel voor dat de uitvoer naar de volgende regel gaat. Er ontstaat een lege regel. Dit is gemakkelijk om gegevens die je naar de computer stuurt van elkaar te scheiden en houdt het overzichtelijk.
int getal = 10;
Maakt een variabele van het soort integer (int) en geeft deze een waarde van 10.
Serial.print(“Het getal is: “);
Dit stuurt de tekst ‘Het getal is: ‘ naar de monitor en blijft op dezelfde regel.
Serial.println(getal);
Dit stuurt de inhoud van de variabele getal naar de computer, in dit geval ’10’, en gaat naar de volgende regel.
Serial.print(“Het tweede getal is: “);
Dit stuurt de tekst ‘Het tweede getal is: ‘ naar de monitor en blijft op dezelfde regel.
Serial.println(5);
Dit stuurt het getal 5 naar de monitor en gaat naar de volgende regel.
delay(300000);
Het programma wacht 300.000 milliseconden. Dit is 5 minuten en gaat dan verder. Omdat dit de laatste regel in het programma is, gaat het programma verder bij de eerste regel van loop(). Dit is regel 6 in het voorbeeld.
Notities en waarschuwingen
Let op dat je ‘Serial.print()’ en ‘Serial.println’ met een hoofdletter ‘S’ schrijft.
Omschrijving
Leest een tekens uit de serial buffer en geeft die inhoud terug aan een variabele. Maar voordat je dit kunt doen, moet je de seriële poort aanzetten met de functie Serial.begin(115200). Zonder dit werkt de seriële poort niet en kun je geen gegevens lezen en schrijven.
Syntax
Serial.readString()
Parameters
Serial: seriële poort object. Mogelijke waarden voor de ESP32 zijn: Serial, Serial1 en Serial2.
Geeft terug
Een string (alle tekens) die uit de buffer van serial gelezen zijn.
Voorbeeld
void setup() { Serial.begin(115200); } void loop() { Serial.println("Geef een kleur in:"); while (Serial.available() == 0) {} //wacht totdat er gegevens aanwezig zijn String teststr = Serial.readString(); //Lees gegevens uit de serial buffer teststr.trim(); // Verwijder alle '\r', '\n' en spaties aan het einde van de gegevens if (teststr == "rood") { Serial.println("Een primaire kleur"); } else { Serial.println("Andere tekst"); } }
Toelichting voorbeeld
void setup()
Serial.begin(115200);
Dit initialiseert de seriële communicatie met een baud rate (snelheid) van 115200 bits per seconde. Het zorgt ervoor dat de Arduino kan communiceren met een computer via de seriële monitor.
void loop()
Serial.println(“Geef een kleur in: “);
Dit stuurt de tekst “Geef een kleur in: ” naar de seriële monitor als een prompt voor de gebruiker om gegevens in te voeren.
while (Serial.available() == 0) {}
Dit is een wachtlus die zich blijft herhalen totdat er gegevens beschikbaar zijn in de seriële buffer. Serial.available() retourneert het aantal bytes dat beschikbaar is om te lezen. Als dit aantal 0 is, wacht de lus totdat er gegevens beschikbaar zijn. Serial.available() geeft dan een aantal dat groter is dan 0.
String teststr = Serial.readString();
Deze regel leest de beschikbare gegevens uit de seriële buffer als een string en slaat deze op in de variabele teststr. In deze regel wordt ook ‘teststr’ gedefinieerd als string.
teststr.trim();
Dit verwijdert eventuele witruimten, inclusief carriage return (\r) en line feed (\n), aan het einde van de string teststr (dit zijn tekens die automatisch meegestuurd worden door de computer). Dit zorgt ervoor dat de string nauwkeurig kan worden vergeleken zonder extra spaties of nieuwe regels.
if (teststr == “rood”) { Serial.println(“Een primaire kleur”); } else { Serial.println(“Andere tekst”); }
Dit is een voorwaardelijke structuur.
Als de string teststr gelijk is aan “rood”, dan print het programma “Een primaire kleur” naar de seriële monitor.
Anders, print het programma “Andere tekst” naar de seriële monitor.
Notities en waarschuwingen
Let op!!!
Dat je Serial.readString() met de letters ‘S’ als hoofdletters schrijft. Doe je dit niet, krijg je een foutmelding.
Omschrijving
Serial.read() is een functie die je gebruikt om informatie te lezen die naar je Arduino wordt gestuurd via de seriële poort. Maar voordat je dit kunt doen, moet je de seriële poort aanzetten met de functie Serial.begin(115200). Zonder dit werkt de seriële poort niet en kun je geen gegevens lezen en schrijven.
Syntax
Serial.read()
Parameters
Serial: seriële poort object. Mogelijke waarden voor de ESP32 zijn: Serial, Serial1 en Serial2.
Geeft terug
Geeft het eerste teken terug van de seriële buffer. Deze waarde is van type integer.
Voorbeeld
void setup() { Serial.begin(115200); // Start de seriële communicatie met 115200 baud Serial.println("Type iets en druk op Enter:"); } void loop() { if (Serial.available() > 0) { // kijkt of er data beschikbaar is om te lezen int incomingByte = Serial.read(); // Lees het binnenkomende byte (is een teken) Serial.print("Ontvangen: "); Serial.println(incomingByte, DEC); // Print de ontvangen byte als decimaal getal } }
Toelichting voorbeeld
void setup()
Serial.begin(115200);
Hierin start je de seriële communicatie met Serial.begin(115200);, wat betekent dat de communicatie op een snelheid van 115200 baud plaatsvindt.
Serial.println(“Type iets en druk op Enter:”);
Vervolgens print je een bericht om de gebruiker te laten weten dat ze iets moeten typen.
void loop()
if (Serial.available() > 0) {}
Deze functie kijkt of er een of meerdere tekens in de invoer buffer staan, dit doet het deel ‘Serial.available’. De functie geeft een waarde terug en de if-functie kijkt of die waarde groter is dan 0. Als dat waar is, worden de commando’s die tussen de accoladen ‘{}’ staan uitgevoerd. Als dit niet het geval is gaat het programma verder achter de afsluit accolade ‘}’.
int incomingByte = Serial.read();
Als er data is, wordt deze gelezen met Serial.read(), wat één byte data van de seriële buffer leest en in de variabele ‘incomingByte’ wordt gezet. Als het teken gelezen is, wordt deze uit de buffer gehaald.
Serial.print(“Ontvangen: “);
De tekst ‘Ontvangen: ‘ wordt naar de seriële monitor gestuurd.
Serial.println(incomingByte, DEC);
Deze byte wordt vervolgens geprint als decimaal getal met Serial.println(incomingByte, DEC); en gaat vervolgens naar de volgende lijn.
Notities en waarschuwingen
Omschrijving
De functie Serial.available() in de Arduino programmeertaal wordt gebruikt om te controleren hoeveel bytes er beschikbaar zijn om te lezen van de seriële buffer. Het wordt gebruikt in een programma om te controleren voorafgaand aan Lezen van de seriële buffer. Het is gebruikelijk om Serial.available() te gebruiken voordat je seriële gegevens leest met functies zoals Serial.read() of Serial.readString(). Dit voorkomt dat je probeert te lezen als er geen gegevens zijn, wat fouten kan voorkomen.
Syntax
Serial.available()
Parameters
Serial: seriële poort object. Mogelijke waarden voor de ESP32 zijn: Serial, Serial1 en Serial2.
Geeft terug
Retourneert een Integer
De functie retourneert een integer die aangeeft hoeveel bytes er beschikbaar zijn in de seriële buffer. Als er geen gegevens beschikbaar zijn, retourneert het 0.
Voorbeeld
void setup() { Serial.begin(115200); // Initialiseer seriële communicatie op 115200 bps } void loop() { if (Serial.available() > 0) { // Controleer of er gegevens beschikbaar zijn int incomingByte = Serial.read(); // Lees de inkomende byte Serial.print("Ontvangen: "); Serial.println(incomingByte, DEC); // Print de ontvangen byte als decimaal getal } }
Toelichting voorbeeld
void setup()
Serial.begin(115200);
Dit initialiseert de seriële communicatie met een baud rate (snelheid) van 115200 bits per seconde. Het zorgt ervoor dat de Arduino kan communiceren met een computer via de seriële monitor.
void loop()
if (Serial.available() > 0)
De if-voorwaarde Serial.available() > 0 controleert of er minstens één byte beschikbaar is in de seriële buffer.
Als er gegevens beschikbaar zijn, wordt de eerste byte gelezen met Serial.read() en opgeslagen in de variabele ‘incomingByte’. Het teken dat gelezen is wordt uit de seriële buffer verwijdert.
Serial.println(incomingByte, DEC);
De ontvangen byte wordt vervolgens geprint naar de seriële monitor.
Notities en waarschuwingen
Geen.
Omschrijving
Het delay() commando wordt gebruikt om een pauze in te voegen in de uitvoering van het programma. Het commando vertraagt de uitvoering van verdere instructies voor opgegeven hoeveelheid milliseconden. 1000 milliseconden is 1 seconde.
Syntax
delay(waarde)
Parameters
waarde: is de waarde in milliseconden die gewacht moet worden. De waarde is een unsigned long variabele.
Geeft terug
Niets.
Voorbeeld
void setup() { // initialisaties } void loop() { // doe iets hier delay(2000); // wacht 2 seconden voordat de volgende instructie wordt uitgevoerd }
Toelichting voorbeeld
In dit voorbeeld wordt de loop() functie herhaaldelijk uitgevoerd, en elke keer dat het programma delay(2000); bereikt, wacht het gedurende 2 seconden voordat het verder gaat met de volgende instructie.
Het delay() commando wordt vaak gebruikt voor timing, om bijvoorbeeld sensoren te lezen met tussenpozen, LED’s te laten knipperen of om een bepaalde tijd te wachten voordat een andere actie wordt uitgevoerd in een programma.
Notities en waarschuwingen
Niets.
Omschrijving
Configureert voor een bepaalde pin of deze gebruikt wordt voor in- of uitvoer. Kijk bij de pinbezetting van de ESP32-DevKitC Bord welke pinnen je kunt gebruiken voor in- of uitvoer.
Syntax
pinMode(pin, modus)
Parameters
pin: is het GPIO nummer dat je als invoer of uitvoer wil zetten. Dus voor bijvoorbeeld GPIO1 voer je hier ‘1’ in.
modus: hier bepaal je of de pin invoer ( ‘INPUT’ ) of uitvoer ( ‘OUTPUT’ ) wordt. De derde mode is ‘INPUT_PULLUP’. Deze mode is dus ook invoer, maar nu wordt een interne weerstand ingeschakeld die zorgt voor een constant signaal. Deze pin moet wel een interne pullup weerstand ondersteunen. Zie pinbezetting.
Geeft terug
Niets.
Voorbeeld
int ledPin = 13; // Definieer de pin waarop de LED is aangesloten void setup() { pinMode(ledPin, OUTPUT); // Stel de pin in als een uitvoerpin } void loop() { // Andere code hier }
Toelichting voorbeeld
Op regel 1 krijgt de variabele ‘ledPin’ de waarde 13, dit is de pin die in dit voorbeeld gebruikt wordt.
In regel 4 wordt deze pin ingesteld als een uitvoer (OUTPUT) pin.
Notities en waarschuwingen
Kies wel een pin die een digitaal signaal aan kan en voor uitvoer geschikt is.
Omschrijving
De digitalWrite() functie wordt gebruikt in het programma om de status van een digitale pin op een microcontroller (zoals de Arduino / ESP32) te wijzigen. De pin waar naar geschreven wordt, moet wel eerst als uitvoer gedefinieerd worden. Dit doe je met de functie pinMode(). Daarna kan met de functie digitalWrite() een digitale pin als ‘hoog’ (HIGH) of ‘laag’ (LOW) ingesteld worden.
Syntax
digitalWrite(pin, waarde)
Parameters
pin: is het GPIO nummer waar je de status van wil wijzigen. Dus voor bijvoorbeeld GPIO1 voer je hier ‘1’ in.
waarde: hier bepaal je of de pin ‘HIGH’ of ‘LOW’ wordt gezet. Dit houdt in aan (‘HIGH’) of uit (‘LOW’) wordt gezet.
Geeft terug
Niets.
Voorbeeld
int ledPin = 13; // Definieer de pin waarop de LED is aangesloten void setup() { pinMode(ledPin, OUTPUT); // Stel de pin in als een uitvoerpin } void loop() { digitalWrite(ledPin, HIGH); // Zet de LED aan door de pin op HIGH te zetten (5V) delay(1000); // Wacht 1 seconde digitalWrite(ledPin, LOW); // Zet de LED uit door de pin op LOW te zetten (0V) delay(1000); // Wacht weer 1 seconde }
Toelichting voorbeeld
Op regel 8 en 10 wordt pin 13 ingesteld. Op regel 8 wordt deze ingesteld op ‘HIGH’ en gaat het ledje aan. Op regel 10 wordt deze ingesteld op ‘LOW’ en gaat het ledje uit.
Notities en waarschuwingen
Kies wel een pin die een digitaal signaal aan kan en voor uitvoer geschikt is.