12. Communicatie naar een terminal (beeldscherm en toetsenbord)

12. Communicatie naar een terminal (beeldscherm en toetsenbord)

Doel van deze Experience

Je gaat leren hoe je met je computer kunt communiceren met de Arduino. Dit ga je doen met de volgende instructies:

• Serial.begin()
• Serial.print()
• Serial.printIn()
• Serial.write()
• Serial.available()

Wat heb je nodig?

Arduino Uno

Theorie

De Arduino zit via de USB kabel aan de computer verbonden. Dit geeft de mogelijkheid om het programma wat we hebben gemaakt, de Sketch, naar de Arduino te versturen. We kunnen echter ook de output van de Arduino op het beeldscherm van de computer laten zien. In de Arduino software -> menu Tools / Serial Monitor.
We kunnen deze communicatie onder andere gebruiken voor;

  • Informatie op het scherm te tonen
  • Input geven via je toetsenbord

Informatie op het scherm
Er zijn diverse opdrachten die we kunnen gebruiken om informatie naar dit beeldscherm te sturen. Voordat we kunnen communiceren moeten we er eerst voor zorgen dat de computer en de Arduino elkaar begrijpen en op de zelfde snelheid communiceren. We noemen dit de baud rate, de overdrachtssnelheid van een seriële verbinding ofwel de hoeveelheid bits die per seconde via een serieel kanaal kan worden verzonden. Meer informatie hierover kun je hier vinden.

We zetten dit met een instructie op 9600. Dit hoeft maar één keer te worden ingesteld aan het begin van het programma.

void setup() {
Serial.begin(9600);
}

Als we dit zo instellen kunnen we beginnen met de communicatie. We gebruiken hiervoor de volgende instructies;

Serial.print()

Serial.println()

Deze twee instructies worden gebruikt om de informatie te versturen die op het beeldscherm moet worden weergegeven. Tussen de haakjes kan een getal, een tekst of de waarde van een variabele komen te staan. Je zult straks op het scherm zien dat bij het Serial.print() programma de waardes allemaal na elkaar komen. Wil je dit voorkomen, dan dien je na elke waarde een Line Feed te geven, het programma weet dan dat er een nieuwe regel begint. We doen dit met het commando Serial.println().

Serial.write()

Deze instructie kunnen we naar de terminal sturen. Het beeldscherm op je computer is de terminal. Het verschil is dat dit commando alleen door het Arduino programma wordt herkend en niet op het scherm wordt weer gegeven. Er is een volledige tabel van alle ASCII codes. Misschien ken je ze al van de computer. Het zou kunnen dat je deze ook in Word of een andere tekstverwerker al eens hebt gebruikt. Deze kun je oproepen via de Alt toets. We hebben deze tabel in de vorige Experience ook al gebruikt. Wil je nog meer uitleg van ASCII codes, kijk dan op deze pagina.

ascii
Stel, je wilt de hoofdletter N, dan kun je die krijgen door Alt en tegelijkertijd (zonder de alt los te laten) 78 in te toetsen. Voor normale tekens gebruik je dit niet op de computer, maar bijvoorbeeld wel voor speciale tekens. Wil je bijvoorbeeld aangeven hoe warm het is, dan gebruik je Alt-248 om het graden Celsius teken te krijgen. Om bijvoorbeeld 30°C op te schrijven.
Als je een overzichtelijke tabel op het scherm wilt tonen, dan kun je een extra Horizontale Tab geven met de code “9”.

We kunnen ook zelf op het scherm een ASCII tabel printen. We kunnen dit met het volgende programma:

/* Experience 12 Programma om de communicatie met het beeldscherm te demonstreren
*/
     int counTer; // hier definiëren we een teller

void setup() {
Serial.begin(9600);
Serial.print (“Decimal”);
Serial.write (9); // geeft een TAB
Serial.print (“Character”);
Serial.write (10); // zorgt ervoor dat het printen op de lijn onder het woord “Dec” begint.
}

void loop (){
for(int counTer=33;counTer<127;counTer++){
Serial.write(counTer);
Serial.write (9); // geeft een TAB
Serial.println(counTer);
delay(100);
}
while(1); // Dit commando zorg er voor dat het programma stopt na 1 keer.
}

