// TTSNewVoice.pde // example of changing voices on Speakjet Shield TTS with the text-to-speech enabled // 10-24-2010 // DroidBuilder.com / Galen Raben // set up a SoftwareSerial port for Speakjet Shield #include // rxPin: the pin on which to receive serial data from TTS256 // txPin: the pin on which to transmit serial data to the TTS256 // busyPin: the pin monitoring SpeakJet busy status #define txPin 2 #define rxPin 3 #define busyPin 4 // set up a new serial port for Speakjet Shield SoftwareSerial speakJet = SoftwareSerial(rxPin, txPin); void setup(){ // init serial communications with the SpeakJet-TTS256 pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); pinMode(busyPin, INPUT); speakJet.begin(9600); // set the data rate for the SoftwareSerial port delay(500); // wait a moment for the Arduino resets to finish (speaks "ready") } void loop() { changeVoice2(); // only works once in a loop, other changes are ignored by TTS256. speakJet.println("Hello world"); // send it to the SpeakJet SJBusy(); } void changeVoice1() { // default voice speakJet.println("passthruon"); // init TTS256 passthru speakJet.print(13, BYTE); // send cr speakJet.print(20, BYTE); // vol speakJet.print(96, BYTE); // 0-127 default 96 speakJet.print(21, BYTE); // speed speakJet.print(114, BYTE); // 0-127 default 114 speakJet.print(22, BYTE); // pitch speakJet.print(88, BYTE); // 0-255 default 88 speakJet.print(23, BYTE); // bend speakJet.print(5, BYTE); // 0-15 default 5 speakJet.println("X"); // terminate passthruon speakJet.println(10, BYTE); // add linefeed (\x0A) delay(500); } void changeVoice2() { // higher pitch voice speakJet.println("passthruon"); speakJet.print(13, BYTE); speakJet.print(20, BYTE); speakJet.print(96, BYTE); speakJet.print(21, BYTE); speakJet.print(114, BYTE); speakJet.print(22, BYTE); // pitch speakJet.print(120, BYTE); // <-- set pitch higher speakJet.print(23, BYTE); speakJet.print(5, BYTE); speakJet.println("X"); speakJet.println(10, BYTE); delay(500); } void changeVoice3() { // lower pitch voice speakJet.println("passthruon"); speakJet.print(13, BYTE); speakJet.print(20, BYTE); speakJet.print(96, BYTE); speakJet.print(21, BYTE); speakJet.print(114, BYTE); speakJet.print(22, BYTE); // pitch speakJet.print(60, BYTE); // <-- set pitch lower speakJet.print(23, BYTE); speakJet.print(5, BYTE); speakJet.println("X"); speakJet.println(10, BYTE); delay(500); } void changeVoice4() { // StarWars droid voice speakJet.println("passthruon"); speakJet.print(13, BYTE); speakJet.print(20, BYTE); speakJet.print(96, BYTE); speakJet.print(21, BYTE); // speed speakJet.print(120, BYTE); // <-- set speed higer speakJet.print(22, BYTE); // pitch speakJet.print(120, BYTE); // <-- set pitch higher speakJet.print(23, BYTE); // bend speakJet.print(12, BYTE); // <-- set bend higher speakJet.println("X"); speakJet.println(10, BYTE); delay(500); } void SJBusy(){ delay(20); // wait 12ms minimum before checking SpeakJet busy pin while(digitalRead(busyPin)){ delay(250); // wait here while SpeakJet is busy (pin 4 is true) } delay(250); // a bit more delay may be needed }