4x4 Keypad Teil 2 - AZ-Delivery

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 :-)

 

Produktvorstellungen

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione