Ciao a tutti,
sto imparando solo adesso ad utilizzare Arduino, ho fatto un circuito con un display e vorrei che, dati alcuni ingressi/uscite, il display rilasciasse alcune scritte.
Ad esempio vorrei che sul pin 8 quando attivo un segnale +5v mi scrivesse per ipotesi "ON" e quando lo lo tolgo (l'ingresso diventa 0), comparisse la scritta "OFF".
Fino ad adesso sono riuscito in questo ma ho un piccolo problema, se inserisco un alimentazione +5 la scritta "ON" compare, ma appena la tolgo (attenzione, nel mio test sfilo semplicemente il cavetto che porta i +5V) la scritta "OFF" compare solo dopo circa 30 sec.
Come posso fare per far si che compaia immediatamente alla rimozione dei 5V?
Mi espongo un po, e faccio l'indovino, visto che le informazioni sono scarse.
Pin definite come entrate collegate a niente hanno uno stato casuale dato dai disturbi in giro. Devi collegare una resistenza intorno ai 10k-100kOhm tra pin e massa.
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define LED 13 // Retroilluminazione display 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
#define VKEY 8 // pin di input 8 ricevitore v-key
int val = 0; // val per conservare lo stato del pin di input
int vecchio_val = 0; // vecchio_val per conservare lo stato del pin di input al passo precedente
int stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
int valKey = 0;
void setup() {
// set up LCD
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Trasponder");
lcd.setCursor(0, 1);
lcd.print("KEY ON");
pinMode(LED, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
pinMode(VKEY, INPUT); // imposta il pin digitale come input
}
void loop() {
valKey = digitalRead(VKEY);
lcd.home();
lcd.print("Trasponder");
lcd.setCursor(0, 1);
if (valKey == HIGH){
lcd.print("KEY ON");
}
else {
lcd.print("KEY OFF");
}
val = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
// controlla se è accaduto qualcosa
if ((val == HIGH) && (vecchio_val == LOW)){
stato = 1 - stato;
}
vecchio_val = val; // ricordiamo il valore precedente di val
if (stato == 1) {
digitalWrite(LED, HIGH); // accende il led
}
else {
digitalWrite(LED, LOW); //spegne il led
}
}
Consideriamo che ho un pulsante per la retroilluminazione del display e quello funziona.
I problemi che ho adesso sono due:
il primo, che avevo già accennato, è quello del ritardo della lettura del pin 8 in "KEY OFF" quando tolgo il +5V, il secondo problema è sul display, quando va in ""KEY ON" vedo anche la "F" finale del precedente "KEY OFF" (per capirci la scritta è "KEY ONF").
uwefed:
Mi espongo un po, e faccio l'indovino, visto che le informazioni sono scarse.
Pin definite come entrate collegate a niente hanno uno stato casuale dato dai disturbi in giro. Devi collegare una resistenza intorno ai 10k-100kOhm tra pin e massa.
Ciao Uwe
Non ci crederai ma ci avevo pensato, infatti sul led l'ho messo e funziona... Provo e ti faccio sapere.
@angelkid: in conformità al regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.
angelkid:
Non ci crederai ma ci avevo pensato, infatti sul led l'ho messo e funziona... Provo e ti faccio sapere.
Grazie.
Ok, problema risolto, era solo la resistenza.
Rimane solo il problema del display, in "KEY ON" leggo "KEY ONF", chiaramente potrei risolvere aggiungendo uno spazio "KEY ON ", ma è questa la soluzione corretta?
angelkid:
Rimane solo il problema del display, in "KEY ON" leggo "KEY ONF", chiaramente potrei risolvere aggiungendo uno spazio "KEY ON ", ma è questa la soluzione corretta?
Grazie.