Dit programma telt van 33 tot 127, we zullen in een latere Experience nog terugkomen hoe dit precies werkt. In deze loop (lus) die telkens opnieuw start worden de waarden op het scherm geprint.

Input geven via je toetsenbord

Aangezien de communicatie met het Terminal programma twee kanten opgaat, kunnen we ook iets invoeren in de Terminal en deze in het programma inlezen. We doen dit met twee instructies namelijk

Serial.available()
Serial.read()

De instructie Serial.available() gebruiken we om te kijken of er ongelezen informatie aanwezig is. De instructie Serial.read() gebruiken we om 1 byte aan informatie te ontvangen.

In onderstaand programma hebben we een variabele “enteredCharacter” die we in kunnen geven via het toetsenbord van de computer. Hierna print hij de “numerieke waarde” op het scherm. 

// this program return the numeric value from a entered character
// dit programma converteert een ingegeven karakter naar een numerieke waarde

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {
              // read the incoming byte:
if (Serial.available() > 0){
char enteredCharacter = Serial.read();
             //if receiving the char 10 this means a line feed which is added by the “Send” button so we need to skip that
if (enteredCharacter != 10){
            //you only arrive here if the entered character is not the send button
           //convert the char into an int data type
int enteredNumber = int(enteredCharacter);
// deze instructie maakt van het ASCII karakter een numerieke waarde.

Serial.print(“You sent: “);
Serial.println(enteredNumber);
}
}
}

Opdracht 1;

Maak een Sketch (programma) dat alle kleine letters van het alfabet direct na elkaar op het scherm plaatst. Kijk eerst in de ASCII tabel tussen welke waardes deze kleine letters zitten.

Opdracht 2;

Maak een programma waarbij je een getal tussen de 1 en 9 via het console intypt en waarbij het programma het “Tafel van” op het scherm print inclusief de antwoorden.
We typen bijvoorbeeld “3” in. We krijgen op het scherm:

1 x 3 = 3
2 x 3 = 6
3 x 3 = 9
enzovoorts.

Je zult tegen een aantal problemen oplopen, dit is echter niet erg. Probeer stap voor stap de problemen op te lossen en goed na te denken hoe het programma moet gaan werken. Kom je er niet uit, post dan je vraag op het forum.

tip

Als je het getal 3 intypt lees je dit decimaal in als “51 “. Je zult dus na het inlezen van de waarde een berekening moeten maken om aan het getal te komen dat is ingetypt.

 

 

 

Opdracht 3;

7 segment display

Maak een schakeling zoals in Experience 11 om de 7 segment LCD aan te sturen, inclusief de weerstanden. Als je de schakeling al had afgebroken, kun je deze met het programma van Experience 11 eerst testen, je weet dan zeker dat alles werkt en goed is aangesloten.

De opdracht is;

Maak nu een sketch, of pas de sketch van Experience 11 zo aan dat het getal dat je via de monitor / seriële console geeft (een getal tussen de 0 en 9) wordt weergegeven op het 7 segment display.

Je moet dus bij het inlezen van de waarde eerst checken of hij voldoet en gelijk is aan een getal tussen de 0 en 9. Als hij hier niet aan voldoet kun je bijvoorbeeld alleen het middelste streepje aansturen, als gebruiker een melding dat de input niet correct is.

Wil je het uitbreiden dan kun je ook nog een melding terug geven “uw input moet een getal tussen de 0 en 9 zijn, uw input voldoet hier niet aan”. Zo kun je communiceren met de gebruiker dat hij echt een cijfer in moet toetsen.

Wat heb je deze Experience geleerd;

  • Hoe je met de Arduino kunt communiceren via je eigen beeldscherm en input en output kunt geven

Wat heb je geleerd?

Je weet nu wat je allemaal met de Terminal kunt doen en hoe je de verschillende instructies gebruikt. Als het goed is heb je zelf ook veel geëxperimenteerd en heb je zo ontdekt wat je wel en niet kunt doen met deze instructies.

TestenStatus

Een reactie plaatsen