The program below loops repeating the same audio file at timed intervals. It's designed to ID a ham radio repeater every 9.5 minutes. Program always hangs up on the 28th loop. Any ideas?
/*
Key input on pin 2
Time input on pin 3
Key relay out on pin 4
Audio relay out on pin 5
*/
#include <SD.h>
#include <SPI.h>
#include <AudioZero.h>
boolean debounce1=true;
boolean debounce2=true;
int delay_time = 10000; // default 10 seconds
int timer1 = 10000; // 10 sec time delay
int timer2 = 570000; // 9.5 min time delay
int lcount = 1; // loop counter - for trouble shooting loop
void setup() {
// debug output at 1200 baud
Serial.begin(1200);
delay(2000); // 2 sec. time delay
// Initialize SD card
// Serial.print("Initializing SD card..."); //SDCARD_SS_PIN
if (!SD.begin(28)) {
Serial.println(" failed!");
while(true); // infinite loop if fail
}
pinMode(2, INPUT_PULLUP); //Button 1 with internal pull up to sense key
pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up time select switch
pinMode(4, OUTPUT); // Transmit relay out.
pinMode(5, OUTPUT); // Audio relay out.
// Serial.println(" done.");
}
void loop()
{
AudioZero.begin(88200); //set sample rate
// open wav file from sdcard
File myFile = SD.open("test.wav", FILE_READ);
if (!myFile) {
// if the file didn't open, print an error and stop
Serial.println("error opening test.wav");
while (true);
}
if (digitalRead(2)==HIGH && debounce1 == true) //low when keyed. Wait for high.
{
Serial.println("keying XMTR");
pinMode(4, HIGH); //Key transmitter
// delay(200); // 200 ms delay
pinMode(5, HIGH); //Close audio relay
Serial.println("Playing");
// until the file is not finished
AudioZero.play(myFile);
pinMode(5, LOW); // Open audio relay
pinMode(4, LOW); // Unkey transmitter
Serial.println("Unkeyed");
AudioZero.end();
Serial.println("End of file. Thank you for listening!");
myFile.close();
}
lcount++; // to trouble shoot loop
Serial.println(lcount); // to trouble shoot loop
if (digitalRead(3)==HIGH && debounce2 == true)
delay_time = timer1;
else delay_time = timer2;
delay(delay_time);
}