Aggiornato il 08.04.2014
La volta scorsa vi ho descritto come collegare un display 16x2 ad Arduino, questa volta passiamo a cose più concrete come la gestione degli INPUT e degli OUTPUT.
I PIN 0 e 1 solitamente non vengono utilizzati nei collegamenti perché adibiti alla comunicazione seriale con il PC (USB) o un altro Arduino.
In basso a destra sono rappresentati con il colore celeste i 6 PIN analogici, utilizzabili in ingresso con una risoluzione di 2^10 (1024) e in potenza con un risoluzione di 2^8 (256).
I/0 DIGITALE.
Nella figura sottostante è raffigurato un semplice collegamento che permette di accendere un led mediante un pulsante.
In entrambi i componenti è presente una resistenza: nel caso del LED dobbiamo limitare la corrente a 10mA, quindi andremo ad utilizzare una resistenza di 330Ω = (5V-2V)/0,01A.
Nel caso dell'ingresso, invece, dobbiamo proteggere ARDUINO; l'amperaggio massimo consentito è di 40mA ma la guida ufficiale consiglia di utilizzare una resistenza di 470Ω quindi con i 10mA che otteniamo stiamo su una soglia decisamente più sicura. Per la cronaca è possibile attivare le resistenze interne di ARDUINO via software, cosa che io non ho voluto fare. Detto ciò passiamo allo scketch presente tra i file di esempio dell'IDE. Controlliamo l'accensione del LED mediante il PIN 13 e leggiamo lo stato del pulsante tramite il PIN 3. Lo stato del pulsante dipende ovviamente dal fatto se è normalmente aperto o chiuso e dalla resistenza applicata. Vi consiglio di fare delle prove per capire cosa sta leggendo ARDUINO e quindi eventualmente modificare resistenze o codice.
const int buttonPin = 2; // il numero del PIN del tasto
const int ledPin = 13; // il numero del PIN del LED
int buttonState = 0; // variabile che assumerà il valore letto dal PIN del tasto
void setup() {
// inizializzo il PIN del LED indicando il numero e che si tratta di un'uscita:
pinMode(ledPin, OUTPUT);
// inizializzo il PIN del Tasto indicando il numero e che si tratta di un ingresso:
pinMode(buttonPin, INPUT);
}
void loop(){
// a ogni ciclo leggo il valore del tasto:
buttonState = digitalRead(buttonPin);
// controllo se il tasto è premuto.
// se lo stato è HIGH:
if (buttonState == HIGH) {
// accendo il LED:
digitalWrite(ledPin, HIGH);
}
// altrimenti:
else {
// spengo il LED:
digitalWrite(ledPin, LOW);
}
}
I/0 ANALOGICO.
Il procedimento è simile a quello precedentemente descritto, la differenza sta nei comandi e sul fatto che in lettura avremo un valore intero che va da 0-1023 (step di 5V/1024) mentre in potenza da 0-255 (step di 5V/256).
Trattandosi di uscite/ingressi il valore massimo è sempre di 5V e il minimo di 0V.
Consiglio di dichiarare sempre all'inizio la variabile o costante del PIN dove il nostro elemento analogico verrà collegato (A0-A5).
Per la lettura è sufficiente utilizzare questo comando analogRead(PIN ); mentre per comandare l'uscita analogWrite(PIN, 0-255);
Di seguito un esempio in lettura tramite un potenziometro utilizzato come partitore di tensione:
Per quanto riguarda l'uscita in potenza potreste collegare un LED e, superata la tensione di giunzione, modificarne la luminosità.
Bundì Marco, ho provato a realizzare questo semplice schema che gestisce un led ( le basi sono essenziali per comprendere il resto ). Ho modificato lo sketch per ottenere l'effetto inverso,( LED NORMALMENTE ACCESO e quando premo il pullsante si spegne).
RispondiEliminaPer quanto riguarda la gestione degli I/0 ANALOGICI, pubblicare uno schema semplice sarebbe di grande aiuto.
Grazie
Ciao Nick, hai ragione... Speravo di asciugarmela con poco visto che avevo poco tempo. Dammi qualche giorno e integro ;)
EliminaNo problem Marco, il tempo è sempre troppo poco x le cose che piacciono.
RispondiEliminaOra sto provando con il display, ne avevo giusto uno. Metto un potenziometro X per provare.
Utilizza il potenziometro come partitore di tensione.
RispondiElimina