Con il piccolo tutorial di oggi vi mostrerò come è possibile, utilizzando un solo PIN analogico di Arduino, leggere la posizione di un interruttore a tre posizioni.
Un interruttore a tre posizioni (a volte definito ON-OFF-ON o SPTT) presenta 3 PIN: il comune (centrale) e i due di uscita. Quando la levetta è in alto o in basso, il PIN comune è connesso ad uno dei due PIN di uscita; quando la levetta è in posizione centrale, il PIN comune non è connesso a nulla.
Utilizzando due sole resistenze, possiamo leggere la posizione della levetta con un PIN analogico di Arduino:
Per capire il significato dello schema sopra riportato, verifichiamo cosa succede nelle tre posizioni della levetta:
- quando la levetta è in posizione centrale (2), il PIN AN0 è collegato a 5V tramite R1 (pull-up): il valore letto da Arduino sarà circa 1023
- quando la levetta è in alto (3), il PIN AN0 è collegato al centro di un partitore resistivo formato da R1 ed R2. Essendo le due resistenze di pari valore, la tensione vista da AN0 sarà circa 2.5V e quindi il valore letto da Arduino sarà circa 512
- quando la levetta è in basso (1), il PIN AN0 è collegato direttamente a massa; il valore letto da Arduino sarà circa 0.
Lo sketch sarà allora molto semplice:
#define BUTTON_PIN A0 int previousState; void setup() { Serial.begin(9600); previousState = 0; } void loop() { int analogValue = analogRead(BUTTON_PIN); int actualState; if(analogValue < 100) actualState = 1; else if(analogValue < 900) actualState = 3; else actualState = 2; if(previousState != actualState) { previousState = actualState; Serial.print("Button state: "); Serial.println(actualState); } } |
Lo sketch utilizza una soglia di tolleranza sui valori letti.
Demo
Vista la semplicità del circuito, l’ho realizzato su una millefori: