Pilotaggio di Arduino tramite tastiera

laboratorio
Pilotaggio di Arduino tramite tastiera
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 2
Avanzamento Avanzamento: laboratorio completa al 100%.

Questo progetto permette di comandare un led collegato ad Arduino tramite la tastiera del computer. Il funzionamento è elementare ma consente di capire come la porta seriale comunichi con la scheda Arduino.

Descrizione del progettoModifica

Il sistema è composto da un led si accende e spegne tramite opportuni comandi provenienti dal computer.

Legenda
Comando Azione
a Accende il led
s Spegne il led

Nel caso si scriva una qualsiasi altra lettera il sistema la ignora: infatti, viene specificato nel codice di cancellare ogni dato differente da quelli in tabella.

Schema di montaggioModifica

Lo schema di montaggio, naturalmente, è molto semplice. Da sottolineare che - avendo collegato il led al pin 13 - si accenderà anche il led incorporato sulla scheda.

Inoltre - all'avvio del codice - il led lampeggerà più volte per via dei dati inviati dal computer ad Arduino. Pure il led Rx (corrispondente alla ricezione dati dalla porta seriale) lampeggerà ogni volta che verrà premuto un tasto.

CodiceModifica

Inizialmente vengono definite tutte le costanti e le variabili

#define led 13
#define bitrate 9600
const char keyOn  = 'a';
const char keyOff = 's';
char tastiera;

Nel setup si specifica quale pin viene usato come uscita per controllare il led, si imposta la comunicazione seriale e la sua velocità di trasmissione.

void setup() {
  Serial.begin(bitrate);
  pinMode(led, OUTPUT);
}

Nel corpo del programma si specifica che - se la variabile tastiera - contiene la lettera a il led viene acceso, se contiene la lettera s il led viene spento.

Mentre se si preme un qualsiasi altro tasto (o sequenza di tasti) il flusso di dati viene ignorato.

void loop() {
  tastiera = Serial.read();
  switch(tastiera){
    case keyOn:
      digitalWrite(led, HIGH);
      break;
    case keyOff:
      digitalWrite(led, LOW);
      break;
    default:
      Serial.flush();
      break;
  }
}

Decodifica di un testo nel suo codice ASCIIModifica

Di seguito viene mostrato un codice che quando riceve un messaggio dal monitor seriale dell'IDE di Arduino, restituisce i codici ASCII dei caratteri contenuti.

int ByteRicevuto = 0; // Per i dati seriali acquisiti

void setup() {
  Serial.begin(9600); // Inizializza la porta seriale, imposta il bitrate a 9600 bps
}

void loop() {
  // Trasferisce dati solo quando li riceve
  if (Serial.available() > 0) {
    // legge il byte ricevuto
    ByteRicevuto = Serial.read();
    // Trasmette quello che ha ricevuto
    Serial.print("Ho ricevuto: ");
    Serial.println(ByteRicevuto, DEC);
  }
}

Espansioni suggeriteModifica

È possibile controllare più led (o altri dispositivi) e inviare anche dati da Arduino al computer (tramite appositi sensori) come pulsanti o altro.