#include <SD.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <TMRpcm.h>
#include <SimpleVR.h>
TMRpcm tmrpcm; VR myVR(2,3); //SoftwareSerial mySerial(0,1); //RX, TX
uint8_t buf[64];
bool acknowledge = false;
bool acknowledge2 = false;
bool tuneIn = true;
//int resetPin = 8;
//String line;
//String wrd = "ACYCLOVIR";
//File myfile;
void setup()
{
myVR.begin(9600); //initialize voice recognition module
Serial.begin(115200); //initialize sd card
pinMode(5,OUTPUT); //set pin for relay
digitalWrite(5, HIGH); //tells the relay to turn off
tmrpcm.speakerPin = 9; //set pin for speaker
while(!Serial){
}
Serial.print("Initializing SD Card...");
if(!SD.begin(10))
{
Serial.println("Initialization Failed!");
return;
}
Serial.println("Initialization done");
tmrpcm.setVolume(5); //set audio volume
// tmrpcm.play("MCU.WAV"); //test audio
if (myVR.checkVersion(buf) > 0)
{ //connects to voice recognition module
Serial.println("SimpleVR Connected");
myVR.setEnable(true); myVR.setGroup(2);
} // findWord(wrd); //code for speech synthesis }
void loop()
{
Serial.println("Test"); int ret;
uint16_t voice=0;
ret = myVR.recognize(buf, 50); //takes voice input
if(ret > 0)
{
voice += buf[0];
voice <<=8;
voice += buf[1];
if (voice == 1 && acknowledge == false && acknowledge2 == false)
{ //checks the value of voice and acknowledgements
Serial.println(F("Otis"));
delay(1000);
tmrpcm.play("BAYSS.WAV");
myVR.setGroup(1); //sets group to the group with commands
acknowledge = true;
delay(3000);
//tmrpcm.stopPlayback();
tuneIn = false;
}
else
{
switch(voice){
case 1:
if(acknowledge == true && acknowledge2 == false && tuneIn == true){
digitalWrite(5, LOW);
Serial.println(F("lights"));
delay(1000);
myVR.setGroup(2);
tmrpcm.play("BYS.WAV");
acknowledge = false;
acknowledge2 = false;
delay(3000);
}else if(acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("playing lofi"));
myVR.setGroup(2);
tmrpcm.play("lofi.WAV", 30);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 2:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
digitalWrite(5, HIGH);
Serial.println(F("turn off lights"));
delay(1000);
tmrpcm.play("BAYW.WAV");
acknowledge = false;
acknowledge2 = false;
myVR.setGroup(2);
delay(3000);
}else if (acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("playing r&b"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 3:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("power on"));
acknowledge = false;
myVR.setGroup(2);
delay(3000);
}else if (acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("playing smooth jazz"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 4:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
pinMode(8, OUTPUT);
Serial.println(F("shut down power"));
delay(1000);
tmrpcm.play("BPWYW.WAV");
delay(7000);
digitalWrite(5, HIGH);
digitalWrite(8, LOW);
}else if (acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("playing rock"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 5:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("hello cheyenne"));
tmrpcm.play("BHBD.WAV");
acknowledge = false;
delay(5000);
myVR.setGroup(2);
}else if (acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("pausing"));
tmrpcm.pause();
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 6:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("play music"));
delay(1000);
tmrpcm.play("BWM.WAV");
myVR.setGroup(3);
acknowledge2 = true;
delay(3000);
}else if (acknowledge == true && acknowledge2 == true && tuneIn == true){
Serial.println(F("resuming"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 7:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("date"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
case 8:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("command 8"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(1000);
}
break;
case 9:
if (acknowledge == true && acknowledge2 == false && tuneIn == true){
Serial.println(F("command 9"));
myVR.setGroup(2);
acknowledge = false;
acknowledge2 = false;
delay(3000);
}
break;
}
tuneIn = true;
}
}
}