I have searched and can’t figure this out
I have a basic sketch for reading from the serial port and sending it to the TTS chip which sends to the speakjet. I am using the sparkfun voice shield with the TTS chip in the proto area.
Problem is I can’t send commands from serial. It works if I do a println but not from the serial.
For example speakjet.println(“Test\375”); that works but if i type Test\375 from the serial monitor it speaks the \ 3 7 5. (375 is the code for 253 for gunshot sound per example in http://www.sparkfun.com/datasheets/Comp … prelim.pdf
It doesn’t read the escape character correctly.
Below is my code. This is based on the Sparkfun example, I removed my LCD code.
/*
Testing Sketch for Robot
*/
//Soft serial library used to send serial commands on pin 2 instead of regular serial pin.
#include <SoftwareSerial.h>
//Define the Pin Numbers of the Voicebox shield for the sketch.
#define E0 5
#define E1 6
#define E2 7
#define E3 8
#define E4 9
#define E5 10
#define E6 11
#define E7 12
#define RDY 13
#define RES 3
#define SPK 4
//Pin 2 of the shield should be wired to the TTS256 chip.
#define txPin 2
//Create a SoftSerial Object to send strings to the TTS256 chip.
SoftwareSerial speakjet = SoftwareSerial(0, txPin);
//Create a message buffer to hold the ascii message to be converted to sound
char message[128]="";
void setup()
{
//Configure the pins for the SpeakJet module
pinMode(txPin, OUTPUT);
pinMode(SPK, INPUT);
//Set up a serial port to talk from Arduino to the SpeakJet module on pin 3.
speakjet.begin(9600);
//Set up a serial port to get the ascii message from the host
Serial.begin(9600);
//Configure the Ready pin as an input
pinMode(RDY, INPUT);
//Configure Reset line as an output
pinMode(RES, OUTPUT);
//Configure all of the Event pins as outputs from Arduino, and set them Low.
for(int i=E0; i<=E7; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
//All I/O pins are configured. Reset the SpeakJet module
digitalWrite(RES, LOW);
delay(100);
digitalWrite(RES, HIGH);
delay(1000);
char sounds[] = {200, 201, 202, 203, 220, 221, 222};
speakjet.println(sounds);
//speakjet.println("Test\375"); // This works for sending commands inline
}
void loop()
{
//Get a message from the serial port
getMessage(message);
//Send the message to the TTS256
speakjet.println(message);
Serial.println(message);
print(message);
print(" ");
//Wait 12ms before checking the ready line (specified in TTS256 datasheet)
delay(12);
//Wait for the Speakjet to become 'ready' before sending more text.
while(digitalRead(RDY)==0);
}
//Function: getMessage(char *)
//Description: Retrieves a string from the Serial port. Doesn't return the string until a carriage return character is detected.
//Inputs: None
//Outputs: char * message - The message received on the serial port.
//Returns: Nothing
//usage: getMessage(english_sentance);
void getMessage(char * message)
{
char in_char=0; //Create a character to store the incoming byte from the serial port.
//Wait for a character to come into the serial port
while(Serial.available() <=0);
//Copy the incoming character to our variable.
in_char=Serial.read();
//Keep retreiving characters until the 'end of sentance(0x0D)' character is received.
while(in_char != 0x0D){
*message++=in_char; //Every time we receive a character we should add the character to the message string.
while(Serial.available() <=0); //Now wait for the next character...
in_char = Serial.read(); //and copy it to the variable again.
}
*message='\0'; //Strings must end with a Null terminator so we need to add this to our message.
return;
}
Thanks.