Shield Arduino con controllo motore DC (PWM), misura della velocità con encoder e visualizzazione su display LCD.
// pin col segnale rettangolare dell'encoder (TTL 0-5 Volt squadrato con porta NOT triggerata) int encoder = 2; // variabile globale che conta gli impulsi dell'encoder volatile unsigned int contatore = 0; // velocità in giri al minuto int vel; // risoluzione in impulsi per giro int risoluzione = 72; // tempo trascorso dall'avvio unsigned long tempoTrascorso; // tempo dell'ultimo azzeramento del contatore unsigned long tempoReset = 0; void setup() { // pin encoder impostato come input pinMode(encoder, INPUT_PULLUP); // imposto l'interrupt sul pin dell'encoder e assegno la funzione da chiamare // quando è presente un fronte di salita attachInterrupt(digitalPinToInterrupt(encoder), incrementa, RISING); // comunicazione seriale col PC per il debug Serial.begin(9600); } void loop() { // ogni secondo tempoTrascorso = millis(); if((tempoTrascorso - tempoReset) > 1000){ // reimposto tempoReset tempoReset = tempoTrascorso; // calcolo la velocità vel = (contatore * 60) / risoluzione; Serial.print("velocita': "); Serial.print(vel); Serial.println(" giri/min"); // azzero il contatore contatore = 0; } } // funzione che incrementa il contatore ad ogni interrupt void incrementa() { contatore += 1; }