En nuestro anterior Blog hemos demostrado cómo Teclado AZ-Delivery y asigna las 16 teclas correctamente. En nuestro siguiente ejemplo, queremos usar el teclado de forma creativa junto con un zumbador pasivo Imaginar. Seguimos el ejemplo Keypad_Piano en arduino.cc. Podemos descuidar la asignación de pines en este ejemplo porque se pueden asignar como se desea, pero mostramos una manera interesante de cambiar entre las frecuencias PWM almacenadas usando dos registros de desplazamiento de 8 bits usados como temporizador en el 328P.
Este proyecto está destinado a usuarios avanzados porque requiere un profundo conocimiento del 328P (temporizador y registro)
Para ello, necesitamos:
- AZ-Delivery Microkontoller, compatible con Arduino Uno R3
- Teclado Matrix 4x4
- módulo de zumbador pasivo
En primer lugar, conectamos los siguientes pines:
- Pin del teclado 1 - 8 an Uno Pin 2 - 9
- suministramos el zumbador con 5V y GND de la Uno y el pin marcado con "S" en el pin 11
Este es el aspecto de nuestro código:
Asignación de pines para el teclado #define c3 9 #define c2 8 #define c1 7 #define c0 6 #define r3 5 #define R2 4 #define r1 3 #define r0 2 Vacío Configuración() { Serial.Comenzar(9600); pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP); pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP); pinMode(r0,Salida); pinMode(r1,Salida); pinMode(R2,Salida); pinMode(r3,Salida); pinMode(11,Salida); para nuestro módulo Buzzer } Vacío Bucle(){ digitalWrite(r0,Bajo); digitalWrite(r1,Alto); digitalWrite(R2,Alto); digitalWrite(r3,Alto); Si(digitalRead(c0)==Bajo){ TCCR2A = B01000011; Asignación de frecuencia TCCR2B = B00001110; tiene lugar aquí OCR2A=119; utilizando el registro y la frecuencia del reloj Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c1)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=106; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c2)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=94; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c3)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=89; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} digitalWrite(r0,Alto); digitalWrite(r1,Bajo); digitalWrite(R2,Alto); digitalWrite(r3,Alto); Si(digitalRead(c0)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=79; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c1)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=71; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c2)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=63; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c3)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=59; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} digitalWrite(r0,Alto); digitalWrite(r1,Alto); digitalWrite(R2,Bajo); digitalWrite(r3,Alto); Si(digitalRead(c0)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=25; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c1)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=20; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si (digitalRead(c2)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=10; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c3)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=50; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} digitalWrite(r0,Alto); digitalWrite(r1,Alto); digitalWrite(R2,Alto); digitalWrite(r3,Bajo); Si(digitalRead(c0)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=50; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c1)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=50; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c2)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=50; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} Más Si(digitalRead(c3)==Bajo){ TCCR2A = B01000011; TCCR2B = B00001110; OCR2A=50; Retraso(100); TCCR2B=B00001000; TCCR2A = B0000000000; digitalWrite(11,Bajo);} } Usando la fórmula: Hz a 16MHz/prescalar/(OCRA+1)/2
Las frecuencias PWM de hasta 8MHz se pueden generar de esta manera
Diviértete haciendo artesanía y hasta la próxima vez :-)