Nel nostro precedente Blog (in lingua) abbiamo mostrato come Tastiera di consegna A A e assegna correttamente i 16 tasti. Nel nostro prossimo esempio, vogliamo usare la tastiera in modo creativo insieme a un buzzer passivo Immaginare. Seguiamo l'esempio Keypad_Piano arduino.cc. Possiamo trascurare l'assegnazione del pin in questo esempio perché possono essere mappati come desiderato, ma mostriamo un modo interessante per passare tra le frequenze PWM memorizzate utilizzando due registri di spostamento a 8 bit utilizzati come timer nel 328P.
Questo progetto è destinato agli utenti avanzati perché richiede una profonda conoscenza del 328P (timer & register)
Per fare questo, abbiamo bisogno di:
In primo luogo, colleghiamo i seguenti pin:
- Tastiera Pin 1 - 8 un Uno Pin 2 - 9
- forniamo il cicalino con 5V e GND dal Uno e il perno contrassegnato con "S" sul pin 11
Ecco l'aspetto del codice:Here's what our code looks like:
Assegnazione di pin per la tastiera # define c3 9 # define c2 (in questo modo) 8 # define c1 7 # define c0 (c0) 6 # define r3 5 # define R2 4 # define r11 3 # define r0 2 Vuoto Installazione() { Seriale.Iniziare(9600); PinMode (Modalità pin)(c0 (c0),INPUT_PULLUP); PinMode (Modalità pin)(c1,INPUT_PULLUP); PinMode (Modalità pin)(c2 (in questo modo),INPUT_PULLUP); PinMode (Modalità pin)(c3,INPUT_PULLUP); PinMode (Modalità pin)(r0,Output); PinMode (Modalità pin)(r11,Output); PinMode (Modalità pin)(R2,Output); PinMode (Modalità pin)(r3,Output); PinMode (Modalità pin)(11,Output); per il nostro modulo Buzzer } Vuoto Ciclo(){ digitalWrite (Scrittura digitale)(r0,Basso); digitalWrite (Scrittura digitale)(r11,alto); digitalWrite (Scrittura digitale)(R2,alto); digitalWrite (Scrittura digitale)(r3,alto); Se(digitalRead (Lettura digitale)(c0 (c0))==Basso){ TCCR2A = B01000011; Assegnazione di frequenza TCCR2B = B00001110 (in questo; si svolge qui OCR2A=119; utilizzando il registro e la frequenza di clock Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c1)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=106; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c2 (in questo modo))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=94; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c3)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=89; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} digitalWrite (Scrittura digitale)(r0,alto); digitalWrite (Scrittura digitale)(r11,Basso); digitalWrite (Scrittura digitale)(R2,alto); digitalWrite (Scrittura digitale)(r3,alto); Se(digitalRead (Lettura digitale)(c0 (c0))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=79; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c1)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=71; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c2 (in questo modo))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=63; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c3)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=59; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} digitalWrite (Scrittura digitale)(r0,alto); digitalWrite (Scrittura digitale)(r11,alto); digitalWrite (Scrittura digitale)(R2,Basso); digitalWrite (Scrittura digitale)(r3,alto); Se(digitalRead (Lettura digitale)(c0 (c0))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=25; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c1)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=20; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se (digitalRead (Lettura digitale)(c2 (in questo modo))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=10; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c3)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=50; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} digitalWrite (Scrittura digitale)(r0,alto); digitalWrite (Scrittura digitale)(r11,alto); digitalWrite (Scrittura digitale)(R2,alto); digitalWrite (Scrittura digitale)(r3,Basso); Se(digitalRead (Lettura digitale)(c0 (c0))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=50; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c1)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=50; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c2 (in questo modo))==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=50; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} Altro Se(digitalRead (Lettura digitale)(c3)==Basso){ TCCR2A = B01000011; TCCR2B = B00001110 (in questo; OCR2A=50; Ritardo(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite (Scrittura digitale)(11,Basso);} } Utilizzando la formula: Hz 16MHz/prescalare/(OCRA-1)/2
Frequenze PWM fino a 8MHz possono essere generate in questo modo
Divertiti a creare e fino alla prossima volta :-)