Salve, con questo codice, vorrei poter visualizzare un messaggio ogni volta che premo il pulsante oltre all’ accensione del led.
Adopero un pulsante ed ad ogni pressione accendo il led sucessivo.
Al momento ottengo accensione e spegnimemto dei led quando premo il pulsante, ma non visualizzo la scritta sul display GLCD. Per cortesia mi dite dove sbaglio?
Per non pasticciare troppo il codice la parola lo inserita solo nel primo case.
Grazie Guido.
// il programma conta quante volte il pulsante viene premuto, per un ciclo di 3 pressioni,
// ad ogni pressione del pulsante si accende un led per volta
// Il controllo del numero di volte in cui il pulsante viene premuto viene fatto con l'istruzione "case"
#define BUTTON 7 // pin di input a cui è collegato il pulsante
#define LED1 22 // LED collegato al pin digitale
#define LED2 24 // LED collegato al pin digitale
#define LED3 26 // LED collegato al pin digitale
// Variabili
int ContatorePulsantePremuto = 0; // conta il numero di volte che il pulsante è premuto buttonPushCounter
int StatoPulsante = 0; // stato corrente del pulsante
int StatoPulsantePrecedente = 0; // stato precedente del pulsante
int i = 0; // variabile per conteggio spike
#include "U8glib.h" // Includere questa libreria nella cartella libraries di Arduino.
U8GLIB_ST7920_128X64_1X u8g(13, 11, 10); // SPI Com: e=13,rw=11,rs=10 //pin su Arduino Mega per il mio display.
void setup() {
pinMode(BUTTON, INPUT); // imposta il pin digitale come output
pinMode(LED1, OUTPUT); // imposta il pin digitale come input
pinMode(LED2, OUTPUT); // imposta il pin digitale come input
pinMode(LED3, OUTPUT); // imposta il pin digitale come input
}
void draw() {
StatoPulsante = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
if (StatoPulsante != StatoPulsantePrecedente) { // compara lo stato del pulsante attuale con il precedente
// Pausa che filtra gli spike
for (i=0;i<32000; i++) { //il ciclo for serve perche alla pressione del pulsante non salti al led sucessivo
}
if (StatoPulsante == HIGH) { // se lo stato è cambiato incrementa il contatore
// se lo stato corrente è alto, il pulsante è passato da off a on
ContatorePulsantePremuto++;
switch (ContatorePulsantePremuto) {
case 1: // controlla se il pulsante è stato premuto una volta
//Comandi per stampare la scritta.
u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(30, 35);
u8g.print("Ciao");
delay (1000);
digitalWrite(LED1, HIGH); // accende il LED
break;
case 2: // controlla se il pulsante è stato premuto due volte
digitalWrite(LED1, LOW); // accende il LED
digitalWrite(LED2, HIGH); // accende il LED
break;
case 3: // controlla se il pulsante è stato premuto tre volte
digitalWrite(LED2, LOW); // accende il LED
digitalWrite(LED3, HIGH); // accende il LED
break;
case 4: // controlla se il pulsante è stato premuto quattro volte
digitalWrite(LED3, LOW); // accende il LED
break;
}
}
}
// salva lo stato corrente nella variabile che indica lo stato precedente per il loop successivo
StatoPulsantePrecedente = StatoPulsante;
// controlla se il pulsante è stato premuto quattro volte se vero indica che è finito il ciclo
// il led lampeggia 2 volte per 50 millisecondi
// vengono inizializzate nuovamente le variabili
// si riavvia il ciclo
if (ContatorePulsantePremuto > 4) {
// inizializzazione delle variabili
ContatorePulsantePremuto = 0;
StatoPulsante = 0;
StatoPulsantePrecedente = 0;
}
}
void loop() {
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
delay(50);
}