Werken met Arduino-tekstreeksen. Lange rijen inpakken. Functies en methoden van de klasse String


String tekst = "Temp:" + tempC + "C";

Helaas werkt dit niet in C. V in dit geval het bericht kan worden afgedrukt met meerdere afdrukinstructies, zoals hieronder weergegeven:

lcd.print ("Temp:"); lcd.print (tempC); lcd.print ("C");

Deze aanpak elimineert de noodzaak voor het kopiëren van gegevens achter de schermen tijdens het aaneenschakelen van tekenreeksen (aaneenschakeling), zoals het geval is in andere moderne talen.

Een vergelijkbare aanpak met meerdere uitvoerinstructies kan worden gebruikt bij het werken met een monitor seriële poort en Serial.print instructies. V soortgelijke gevallen de laatste op een regel is meestal het println-commando, dat een regelinvoer aan het einde toevoegt.

Tekenreeksen opmaken met sprintf . gebruiken

Standaard bibliotheek tekenreeksfuncties voor de C-taal (niet te verwarren met de Arduino String Object-bibliotheek, die in de volgende sectie wordt besproken) bevat een zeer handige sprintf-functie voor het formatteren van tekenarrays. Het voegt variabele waarden in de sjabloontekenreeks in, zoals weergegeven in het volgende voorbeeld:

sprint (regel1, "Temp:% d C", tempC);

De line1-tekenarray is een tekenreeksbuffer die opgemaakte tekst bevat. Zoals aangegeven in het voorbeeld, heeft het een capaciteit van 17 tekens, inclusief een extra null-teken aan het einde. Ik koos de naam line1 omdat ik je ga laten zien hoe je de inhoud kunt genereren. bovenste regel voor een liquid crystal display met twee regels van elk 16 karakters.

De eerste parameter van het sprintf-commando is een reeks tekens waarnaar het resultaat moet worden geschreven. Het volgende argument is een format string die de mix bevat platte tekst zoals Temp :, en opmaakopdrachten zoals% d. In dit geval staat % d voor een decimaal geheel getal met teken. De rest van de parameters worden in de opmaakreeks vervangen in de volgorde waarin ze verschijnen in plaats van de opmaakopdrachten.

Om de tijd in de tweede regel op het liquid crystal display weer te geven, kan deze worden gevormd uit individuele waarden van uren, minuten en seconden, zoals hieronder weergegeven:

sprintf (regel2, "Tijd:% 2d:% 02d:% 02d", h, m, s);

Als u regel 2 probeert af te drukken op de seriële monitor of het LCD-scherm, ziet u de tekst

Sprintf heeft niet alleen nummers gesubstitueerd in de juiste plaatsen, maar voegde ook een voorloopnul toe voor het cijfer 5. In het voorbeeld, tussen de karakters: er zijn opmaakcommando's voor de drie tijdcomponenten. De klok komt overeen met het commando% 2d, dat een tweecijferig decimaal getal uitvoert. De opmaakcommando's voor minuten en seconden zijn iets anders (% 02d). Deze commando's voeren ook tweecijferige uit decimale getallen maar voeg indien nodig een voorloopnul toe.

Houd er echter rekening mee dat deze techniek voor waarden is van het type int... Helaas hebben de Arduino-ontwikkelaars niet geïmplementeerd in standaard bibliotheek C-ondersteuning voor andere typen zoals float.

De lengte van een string bepalen

Omdat de tekenreeksen die zijn opgeslagen in tekenreeksen vaak korter zijn dan de reeksen zelf, biedt de bibliotheek een handige functie met de naam strlen. Deze functie telt het aantal tekens in de array voorafgaand aan het null-teken dat het einde van de tekenreeks markeert.

De functie neemt een reeks tekens in zijn enige parameter en retourneert de grootte van de tekenreeks (exclusief leeg teken) die erin is opgeslagen, bijvoorbeeld de opdracht

zal het getal 3 teruggeven.

Arduino String-objectbibliotheek

V Arduino IDE sinds versie 019, een paar jaar geleden uitgebracht, is de String-bibliotheek inbegrepen, die begrijpelijker en vriendelijker is voor ontwikkelaars die Java, Ruby, Python en andere talen gebruiken waar stringconcatenatie is toegestaan eenvoudige operator+. Deze bibliotheek biedt ook een heleboel hulpfuncties voor het werken met strings.

Zeker, deze bibliotheek voegt een paar kilobytes aan code toe aan de schets. Bovendien maakt het gebruik van een dynamisch geheugentoewijzingsmechanisme met alle bijbehorende problemen zoals geheugenuitputting. Denk daarom goed na voordat u besluit het te gebruiken. Veel Arduino-gebruikers geven er de voorkeur aan om gewone tekenreeksen te gebruiken.

Deze bibliotheek is verrassend eenvoudig te gebruiken, en als je ooit met strings in Java hebt moeten werken, voel je je meteen thuis met de Arduino String Object-bibliotheek.

Strings maken

U kunt een string maken van een array van elementen van het type char evenals van een int- of float-waarde, zoals weergegeven in het volgende voorbeeld:

String bericht = "Temp:";

Stringtemp = String (123);

Strings samenvoegen

Strings van het type String kunnen met elkaar en met gegevens van andere typen worden samengevoegd met de operator +. Probeer de volgende code toe te voegen aan de setup-functie van je lege schets:

Serieel.begin (9600);

String bericht = "Temp:";

Stringtemp = String (123);

Serial.println (bericht + temp + "C");

Merk op dat de laatste waarde die aan de tekenreeks is toegevoegd, in feite een reeks tekens is. Als het eerste element in de reeks waarden tussen de +-operators een tekenreeks is, worden de overige elementen automatisch geconverteerd naar tekenreeksen voordat ze worden samengevoegd.

Andere tekenreeksfuncties

Tafel 6.1 somt er nog een paar op handige functies uit de String-bibliotheek. Volle lijst beschikbare functies is te vinden op http://arduino.cc/en/Reference/StringObject.

Tabel 6.1. Sommige handige functies in de String-bibliotheek

Functie

Voorbeeld

Beschrijving

char ch = String ("abc")

De variabele ch krijgt de waarde "a"

String s = "abc";

Verwijder spaties aan weerszijden van de abc-tekengroep. De variabele s krijgt de waarde "abc"

Tekenreeks s = "123";

int x = s.toInt ();

Converteert de tekenreeksrepresentatie van een getal naar een int of long

String s = "abcdefg";

String s2 = s.substring (1, 3);

Retourneert een deel van de oorspronkelijke tekenreeks. De variabele s2 krijgt de waarde "bc". De parameters worden doorgegeven: de index van het eerste teken van het fragment en de index van het volgende teken laatste karakter fragment

String s = "abcdefg";

s.replace ("de", "DE");

Vervangt alle exemplaren van "de" in de string door "DE". De s2-variabele krijgt de waarde "abcDEfg"

EEPROM gebruiken

De inhoud van alle variabelen die worden gebruikt in Arduino schets, gaat verloren wanneer de stroom wordt uitgeschakeld of wanneer een reset wordt uitgevoerd. Om de waarden op te slaan, moeten ze byte voor byte in het EEPROM-geheugen worden geschreven. V Arduino Uno 1KB EEPROM is beschikbaar.

NOTITIE

Dit geldt niet voor Arduino-bord Due, die geen EEPROM heeft. In dit model moeten gegevens worden opgeslagen op een microSD-kaart.

Om gegevens naar de EEPROM te lezen en te schrijven, moet u de bibliotheek gebruiken die bij de Arduino IDE wordt geleverd. Het volgende voorbeeld laat zien hoe u een enkele byte naar de EEPROM schrijft, in dit geval wordt de bewerking uitgevoerd in de setup-functie:

#erbij betrekken

bytewaardeToSave = 123

EEPROM.write (0, valueToSave);

Het eerste argument voor de schrijffunctie is het EEPROM-adres waar de databyte moet worden geschreven, en het tweede is de waarde die naar dat adres moet worden geschreven.

Tekstreeksen kunnen op twee manieren worden gedeclareerd: u kunt het gegevenstype String gebruiken, dat sinds versie 0019 in de kern is opgenomen; ofwel declareren de string als een null-terminated char array. Deze pagina beschrijft de tweede methode. Voor meer gedetailleerde informatie voor een String-object dat meer functionaliteit biedt tegen hogere geheugenkosten, zie de String Object-pagina.

Voorbeelden van

Hieronder staan ​​voorbeelden van correcte tekenreeksdeclaraties.

Char Str1; char Str2 = ("a", "r", "d", "u", "i", "n", "o"); char Str3 = ("a", "r", "d", "u", "i", "n", "o", "\ 0"); char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino";

char Str1 [15];

char Str2 [8] = ("a", "r", "d", "u", "i", "n", "o");

char Str3 [8] = ("a", "r", "d", "u", "i", "n", "o", "\ 0");

char Str4 = "arduino";

char Str5 [8] = "arduino";

char Str6 [15] = "arduino";

Bewerkingen toegestaan ​​bij het declareren van tekenreeksen

  • Declareer een karakterarray zonder deze te initialiseren (Str1)
  • Declareer een karakterarray met één redundant element, de compiler zal het vereiste null-teken zelf toevoegen (Str2)
  • Null-teken expliciet toevoegen (Str3)
  • Initialiseer de array met behulp van een stringconstante tussen aanhalingstekens; de compiler zal een array maken vereiste maat: null-beëindigd (Str4)
  • Initialiseer een array met behulp van een stringconstante, waarbij de grootte expliciet wordt gespecificeerd (Str5)
  • Initialiseer een te grote array, zodat er ruimte overblijft voor langere strings (Str6)

Null beëindigend karakter

Doorgaans zijn alle strings null-beëindigd (ASCII-code 0), waardoor functies (zoals Serial.print ()) de lengte van de string kunnen bepalen. Zonder dit teken zouden ze sequentieel geheugenbytes blijven lezen die in feite geen deel meer uitmaken van de string.

Kort gezegd betekent dit dat uw string 1 teken langer moet zijn dan de tekst die u erin wilt opslaan. Daarom moeten Str2 en Str5 8 tekens lang zijn, ondanks het feit dat het woord "arduino" slechts 7 is - de laatste positie wordt automatisch gevuld met een null-teken. De grootte van Str4 wordt automatisch 8 - één teken is vereist voor een afsluitende nul. In regel Str3 hebben we zelf het null-teken gespecificeerd (aangegeven met '\ 0').

Merk op dat u in het algemeen een string kunt declareren zonder een afsluitend null-teken (bijvoorbeeld als u de lengte van Str2 instelt op 7, niet op 8). Hierdoor zullen de meeste stringfuncties echter onbruikbaar worden, dus u moet dit niet opzettelijk doen. Deze fout kan de reden zijn vreemd gedrag of het verschijnen van tekens van derden bij het werken met tekenreeksen.

Enkele of dubbele aanhalingstekens?

Strings worden altijd gedeclareerd in dubbele aanhalingstekens("Abc"), en tekens worden altijd tussen enkele aanhalingstekens ("A") aangegeven.

Lange lijnen inpakken

Lange lijnen kunnen als volgt worden ingepakt:

char myString = "Dit is de eerste regel" "dit is de tweede regel" "etcetera";

char myString = "Dit is de eerste regel"

"dit is de tweede regel"

"enz.";

Reeksen strings

Bij het werken met grote volumes tekst (bijvoorbeeld in projecten die met een LCD-scherm werken) is het vaak handig om arrays van strings te gebruiken. Aangezien strings zelf arrays zijn, is dit eigenlijk een voorbeeld van een tweedimensionale array.

In het volgende programma geeft de asterisk na het char-gegevenstype "char *" aan dat de variabele een array van "pointers" is. Alle arraynamen zijn eigenlijk pointers, dus de asterisk is vereist om een ​​array van arrays te maken. Aanwijzers in C zijn een van de moeilijkere dingen voor beginners, maar in dit geval een diep begrip van aanwijzingen voor hen effectief gebruik is helemaal niet nodig.

Voorbeeld

char * myStrings = ("Dit is tekenreeks 1", "Dit is tekenreeks 2", "Dit is tekenreeks 3", "Dit is tekenreeks 4", "Dit is tekenreeks 5", "Dit is tekenreeks 6"); void setup () (Serial.begin (9600);) void loop () (for (int i = 0; i< 6; i++){ Serial.println(myStrings[i]); delay(500); } }

