4x4 Teclado Teil 2

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:

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

 

Produktvorstellungen

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas