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:
- AZ-Delivery Microkontoller, compatibel met Arduino Uno R3
- Matrixtoetsenbord 4x4
- passieve zoemermodule
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 :-)