http://makeprojects.com/Project/Charlie ... ear/1411/1
for my daughters Christmas present but I cannot get the Waveshield to play sounds. The RFIDreader sketch:
reads the RFID tags with no problem but when it comes to playing music nothing works for the CharlieBear sketch, nothing happens not even errors:// RFID reader
const int startByte = 10;
const int endByte = 13;
const int tagLength = 10;
const int totalLength = tagLength + 2;
char tag[tagLength + 1];
int bytesread=0;
void setup()
{
Serial.begin(2400);
pinMode(7,OUTPUT);
digitalWrite(7, LOW);
}
void loop()
{
if(Serial.available() >= totalLength)
{
if(Serial.read() == startByte)
{
bytesread = 0;
while(bytesread < tagLength)
{
int val = Serial.read();
if((val == startByte)||(val == endByte))
break;
tag[bytesread]=val;
bytesread++;
}
if( Serial.read() == endByte)
{
tag[bytesread]=0;
Serial.print("RFID tag is: ");
Serial.println(tag);
}
}
}
}
// An interactive bear for Charlie -- RFID triggered sound responses
#include <FatReader.h>
#include <SdReader.h>
#include "WaveHC.h"
#include "WaveUtil.h"
SdReader memcard;
FatVolume vol;
FatReader root;
FatReader file;
WaveHC wave;
#define ENABLE 7 // Set the pin number for enabling the RFID reader. The Audio Shield uses pins 2-5.
#define NUMTAGS 22
int val = 0;
char code[10];
int bytesread = 0;
char knowntags[NUMTAGS][11] = {"12000A439E", "0100E27C4D"};
char soundfiles[NUMTAGS][9] = {"1000.WAV", "1001.WAV", "1002.WAV", "1003.WAV", "1004.WAV", "1005.WAV", "1006.WAV", "1007.WAV", "1008.WAV", "1009.WAV", "1010.WAV", "1011.WAV", "1012.WAV", "1013.WAV", "1014.WAV", "1015.WAV", "1016.WAV", "1017.WAV", "1018.WAV", "1019.WAV", "1020.WAV", "1021.WAV"};
char filename[1][13];
void setup() {
//////// Set up RFID reader to collect tag information /////////////////////
Serial.begin(2400); // RFID reader SOUT pin connected to Serial RX pin at 2400bps
pinMode(ENABLE,OUTPUT); // Set digital pin 7 as OUTPUT to connect it to the RFID /ENABLE pin
digitalWrite(ENABLE, LOW); // Activate the RFID reader
//////// Set the pins to output for driving the Audio Shield
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
////////// Set up the Audio Shield by initializing the memory card for reading ////////
if (!memcard.init()) {
// If something went wrong sdErrorCheck prints out the error check
putstring_nl("Card init. failed!");
cardErrorCheck();
return;
}
//This will optimize the reading of the memory card -- remove it if it times out
memcard.partialBlockRead(true);
// Find a FAT formatted partition by looking in teh first five slots. Remember your memory card should be FAT16 or FAT32 formatted
uint8_t partition;
for (partition = 0; partition < 5; partition++) {
if (vol.init(memcard, partition))
break;
}
if (partition == 5)
{
putstring_nl("No valid FAT partition");
cardErrorCheck();
while(1); // This is a point of no return. Format your memory card properly and try again.
}
// Open the root directory for reading the files
if (!root.openRoot(vol))
{
putstring_nl("Can't open root directory");
while(1); // Something went wrong here so investigate the file system on your memory card.
}
// If you got this far then the card is ready to read
putstring_nl("Ready to go");
}
// If we find an error, check what the error is and show it on the serial terminal
void cardErrorCheck(void)
{
if(!memcard.errorCode()) return;
putstring("\n\rSD I/O error:");
Serial.print(memcard.errorCode());
putstring(", ");
Serial.print(memcard.errorData());
while(1); // Stick here if there is an error
}
void loop() {
if(Serial.available() > 0) { // if data available from reader
if((val = Serial.read()) == 10) { // check for header
bytesread = 0;
while(bytesread<10) { // read 10 digit code
if( Serial.available() > 0) {
val = Serial.read();
if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}
code[bytesread] = val; // add the digit
bytesread++; // ready to read next digit
}
}
if(bytesread == 10) { // if 10 digit read is complete
playsound(code);
Serial.print("TAG code is: "); // possibly a good TAG
Serial.println(code); // print the TAG code
Serial.flush(); // Flush the serial buffer before trying to read a new code
}
bytesread = 0;
}
}
}
void playsound(char codetoplay[]) {
for(int i = 0; i<8; i++) { // Make a filename from the first 8 characters of the RFID tag number
filename[0]=codetoplay;
}
filename[0][8]='.';
filename[0][9]='w';
filename[0][10]='a';
filename[0][11]='v';
silence(); //shut down anything that is currently playing and close that file
playfile(filename[0]);
}
void playfile(char *name) {
if (!file.open(root, name)) {
putstring_nl("Couldn't open file");
return;
}
if (!wave.create(file)) {
putstring_nl("Not a valid WAV");
return;
}
wave.play();
}
void silence() {
if(wave.isplaying) {
wave.stop();
}
}
I have tried to run the DAPHC sketch and that does not work either all the serial monitor displays is:
Wave test!
Free RAM:
I have checked everything I can think of and nothing works.
I am using a 2GB SD card formatted to FAT
I have purchased another waveshield just in case the board is defective but I want to wait until i know what is wrong.
Can anyone please help me?
Thank you in advanced.