Написання прорами "Піаніно"
Необхідні компоненти:
- Плата Arduino Uno
- РК дисплей 16х2
- Зумер (Buzzer)
- Конденсатор точного налаштування (Trimmer) 10k.
- Перемикач SPDT типу.
- Кнопки – 8 шт.
- Резистори 10 кім, 560 ОМ, 1,5 кім, 2,6 кім, 3,9 кім, 5,6 кім, 6,8 кім, 8,2 кім, 10 кім
- Макетна плата.
- З'єднувальні дроти.
Робота схеми
Схема піаніно на основі плати Arduino, зроблена для складання на макетній платі, представлена на наступному малюнку:
Схема досить проста і її без особливих труднощів можна зібрати на макетній платі. Після складання схеми має вийти приблизно така конструкція:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | /* Arduino based Piano and Record and play option Code by: B. Aswinth Raj Website: www.circuitdigest.com Dated: 22-05-2017 */ #include <LiquidCrystal.h> // подключение библиотеки для работы с ЖК дисплеем int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // устанавливаем частоты для нот C4, D4, E4, F4, G4, A4, B4, C5 const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //контакты Arduino, к которым подключен ЖК дисплей LiquidCrystal lcd(rs, en, d4, d5, d6, d7); char button = 0; int analogVal; char REC = 0; int recorded_button[200]; int pev_button; int recorded_time [200]; char time_index; char button_index = 0; unsigned long start_time; int note_time; void setup() { Serial.begin(9600); pinMode (6, INPUT); lcd.begin(16, 2); //мы используем ЖК дисплей 16х2 lcd.print("Arduino Piano"); //показываем приветственное сообщение lcd.setCursor(0, 1); // устанавливаем курсор в столбец 0, строку 1 lcd.print("-CircuitDigest"); // показываем приветственное сообщение delay(2000); //ждем 2 секунды lcd.clear(); //очищаем экран ЖК дисплея } void loop() { while (digitalRead(6) == 0) //если переключатель находится в положении записи музыки { lcd.setCursor(0, 0); lcd.print("Recording.."); lcd.setCursor(0, 1); Detect_button(); Play_tone(); } while (digitalRead(6) == 1) // если переключатель находится в положении воспроизведения музыки { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Now Playing.."); for (int i = 0; i < sizeof(recorded_button) / 2; i++) { delay((recorded_time[i]) * 10); //ждем перед тем как проигрывать следующую мелодию if (recorded_button[i] == 0) noTone(7); //пользователь не нажал никакой кнопки else tone(7, notes[(recorded_button[i] - 1)]); //проигрываем мелодию соответствующую нажатой пользователем кнопке } } } void Detect_button() { analogVal = analogRead(A0); //считываем аналоговое значение напряжение с контакта A0 pev_button = button; //запоминаем предыдущую кнопку нажатую пользователем if (analogVal < 550) button = 8; if (analogVal < 500) button = 7; if (analogVal < 450) button = 6; if (analogVal < 400) button = 5; if (analogVal < 300) button = 4; if (analogVal < 250) button = 3; if (analogVal < 150) button = 2; if (analogVal < 100) button = 1; if (analogVal > 1000) button = 0; /****записываем нажатые кнопки в массив***/ if (button != pev_button && pev_button != 0) { recorded_button[button_index] = pev_button; button_index++; recorded_button[button_index] = 0; button_index++; } /**End of Recording program**/ } void Play_tone() { /****записываем временные задержки между нажатиями кнопок в массив***/ if (button != pev_button) { lcd.clear(); //очищаем ЖК дисплей note_time = (millis() - start_time) / 10; recorded_time[time_index] = note_time; time_index++; start_time = millis(); } /**End of Recording program**/ if (button == 0) { noTone(7); lcd.print("0 -> Pause.."); } if (button == 1) { tone(7, notes[0]); lcd.print("1 -> NOTE_C4"); } if (button == 2) { tone(7, notes[1]); lcd.print("2 -> NOTE_D4"); } if (button == 3) { tone(7, notes[2]); lcd.print("3 -> NOTE_E4"); } if (button == 4) { tone(7, notes[3]); lcd.print("4 -> NOTE_F4"); } if (button == 5) { tone(7, notes[4]); lcd.print("5 -> NOTE_G4"); } if (button == 6) { tone(7, notes[5]); lcd.print("6 -> NOTE_A4"); } if (button == 7) { tone(7, notes[6]); lcd.print("7 -> NOTE_B4"); } if (button == 8) { tone(7, notes[7]); lcd.print("8 -> NOTE_C5"); } } |
Комментариев нет:
Отправить комментарий