Sommario:

Tastiera a un pin 4×4: 10 passaggi
Tastiera a un pin 4×4: 10 passaggi

Video: Tastiera a un pin 4×4: 10 passaggi

Video: Tastiera a un pin 4×4: 10 passaggi
Video: Aggiungiamo un tastierino numerico allo Shelly 1 per un apri-porta con PIN 2024, Dicembre
Anonim
Tastiera a un pin 4×4
Tastiera a un pin 4×4

Ogni volta che vedo una tastiera, viene fornita con molti pin, è un grande spreco dei tuoi pin Arduino, quindi possiamo eseguire una tastiera con uno e un solo pin?. La risposta è qui.

Passaggio 1: Distinta base

Distinta materiali
Distinta materiali

Hardware:

01 Arduino UNO

02 taglieri

01 LCD con I2C

16 pulsanti

04 resistenze 1,5 kΩ

04 resistenze 620 Ω

04 resistenze 220 Ω

08 resistenze 100 Ω

01 resistenza 1 kΩ

07 Ponticelli

Software:

Arduino IDE installato sul tuo PC

Fase 2: Schema e Cicruit

Schema e Cicruit
Schema e Cicruit
Schema e Cicruit
Schema e Cicruit

L'idea generale è che abbiamo una matrice 4*4 di pulsanti collegati verticalmente a terra dal cavo destro e orizzontalmente dall'altro cavo (il cavo del pulsante) e resistori da 1,5 kΩ, 620Ω, 220Ω e 100Ω, le estremità di le 4 righe sono collegate da quattro resistori da 100Ω come mostrato nello schema.

Ogni volta che si preme un pulsante si chiude il circuito e la corrente attraversa un percorso diverso e una catena di resistori diversa, ecco perché il pin A0 riceve una lettura analogica diversa per ogni pulsante. Tutto ciò di cui hai bisogno ora è codificare.

Passaggio 3: il codice

#includere

#includere

LiquidCrystal_I2C lcd(0x3f, 20, 4);

int Pulsante = A0;

int valore di lettura;

configurazione nulla()

{

Serial.begin(9600);

lcd.begin();

pinMode(Pulsante, INGRESSO);

lcd.backlight();

lcd.print("Ciao mondo");

ritardo (2000);

lcd.clear();

lcd.print("Tastiera a un pin 4*4");

ritardo (2000); }

ciclo vuoto()

{

readvalue = analogRead(Button);

Serial.println(readvalue);

if (readvalue==852){lcd.clear();lcd.print("A");}

else{ if (readvalue==763){lcd.clear();lcd.print("B");}

else{ if (readvalue==685){lcd.clear();lcd.print("C");}

else{ if (readvalue==965){lcd.clear();lcd.print("D");}

else{ if (readvalue==565){lcd.clear();lcd.print("9");}

else{ if (readvalue==614){lcd.clear();lcd.print("6");}

else{ if (readvalue==360){lcd.clear();lcd.print("3");}

else{ if (readvalue==335){lcd.clear();lcd.print("#");}

else{ if (readvalue==396){lcd.clear();lcd.print("8");}

else{ if (readvalue==349){lcd.clear();lcd.print("5");}

else{ if (readvalue==235){lcd.clear();lcd.print("2");}

else{ if (readvalue==279){lcd.clear();lcd.print("0");}

else{ if (readvalue==452){lcd.clear();lcd.print("7");}

else{ if (readvalue==271){lcd.clear();lcd.print("4");}

else{ if (readvalue==170){lcd.clear();lcd.print("1");}

else{ if (readvalue==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}} }

Passaggio 4: correzione dei valori

Correzione dei valori
Correzione dei valori

Quando apri il monitor seriale mostrerà un valore di 1023, se premi un pulsante ti darà un'altra lettura devi prendere quei valori e apportare alcune modifiche al codice

Passaggio 5: progetto dopo critiche e revisioni

Progetto dopo la critica e la revisione
Progetto dopo la critica e la revisione

Non c'è dubbio che siamo tutti qui per imparare e condividere le nostre conoscenze, grazie ad alcuni commenti lasciati da alcune persone della community che sono stati molto utili, ho deciso di apportare alcune modifiche e miglioramenti al mio progetto:

L'hardware:

Ho deciso di saldare tutti i componenti in un PCB per evitare il problema della cattiva connessione nelle breadboard.

Il codice:

Un amico mi ha consigliato di usare un software antirimbalzo ed è solo un ciclo (ciclo "for" per esempio) per far impiegare del tempo al programma per scegliere una lettura, significa che fa molte letture (500 nel mio esempio) ma richiede solo l'ultimo.

for (i=1; i<= 500; i++) { // prendi solo il 500esimo analogread

value = analogRead(Button);} // questo aiuta a prendersi un po' di tempo ed evitare letture errate

Un altro amico grazie a lui mi ha consigliato di confrontare "readvalue" con un intervallo di valori non uno perché "readvalue" prende molti valori per lo stesso pulsante. La "A" ad esempio dà una lettura di: 849, 850, 851 852, 853, 854, 855 quindi è un intervallo di 7 valori: una soglia (852) e 3 valori a sinistra e a destra. quello che dobbiamo fare qui è confrontare il valore assoluto della differenza tra "readvalue" e "852" con "3".

if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}

Passaggio 6: dopo alcuni lavori di saldatura

Dopo alcuni lavori di saldatura
Dopo alcuni lavori di saldatura
Dopo alcuni lavori di saldatura
Dopo alcuni lavori di saldatura
Dopo alcuni lavori di saldatura
Dopo alcuni lavori di saldatura

Passaggio 7: il momento della verità

Come puoi vedere il programma a volte confonde i pulsanti ma funziona ancora, in teoria non c'è niente che non va con il circuito ma il codice ha bisogno di più calibrazione.

Passaggio 8: la fine

Spero che questo progetto ti piaccia e che provi a farlo, forse farai meglio di me.

Chiedimi se hai domande, lascia commenti e non dimenticare di votarmi se ti piace.

Consigliato: