Serial input 1

Doel:

  • verwerken van seriële input-commando's met een numeriek argument

nodig:

  • LED met serieweerstand (220 Ohm, rood-rood-bruin)

Voorkennis:

  • Serial input 0

In deze opdracht verwerken we iets complexere commando's van de seriële input: een letterteken gevolgd door een getal (numeriek argument). Hiermee kun je via de Seriële Monitor commando's  geven aan de Arduino.

Omdat een commando nu uit meerdere tekens bestaat, moeten we de tekens eerst verwerken totdat we een compleet commando hebben: dan pas kunnen we die uitvoeren.

Schakeling

Verbind de anode (+) van de LED met Arduino pin 12; de kathode via de serieweerstand naar Arduino GND (0V).

...

char cmd = NULL; // empty command

int arg;

void processSerialInput(char ch) {

   ... // bepaal cmd en arg

}

void setup() {

  Serial.begin(9600);

  Serial.println("Serial input-1");

}

void loop() {

  if (Serial.available()) {

    char ch = Serial.read();

    processSerialInput(ch);

    Serial.print(ch);

  }

  switch (cmd) {

    case 'a':

    case 'b':

    case 'c':

        Serial.print(">");

        Serial.print(cmd);

        Serial.println(arg);

        break;

  default: ; // ignore other cmd's

  }

  cmd = NULL;  // empty command

}

In het deel

if (Serial.available()) {...}

verwerken we de invoertekens totdat we een compleet commando hebben. Dit bouwen we teken voor teken op.

Als we een compleet commando hebben, krijgt de variabele cmd de waarde van dit commando; arg heeft dan de waarde van het bijbehorende argument (een getal).

In het deel

switch (cmd) {....}

voeren we het commando uit. In dit testprogramma bestaat dit alleen uit het afdrukken van het commando met het bijbehorende argument.

Opdracht 1

Open de Seriële Monitor (baud rate 9600); je kunt nu via het input-venster bovenin commando's geven voor de Arduino. De Seriële Monitor moet niet ingesteld staan voor "geen regeleinde". (rechts onderin).

Test het programma met verschillende soorten invoer. Als je een commando a, b of c geeft, eventueel gevolgd door een getal, wordt dit als commando herkend. Dit wordt afgedrukt via de Serial Monitor.

NB: de regel met de opdracht(en) wordt pas naar de Arduino verstuurd na een "Return" of na het activeren van de "Verstuur"-knop.

  • wat gebeurt er als je meerdere opdrachten op een regel geeft?

Opdracht 2

Gebruik het bovenstaande programma om een LED aan te sturen: het commando  'a' gevolgd door een getal (0..255) gebruik je om de lichtsterkte van de LED in te stellen, met behulp van analogWrite (PWM).

Bedenk zelf een ander gebruik van dit soort opdrachten.

Arduino lessen Serial input-1     --