char * myStrings = ("Dit is string 1", "Dit is string 2", "Dit is string 3",

Ik kwam tot programmeren in het algemeen en Arduino-programmering met name, volledige nul, ongeveer twee maanden geleden. Nu, in de loop van mijn huidige activiteit, voelde ik de behoefte om de verwerking van lijnen op arduino onder de knie te krijgen. De gebruikelijke reis naar Google voor informatie beviel niet met het artikel, waar alles op een eenvoudige en begrijpelijke manier is geschreven voor dummies. En daarom ben ik hier om te praten over hoe het ontleden van lijnen van de seriële poort werd geïmplementeerd en welke lijnen onderweg werden aangetroffen. onderwater rotsen... Ik vraag geïnteresseerden onder cat.

Dus. Hier is een voorbeeldalgoritme dat ik heb gevolgd:

  1. We gaan naar arduino.ru en zoeken naar alles wat met symbolen te maken heeft in de typekolom.
  2. We beslissen welke vorm van representatie we zullen gebruiken (ik koos voor de String-klasse, omdat ik een onaangename ervaring had met mash-arrays).
  3. We proberen verwoed onze functie te schrijven met voorkeur en professets
  4. We zoeken een klas.
  5. Wij zijn op zoek naar de benodigde operators.
  6. Wij schrijven!
En het algoritme van het hoofdgedeelte van het programma is eenvoudig:
  1. We controleren cyclisch of de buffer bevat com-poort leesbare byte, indien aanwezig, leesbaar.
  2. Als de ontvangen byte een regelinvoerteken is ("\ n"), dan noemen we de zelfgeschreven ontledingsfunctie, zo niet, dan voegen we de ontvangen byte toe aan de gemaakte variabele zoals Snaar.
  3. Parseer ten slotte de string.

    In feite, sinds praktisch gebruik het ontleden van strings is uitgeschakeld, dan deze functie is slechts demonstratief, waarbij de resulterende string wordt vergeleken met een constante string die al in het geheugen is geschreven. Dus, met behulp van de operator is gelijk aan, vergelijken we de ontvangen string met de geschreven string, en als de operator true retourneert, verlaat dan de handlerfunctie, zo niet, vergelijk met de volgende. Als de strings equivalent zijn, verlaat dan nogmaals de handlerfunctie en retourneer het resultaat. Welnu, zelfs als deze voorwaarde niet werkt, zullen we de functie nog steeds verlaten en zeggen dat de string niet correct is.

  4. Afhankelijk van het geaccepteerde resultaat met behulp van schakelkast kies degene die je wilt.
  5. We zetten de ontvangen string op nul zodat we deze later opnieuw kunnen verzamelen.

En tot slot, hier is de code:

#define led 13 String input_string = ""; const String Led_off = "schakel led uit"; const String Led_on = "schakel led aan"; bool led_running; void setup () (Serial.begin (9600);) void loop () (while (Serial.available ()> 0) (char c = Serial.read (); if (c == "\ n") (Serial .print ("Input_string is:"); Serial.println (input_string); switch (parse (input_string, Led_off, Led_on)) (case 10: led_running = false; Serial.println ("Uitschakelen is voltooid"); break; case 11: led_running = true; Serial.println ("Inschakelen is voltooid"); break; case 0: Serial.println ("ongeldige string"); break;) input_string = ""; digitalWrite (led, led_running);) else (input_string + = c;))) byte ontleden (String input_string, const String Led_off, const String Led_on) (if (input_string.equals (Led_off) == true) (return 10;) else if (input_string.equals (Led_on ) == waar) (retour 11;) else retour 0;)


Dus, ik begrijp het niet, wat voor soort bedrijf? Waarom brandt de LED niet? Oh ja, hoe ben ik dit vergeten, je moet toevoegen aan de void setup:

PinMode (led, UITGANG);

P.S.: Het is belangrijk om de com-poortmonitor in de Arduino IDE in te stellen op de " Nieuwe lijn", Omdat in elk ander geval wordt de verzonden tekenreeks niet gevolgd door het eindteken "\ n".

P.P.S.: Ik ga niet deelnemen aan de holivar over het feit dat arduino nodig is, ik heb niets verkeerd gedaan tijdens het bestuderen van de basisprincipes van programmeren en algoritmisering.

P.P.P.S.: Als het artikel voldoende wordt geaccepteerd, zal ik het volgende schrijven over wat mij is overkomen met de verbetering van de functionaliteit van de parseerfunctie. Wel, met God! ...

Ik ben ongeveer twee maanden geleden begonnen met programmeren in het algemeen, en Arduino-programmering in het bijzonder, helemaal nul. Nu, in de loop van mijn huidige activiteit, voelde ik de behoefte om de verwerking van lijnen op arduino onder de knie te krijgen. De gebruikelijke reis naar Google voor informatie beviel niet met het artikel, waar alles op een eenvoudige en begrijpelijke manier is geschreven voor dummies. En daarom ben ik hier om te praten over hoe het ontleden van strings van de seriële poort is geïmplementeerd en welke valkuilen onderweg zijn tegengekomen. Ik vraag geïnteresseerden onder cat.

Dus. Hier is een voorbeeldalgoritme dat ik heb gevolgd:

  1. We gaan naar arduino.ru en zoeken naar alles wat met symbolen te maken heeft in de typekolom.
  2. We beslissen welke vorm van representatie we zullen gebruiken (ik koos voor de String-klasse, omdat ik een onaangename ervaring had met mash-arrays).
  3. We proberen verwoed onze functie te schrijven met voorkeur en professets
  4. We zoeken een klas.
  5. Wij zijn op zoek naar de benodigde operators.
  6. Wij schrijven!

En het algoritme van het hoofdgedeelte van het programma is eenvoudig:

  1. We controleren cyclisch of er een leesbare byte in de com-poortbuffer zit, en zo ja, lezen deze uit.
  2. Als de ontvangen byte een regeleinde ("n") is, roepen we de zelfgeschreven ontledingsfunctie aan, zo niet, dan voegen we de ontvangen byte toe aan de aangemaakte variabele van het type String.
  3. Parseer ten slotte de string.

    In feite, sinds Praktisch gebruik van het ontleden van strings werkt niet voor mij, dan is deze functie alleen demonstratief van aard, waarbij de resulterende string wordt vergeleken met een constante string die al in het geheugen is geschreven. Dus, met behulp van de operator is gelijk aan, vergelijken we de ontvangen string met de geschreven string, en als de operator true retourneert, verlaat dan de handlerfunctie, zo niet, vergelijk met de volgende. Als de strings equivalent zijn, verlaat dan nogmaals de handlerfunctie en retourneer het resultaat. Welnu, zelfs als deze voorwaarde niet werkt, zullen we de functie nog steeds verlaten en zeggen dat de string niet correct is.

  4. Afhankelijk van het geaccepteerde resultaat met met schakelaar geval, kies degene die u wilt.
  5. We zetten de ontvangen string op nul zodat we deze later opnieuw kunnen verzamelen.

En tot slot, hier is de code:

#define led 13 String input_string = ""; const String Led_off = "schakel led uit"; const String Led_on = "schakel led aan"; bool led_running; void setup () (Serial.begin (9600);) void loop () (while (Serial.available ()> 0) (char c = Serial.read (); if (c == "n") (Serial. print ("Input_string is:"); Serial.println (input_string); switch (parse (input_string, Led_off, Led_on)) (case 10: led_running = false; Serial.println ("Uitschakelen is voltooid"); break; case 11: led_running = true; Serial.println ("Inschakelen is voltooid"); break; case 0: Serial.println ("ongeldige string"); break;) input_string = ""; digitalWrite (led, led_running);) else (input_string + = c;))) byte ontleden (String input_string, const String Led_off, const String Led_on) (if (input_string.equals (Led_off) == true) (return 10;) else if (input_string.equals (Led_on) == true) (retour 11;) else return 0;)

Dus, ik begrijp het niet, wat voor soort bedrijf? Waarom brandt de LED niet? Oh ja, hoe ben ik dit vergeten, je moet toevoegen aan de void setup:

PinMode (led, UITGANG);

P.S.: Het is belangrijk om de com-poortmonitor in de Arduino IDE in de "Nieuwe regel"-modus te zetten, omdat anders wordt de verzonden string niet gevolgd door zijn terminator "n".

P.P.S.: Ik ga niet deelnemen aan de holivar over het feit dat arduino nodig is, ik heb niets verkeerd gedaan tijdens het bestuderen van de basisprincipes van programmeren en algoritmisering.

P.P.P.S.: Als het artikel voldoende wordt geaccepteerd, zal ik het volgende schrijven over wat mij is overkomen met de verbetering van de functionaliteit van de parseerfunctie. Wel, met God! ...

Tekstreeksen kunnen op twee manieren worden gedeclareerd: u kunt het gegevenstype String gebruiken, dat sinds versie 0019 in de kern is opgenomen; ofwel declareren de string als een null-terminated char array. Deze pagina beschrijft de tweede methode. Zie de pagina String-object voor meer informatie over een String-object dat meer functionaliteit biedt ten koste van meer geheugen.

Voorbeelden van

Hieronder staan ​​voorbeelden van correcte tekenreeksdeclaraties.

Char Str1; char Str2 = ("a", "r", "d", "u", "i", "n", "o"); char Str3 = ("a", "r", "d", "u", "i", "n", "o", "char Str1; char Str2 = ("a "," r "," d "," u "," i "," n "," o "); char Str3 = ("a "," r "," d "," u "," i "," n "," o " , "\ 0"); char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino"; "); char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino";

Bewerkingen toegestaan ​​bij het declareren van tekenreeksen

  • Declareer een karakterarray zonder deze te initialiseren (Str1)
  • Declareer een karakterarray met één redundant element, de compiler zal het vereiste null-teken zelf toevoegen (Str2)
  • Null-teken expliciet toevoegen (Str3)
  • Initialiseer de array met behulp van een stringconstante tussen aanhalingstekens; de compiler maakt een array van de vereiste grootte met een null-teken aan het einde (Str4)
  • Initialiseer een array met behulp van een stringconstante, waarbij de grootte expliciet wordt gespecificeerd (Str5)
  • Initialiseer een te grote array, zodat er ruimte overblijft voor langere strings (Str6)

Null beëindigend karakter

Meestal zijn alle strings null-beëindigd (ASCII-code 0), waardoor functies (zoals Serieafdruk ()) bepaal de lengte van de string. Zonder dit teken zouden ze sequentieel geheugenbytes blijven lezen die in feite geen deel meer uitmaken van de string.

Kort gezegd betekent dit dat uw string 1 teken langer moet zijn dan de tekst die u erin wilt opslaan. Daarom moeten Str2 en Str5 8 tekens lang zijn, ondanks het feit dat het woord "arduino" slechts 7 is - de laatste positie wordt automatisch gevuld met een null-teken. De grootte van Str4 wordt automatisch 8 - één teken is vereist voor een afsluitende nul. In regel Str3 hebben we onafhankelijk een null-teken gespecificeerd (aangegeven met "\ 0").

Merk op dat u in het algemeen een string kunt declareren zonder een afsluitend null-teken (bijvoorbeeld als u de lengte van Str2 instelt op 7, niet op 8). Hierdoor zullen de meeste stringfuncties echter onbruikbaar worden, dus u moet dit niet opzettelijk doen. Deze fout kan vreemd gedrag of het verschijnen van tekens van derden veroorzaken bij het werken met tekenreeksen.

Enkele of dubbele aanhalingstekens?

Tekenreeksen worden altijd aangegeven tussen dubbele aanhalingstekens ("Abc") en tekens worden altijd aangegeven tussen enkele aanhalingstekens ("A").

Lange lijnen inpakken

Lange lijnen kunnen als volgt worden ingepakt:

Char myString = "Dit is de eerste regel" "dit is de tweede regel" "etcetera";

Reeksen strings

Bij het werken met grote hoeveelheden tekst (bijvoorbeeld in projecten die met een LCD-scherm werken), is het vaak handig om arrays van strings te gebruiken. Aangezien strings zelf arrays zijn, is dit eigenlijk een voorbeeld van een tweedimensionale array.

In het volgende programma geeft de asterisk na het gegevenstype char "char *" aan dat de variabele een array van "pointers" is. Alle arraynamen zijn eigenlijk pointers, dus de asterisk is vereist om een ​​array van arrays te maken. Pointers in C zijn een van de moeilijkste dingen voor beginners, maar in dit geval hoef je geen diepgaand begrip van pointers te hebben om ze effectief te kunnen gebruiken.

Voorbeeld

char * myStrings = ("Dit is tekenreeks 1", "Dit is tekenreeks 2", "Dit is tekenreeks 3", "Dit is tekenreeks 4", "Dit is tekenreeks 5", "Dit is tekenreeks 6"); void setup () (Serial.begin (9600);) void loop () (for (int i = 0; i< 6; i++){ Serial.println(myStrings[i]); delay(500); } }