Arduino

smartlight - Accendere un led dalla porta seriale

Con questo articolo cominciamo un percorso che ci porterà alla scrittura di un semplice sistema (in quanto useremo un programma che da computer comunicherà con Arduino) per gestire un led tramite la porta seriale.

Battezziamo il programma come SmartLight (maccheronicamente luce intelligente) in quanto interagirà con l'ambiente tramite una fotoresistenza (per chi non sapesse di cosa stiamo parlando, Wikipedia insegna).

In questo primo articolo vedremo come creare il circuito e come interfacciarci con Arduino tramite la porta seriale.

Lo sketch

L'intestazione dello sketch è molto semplice. Dobbiamo specificare innanzitutto la posizione del LED, poi alcune costanti per riconoscere il segnale che invieremo tramite la porta seriale, ed infine delle variabili FLAG per constatare lo stato di alcuni procedimenti che chiariremo a breve.

int ledPin = 12; 
int letto;

const int acceso = 'a';
const int spento = 's';
const int crepuscolare = 'c';

int luce;
int stato;

Nel setup dobbiamo invece impostare il pin in uscita del LED ed inizializzare la porta seriale, ovvero il ponte che permetterà la comunicazione tra il computer e l'Arduino. La terza funzione è un semplice esempio di come sia possibile far "scrivere" ad Arduino qualcosa dalla porta seriale.

void setup() {

pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Devi aprirmi per potermi usare, bravo!");

}

Arriviamo finalmente al corpo del programma. Facciamo allora un piccolo brain storming.

Cosa deve fare questo programma? 
Deve leggere un dato (che passeremo come numero) e reagire di conseguenza. Utilizzeremo quindi uno switch.

Come posso leggere dei dati in entrata?
C'è una funzione apposta, Serial.read().

Bhè, ma allora è tutto super semplice!
Il programma legge i dati in entrata e ne memorizza il valore nella variabile letto. Dopo controlla se il valore letto (l'ovvio gioco di parole ci dimostra l'importanza dei nomi delle variabili nella programmazione) corrisponde a quello memorizzato nella variabile stato (che rappresenta la precedente impostazione del sistema). In questo caso non fa nulla.
In caso contrario deve selezionare il caso specifico e impostare il nuovo valore di stato (che sarà il metro di confronto del successivo controllo). Pensiamo al caso in cui impostiamo l'accensione crepuscolare.  L'unica difficoltà in più è quella di leggere il valore della fotoresistenza, controllare se esso supera un valore stabilito e quindi accendere o spegnere il LED.

void loop() 
{

letto = Serial.read();

if ( (letto != spento) && (letto!=acceso) && (letto!=crepuscolare) ) letto = stato;

stato = letto ;

switch(letto) {

case acceso:

digitalWrite(ledPin, HIGH);

break;

case spento:

digitalWrite(ledPin, LOW);

break;

case crepuscolare:

luce = analogRead(0);
if (luce<200) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW); 
delay(10); 

break;

  }
 }
}

Siamo pronti per partire. Come possiamo interagire allora con Arduino? Dopo aver caricato il programma, basta cliccare in alto a destra sul pulsate Monitor seriale. Si aprirà una finestra all'interno della quale è possibile "parlare con" Arduino.

Dovrebbe quindi comparire il messaggio impostato nel setup. Ora, poiché qui non siamo maleducati, rispondiamogli con una delle tre lettere che abbiamo impostato l'intestazione, che corrispondono alle azioni stabilite.

Commenti