Управление воспроизведением музыки с пульта: Простой проект на Arduino
Компоненты и материалы
| Arduino UNO | 1 |
| Пульт ДУ | 1 |
| IR-приёмник (универсальный) | 1 |
| Зуммер | 1 |
| LCD-дисплей 16x2 (белый на синем) | 1 |
| Потенциометр поворотный | 1 |
| Резистор 221 Ом | 1 |
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Привет, сообщество Hackster! Я Симоне Адобс, и это мой второй проект на этом сайте.
Логика проекта очень проста:
- Возьмите пульт ДУ и выберите мелодию, которую хотите воспроизвести;
- Arduino с зуммером воспроизведёт мелодию;
- На LCD-экране отображается играемая нота.
Некоторые пояснения к коду:
Все мелодии записаны следующим образом:
void melody_example() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Название песни");
delay(1000);
lcd.clear();
nota_mi(duration,pause); // нота Ми
nota_do(duration,pause); // нота До
lcd.clear();
delay(100);
Reset_AVR(); // Эта команда перезагружает Arduino без нажатия кнопки
}
Для использования команды Reset_AVR() необходимо добавить в начало скетча:
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
Так Arduino определяет, какую мелодию воспроизводить:
if (result==12495) { // 12495 — код кнопки 1 на моём пульте
melody_1();
} else if (result==6375) { // 6375 — код кнопки 2
melody_2();
} else if (result==31365) { // 31365 — код кнопки 3
melody_3();
} else if (result==4335) { // 4335 — код кнопки 4
melody_4();
}
Функция воспроизведения отдельной ноты:
void nota_example(int duration, int pause) {
shut(); // Вызывает функцию остановки (описана ниже)
lcd.setCursor(0, 0);
lcd.print("Example "); // Выводит название ноты
NewTone(11,262,duration); // 11 — пин зуммера, 262 — частота ноты
delay(pause); // Пауза в миллисекундах
}
Хотите остановить мелодию во время воспроизведения?
Никаких проблем! Благодаря функции shut() можно прервать мелодию в любой момент.
Вот функция shut():
void shut() {
if (irrecv.decode(&results)) {
result=results.value, HEX;
Serial.println(result);
if (result==-23971) { // -23971 на моём пульте — кнопка выключения
Reset_AVR(); // Перезагрузка Arduino
}
}
irrecv.resume(); // Готовит Arduino к приёму следующего кода
}
Надеюсь, проект вам понравится. Если да — загляните в мой предыдущий проект.
Хорошего дня!
Симоне из Италии <3
Код
Воспроизведение мелодии (C/C++)
Скопируйте этот код в Arduino IDE:
#include <LiquidCrystal.h>
#include <IRremote.h>
#include <NewTone.h>
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
#define buzzer 11
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int result;
int RECV_PIN=2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("-----Choose-----");
lcd.setCursor(0,1);
lcd.print("----A Song!!----");
pinMode(buzzer, OUTPUT);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
result=results.value, HEX;
Serial.println(result);
if (result==12495) { ode(); }
else if (result==6375) { london(); }
else if (result==31365) { fur(); }
else if (result==4335) { pirate(); }
irrecv.resume();
}
delay(100);
}
// Функции мелодий: Fur Elise, London Bridge, Ode to Joy, He's a Pirate
// ... (полный код доступен в исходнике)
Схемы
Файл схемы: canzoni_con_tastiera_fQS3978roa.fzz
Производственный процесс
- Перехват команд ИК-пульта на Raspberry Pi без LIRC: подход через Python UART
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Камера охраны с детектором движения на ESP32-CAM и отправкой фото в Discord
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Создание рулетки на 37 светодиодов с Arduino Nano
- Самодельный пульт от ТВ на Arduino с 3D-корпусом и питанием от батарейки
- Мониторинг температуры дома из любой точки через Arduino IoT Cloud
- Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
- Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
- Управление светодиодом Arduino через Cortana по Bluetooth в Windows 10