4x4 Keypad Teil 2 - AZ-Delivery

In onze vorige Blog we hebben laten zien hoe AZ-Delivery Toetsenbord en wijst de 16 toetsen correct toe. In ons volgende voorbeeld willen we het toetsenbord creatief gebruiken samen met een passieve zoemer Voorstellen. We volgen het voorbeeld Keypad_Piano arduino.cc. We kunnen de pintoewijzing in dit voorbeeld verwaarlozen omdat ze naar wens in kaart kunnen worden genomen, maar we laten een interessante manier zien om te schakelen tussen opgeslagen PWM-frequenties met behulp van twee 8-bits shiftregisters die als timer in de 328P worden gebruikt.

Dit project is bedoeld voor gevorderde gebruikers omdat het diepgaande kennis van de 328P (timer & register) vereist

Om dit te doen, hebben we:

Eerst verbinden we de volgende pinnen:

  • Toetsenbordpin 1 - 8 een Uno-pin 2 - 9
  • wij leveren de zoemer met 5V en GND van Uno en de speld die met "S" op speld 11 wordt gemerkt

Zo ziet onze code eruit:

 

Toewijzing vastmaken voor het toetsenbord
#define c3 9
#define c2 8
#define c1 7
#define c0 6
#define r3 5
#define R2 4
#define r1 3
#define r0 2

Void Setup() {   Seriële.Beginnen(9600);
 pinMode(c0,INPUT_PULLUP); 
 pinMode(c1,INPUT_PULLUP);
 pinMode(c2,INPUT_PULLUP);
 pinMode(c3,INPUT_PULLUP);
 pinMode(r0,Output);
 pinMode(r1,Output);
 pinMode(R2,Output);
 pinMode(r3,Output);
 pinMode(11,Output); voor onze Buzzer module
}

Void Lus(){
digitalWrite(r0,Lage);
digitalWrite(r1,Hoge);
digitalWrite(R2,Hoge);
digitalWrite(r3,Hoge);
Als(digitaalLezen(c0)==Lage){
TCCR2A = B01000011; Frequentietoewijzing
TCCR2B = B00001110; vindt hier plaats
OCR2A=119;          met behulp van het register en de klokfrequentie
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c1)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=106;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c2)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=94;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c3)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=89;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}

digitalWrite(r0,Hoge);
digitalWrite(r1,Lage);
digitalWrite(R2,Hoge);
digitalWrite(r3,Hoge);
Als(digitaalLezen(c0)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=79;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c1)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=71;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c2)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=63;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c3)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=59;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}

digitalWrite(r0,Hoge);
digitalWrite(r1,Hoge);
digitalWrite(R2,Lage);
digitalWrite(r3,Hoge);
Als(digitaalLezen(c0)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=25;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c1)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=20;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als (digitaalLezen(c2)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=10;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c3)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=50;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}

digitalWrite(r0,Hoge);
digitalWrite(r1,Hoge);
digitalWrite(R2,Hoge);
digitalWrite(r3,Lage);
Als(digitaalLezen(c0)==Lage){

TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=50;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c1)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=50;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c2)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=50;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
Anders Als(digitaalLezen(c3)==Lage){
TCCR2A = B01000011;
TCCR2B = B00001110;
OCR2A=50;
Vertraging(100);
TCCR2B=B00001000;
TCCR2A = B0000000000;
digitalWrite(11,Lage);}
} Met behulp van de formule: Hz = 16 MHz/prescalar/(OCRA+1)/2
PWM-frequenties tot 8MHz kunnen op deze manier worden gegenereerd

Veel plezier crafting en tot de volgende keer :-)

 

Produktvorstellungen

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery