153 lines
2.6 KiB
C++
153 lines
2.6 KiB
C++
|
#include <AF_Wave.h>
|
||
|
#include <avr/pgmspace.h>
|
||
|
#include "util.h"
|
||
|
#include "wave.h"
|
||
|
|
||
|
#include "WProgram.h"
|
||
|
void setup();
|
||
|
void ls();
|
||
|
void loop();
|
||
|
void playcomplete(char *name);
|
||
|
void stop_play();
|
||
|
void playfile(char *name);
|
||
|
AF_Wave card;
|
||
|
File f;
|
||
|
Wavefile wave; // only one!
|
||
|
|
||
|
#define redled 9
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin(9600); // set up Serial library at 9600 bps
|
||
|
Serial.println("Audifono test!");
|
||
|
|
||
|
pinMode(2, OUTPUT);
|
||
|
pinMode(3, OUTPUT);
|
||
|
pinMode(4, OUTPUT);
|
||
|
pinMode(5, OUTPUT);
|
||
|
pinMode(redled, OUTPUT);
|
||
|
|
||
|
if (!card.init_card()) {
|
||
|
putstring_nl("Card init. failed!"); return;
|
||
|
}
|
||
|
if (!card.open_partition()) {
|
||
|
putstring_nl("No partition!"); return;
|
||
|
}
|
||
|
if (!card.open_filesys()) {
|
||
|
putstring_nl("Couldn't open filesys"); return;
|
||
|
}
|
||
|
|
||
|
if (!card.open_rootdir()) {
|
||
|
putstring_nl("Couldn't open dir"); return;
|
||
|
}
|
||
|
|
||
|
putstring_nl("Files found:");
|
||
|
ls();
|
||
|
}
|
||
|
|
||
|
void ls() {
|
||
|
char name[13];
|
||
|
int ret;
|
||
|
|
||
|
card.reset_dir();
|
||
|
putstring_nl("Files found:");
|
||
|
while (1) {
|
||
|
ret = card.get_next_name_in_dir(name);
|
||
|
if (!ret) {
|
||
|
card.reset_dir();
|
||
|
return;
|
||
|
}
|
||
|
Serial.println(name);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
uint8_t tracknum = 0;
|
||
|
char c = 0;
|
||
|
char c_old = 0;
|
||
|
byte incomingByte;
|
||
|
char filename[13];
|
||
|
|
||
|
void loop() {
|
||
|
|
||
|
if (Serial.available() > 0) {
|
||
|
incomingByte = Serial.read();
|
||
|
c = incomingByte;
|
||
|
Serial.print(incomingByte, BYTE);
|
||
|
}
|
||
|
|
||
|
if ( ( c > 0 ) && (c!=c_old) )
|
||
|
{
|
||
|
int i = 0;
|
||
|
c_old = c;
|
||
|
|
||
|
if(c<=9)
|
||
|
{
|
||
|
filename[i] = c + '0';
|
||
|
filename[i+1] = '.';
|
||
|
filename[i+2] = 'W';
|
||
|
filename[i+3] = 'A';
|
||
|
filename[i+4] = 'V';
|
||
|
filename[i+5] = 0;
|
||
|
}
|
||
|
else if(c>9)
|
||
|
{
|
||
|
filename[i] = (int)(c/10) + '0';
|
||
|
filename[i+1] = c%10 + '0';
|
||
|
filename[i+2] = '.';
|
||
|
filename[i+3] = 'W';
|
||
|
filename[i+4] = 'A';
|
||
|
filename[i+5] = 'V';
|
||
|
filename[i+6] = 0;
|
||
|
}
|
||
|
playfile(filename);
|
||
|
}
|
||
|
else if ( (c==0) && (c!=c_old) )
|
||
|
{
|
||
|
c_old = c;
|
||
|
stop_play();
|
||
|
}
|
||
|
|
||
|
if( (!wave.isplaying) && (c!=0) )
|
||
|
{
|
||
|
stop_play();
|
||
|
playfile(filename);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void playcomplete(char *name) {
|
||
|
playfile(name);
|
||
|
while (wave.isplaying){}
|
||
|
card.close_file(f);
|
||
|
}
|
||
|
|
||
|
void stop_play() {
|
||
|
wave.stop();
|
||
|
card.close_file(f);
|
||
|
card.reset_dir();
|
||
|
}
|
||
|
|
||
|
void playfile(char *name) {
|
||
|
// stop any file already playing
|
||
|
if (wave.isplaying) {
|
||
|
wave.stop();
|
||
|
card.close_file(f);
|
||
|
}
|
||
|
card.reset_dir();
|
||
|
f = card.open_file(name);
|
||
|
if (f && wave.create(f)) {
|
||
|
wave.play();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
init();
|
||
|
|
||
|
setup();
|
||
|
|
||
|
for (;;)
|
||
|
loop();
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|