Cuprins:

Pianul Arduino: 3 pași
Pianul Arduino: 3 pași

Video: Pianul Arduino: 3 pași

Video: Pianul Arduino: 3 pași
Video: Arduino: Arduino IDE + Controlul unui LED #3 2024, Noiembrie
Anonim
Pianul Arduino
Pianul Arduino

Acest „pian” este capabil să cânte o octavă a unui pian adevărat. Apăsarea butoanelor va reprezenta apăsarea unei taste de pe pian. Sunetul va fi transmis printr-un difuzor Piezo.

Pasul 1: Materiale

1. Arduino Uno

2. Sârmă USB

3. 3 panouri

4. 8 Butoane

5. 8 Rezistențe de 100 Ohm

6. Difuzor „Piezo”

7. Multe fire de sex masculin (aproximativ 20)

8. Fier de lipit

Pasul 2: Construiți configurarea

Construiți configurarea
Construiți configurarea

Construiți 8 butoane cu fiecare intrare în 8 pini diferiți în Arduino, adăugând câte un rezistor la fiecare și conectându-le la masă (folosind firele masculine).

Conectați difuzorul la pinul Arduino desemnat și cealaltă parte la masă. Va trebui să lipiți firele la difuzor, astfel încât să nu cadă. Asigurați-vă că cele două fire lipite la difuzor nu se ating unul de celălalt.

Pasul 3: Construirea codului

#define NOTE_B0 31 # define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 464 #4_4 #d efine NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #Define NOTA 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTA_B6 1976 #S7 NOTA define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE4C8 4699 #define NOTE_DS8 4978

Aceste „#definiri” trebuie să spună difuzorului ce frecvență face care notă

const int C = 2; const int D = 3; const int E = 4; const int F = 5; const int G = 6; const int A = 7; const int B = 8; const int C2 = 9; const int piezoPin = 10; int cState = 0; intStat = 0; int eState = 0; int fState = 0; int gState = 0; int aState = 0; int bState = 0; int c2State = 0;

Desemnați pinii Arduino la butoane. "cState, dState, eState etc;" sunt variabile care salvează dacă butonul este apăsat. Un 0 înseamnă că nu este apăsat, un 1 înseamnă că este apăsat.

void setup () {// puneți codul de configurare aici, pentru a rula o dată: pinMode (10, OUTPUT); Serial.begin (9600); }

void loop () {// puneți codul principal aici, pentru a rula în mod repetat: cState = digitalRead (C); dState = digitalRead (D); eState = digitalRead (E); fState = digitalRead (F); gState = digitalRead (G); aState = digitalRead (A); bState = digitalRead (B); c2State = digitalRead (C2);

Starea butonului (dacă este apăsat sau nu) este salvată în „cState, dState, eState, etc;”

Un 0 înseamnă că nu este apăsat, un 1 înseamnă că este apăsat.

if (cState == 1) {ton (piezoPin, 131); } else {noTone (piezoPin);} if (dState == 1) {tone (piezoPin, 147); } else {noTone (piezoPin);} if (eState == 1) {tone (piezoPin, 165); } else {noTone (piezoPin);} if (fState == 1) {tone (piezoPin, 175); } else {noTone (piezoPin);} if (gState == 1) {tone (piezoPin, 196); } else {noTone (piezoPin);} if (aState == 1) {tone (piezoPin, 220); } else {noTone (piezoPin);} if (bState == 1) {tone (piezoPin, 247); } else {noTone (piezoPin);} if (c2State == 1) {tone (piezoPin, 262); } else {noTone (piezoPin);}}

Dacă este apăsat un buton, acesta îi spune servo-ului să redea frecvența certă (notă). Functia

{noTone (piezoPin);} le spune că, dacă butonul nu este apăsat, nu se redă nimic. Prin urmare, ori de câte ori butonul este apăsat, acesta va reda nota desemnată.

Recomandat: