// https://forum.arduino.cc/t/using-nano-to-activated-up-to-8-songs-on-a-dyhv20t-after-using-a-micro-switch/1406508/38
// File: nano_dyhv20t_button_player.ino
#include <SoftwareSerial.h>
#define RX_PIN 10 // Arduino RX (connect to DY-HV20T TX)
#define TX_PIN 11 // Arduino TX (connect to DY-HV20T RX)
#define BUTTON_PIN 2 // Button input pin
SoftwareSerial audioSerial(RX_PIN, TX_PIN);
const int totalTracks = 8;
int currentTrack = 1;
bool lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
void setup() {
Serial.begin(9600);
audioSerial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// delay(2000);
setVolume(20); // Medium volume
Serial.println("System ready. Waiting for button press...");
}
void loop() {
bool buttonState = !digitalRead(BUTTON_PIN); // Invert reading for NC button
if (buttonState != lastButtonState) {
lastDebounceTime = millis();
lastButtonState = buttonState;
}
if ((millis() - lastDebounceTime) > debounceDelay && buttonState == HIGH) {
playTrack(currentTrack);
currentTrack++;
if (currentTrack > totalTracks) {
currentTrack = 1;
}
while (!digitalRead(BUTTON_PIN)); // Wait for release
// delay(100);
}
}
void playTrack(int trackNumber) {
Serial.print("Playing track number: ");
Serial.println(trackNumber);
audioSerial.write((uint8_t)0xAA); // start byte
audioSerial.write((uint8_t)0x07); // play command
audioSerial.write((uint8_t)0x02);
audioSerial.write((uint8_t)0x00);
audioSerial.write((uint8_t)trackNumber);
audioSerial.write((uint8_t)((0xAA + 0x07 + 0x02 + 0x00 + trackNumber) & 0xFF));
// delay(1000); // wait after sending command
}
void setVolume(uint8_t volume) {
Serial.print("Setting volume to: ");
Serial.println(volume);
audioSerial.print("VOL ");
audioSerial.print(volume);
audioSerial.print("\r\n");
}