// SpeakJet Shield DaisyDemo.pde // written by Galen Raben / www.droidbuilder.com (last revised 4-7-2010) // a demo that sings the Daisy Bell song, song composed by Harry Dacre in 1892. // Many thanks to cryahoo for posting a SpeakJet code sequence on Yahoo's SpeakJet // group. This code is was inspired and adaptated from his original code. // The frequencies of the diatonic musical scale, octaves 1 through 3. // (rounded to the nearest integer.) #define C1 33 #define Cs1 35 // C#1 #define D1 37 #define Ds1 39 // D#1 #define E1 41 #define F1 44 #define Fs1 46 // F#1 #define G1 49 #define Gs1 52 // G#1 #define A1 55 #define As1 58 // A#1 #define B1 62 #define C2 65 #define Cs2 69 #define D2 73 #define Ds2 78 #define E2 82 #define F2 87 #define Fs2 93 #define G2 98 #define Gs2 104 #define A2 110 #define As2 117 #define B2 124 #define C3 131 #define Cs3 139 #define D3 147 #define Ds3 156 #define E3 165 #define F3 175 #define Fs3 185 #define G3 196 #define Gs3 208 #define A3 220 #define As3 233 #define B3 247 // SpeakJet speech element codes #define IY 128 #define IH 129 #define EY 130 #define EH 131 #define AY 132 #define AX 133 #define UX 134 #define OH 135 #define AW 136 #define OW 137 #define UH 138 #define UW 139 #define MM 140 #define NE 141 #define NO 142 #define NGE 143 #define NGO 144 #define LE 145 #define LO 146 #define WW 147 #define RR 148 #define IYRR 149 #define EYRR 150 #define AXRR 151 #define AWRR 152 #define OWRR 153 #define EYIY 154 #define OHIY 155 #define OWIY 156 #define OHIH 157 #define IYEH 158 #define EHLL 159 #define IYUW 160 #define AXUW 161 #define IHWW 162 #define AYWW 163 #define OWWW 164 #define JH 165 #define VV 166 #define ZZ 167 #define Zh 168 #define DH 169 #define BE 170 #define BO 171 #define EB 172 #define OB 173 #define DE 174 #define DO 175 #define ED 176 #define OD 177 #define GE 178 #define GO 179 #define EG 180 #define OG 181 #define CH 182 #define HE 183 #define HO 184 #define WH 185 #define FF 186 #define SE 187 #define SO 188 #define SH 189 #define TH 190 #define TT 191 #define TU 192 #define TS 193 #define KE 194 #define KO 195 #define EK 196 #define OK 197 #define PE 198 #define PO 199 // SpeakJet Robot Sound Effect Codes #define R0 200 #define R1 201 #define R2 202 #define R3 203 #define R4 204 #define R5 205 #define R6 206 #define R7 207 #define R8 208 #define R9 209 // SpeakJet Alarm Sound Effect Codes #define a0 210 #define a1 211 #define a2 212 #define a3 213 #define a4 214 #define a5 215 #define a6 216 #define a7 217 #define a8 218 #define a9 219 // SpeakJet Misc Sound Effect Codes #define M0 252 //sonar ping #define M1 253 //pistol shot #define M2 254 //wow sound // SpeakJet Control Codes #define P0 0 #define P1 1 #define P2 2 #define P3 3 #define P4 4 #define P5 5 #define P6 6 #define FAST 7 #define SLOW 8 #define STR 14 #define RLX 15 #define PIT 22 #define SPD 21 #define VOL 20 #define BND 23 #define RST 31 #define REPEAT 26 // set up a new serial port //rxPin: the pin on which to receive serial data //txPin: the pin on which to transmit serial data //busyPin: the pin that indicates SpeakJet is busy or its buffer is half full (depending on user config) #include #define txPin 2 #define rxPin 3 #define busyPin 4 // set up SoftwareSerial port SoftwareSerial speakJet = SoftwareSerial(rxPin, txPin); void setup() { // initialize SpeakJet communications //pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); pinMode(busyPin, INPUT); speakJet.begin(9600); } 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 is needed for some reason } void loop() { // daisy, daisy byte daisy1[] = {20,96,21,114,22,88,23,5,31,SPD,114,PIT,D3,DE,SPD,22,EYIY,SPD,114,PIT,B2,ZZ,SPD,5,IY,SPD,114,2,1,PIT,G2,DE,SPD,22,EYIY,SPD,114,PIT,D2,ZZ,SPD,5,IY,SPD,114,2,1}; // give me your answer do byte daisy2[] = {PIT,E2,GE,IH,VV,0,PIT,F2,MM,IY,0,PIT,G2,IYEH,OWRR,0,PIT,E2,AY,NO,2,2,PIT,G2,SO,EYRR,0,PIT,D2,DO,SPD,2,IHWW,SPD,114,2,1}; // i'm half crazy byte daisy3[] = {PIT,A2,SPD,69,OHIH,SPD,114,MM,2,1,PIT,D3,STR,HO,SPD,17,AY,SPD,114,FF,2,PIT,B2,KO,RR,SPD,49,EYIY,SPD,114,1,PIT,G2,ZZ,SPD,5,IY,SPD,114,2,1}; // all for the love of you byte daisy4[] = {PIT,E2,SPD,104,AW,SPD,114,LO,0,PIT,F2,FF,SPD,120,OW,SPD,117,AXRR,SPD,114,0,PIT,G2,TH,UX,0,PIT,A2,LO,UX,VV,2,2,PIT,B2,UX,VV,0,PIT,A2,IYEH,SPD,36,IHWW,SPD,114,3,1}; // it won't be a stylish marriage byte daisy5[] = {PIT,B2,IH,TT,0,PIT,C3,WW,OW,NE,TT,PIT,B2,BE,IY,PIT,A2,UX,PIT,D3,SE,TU,SPD,87,OHIH,SPD,114,PIT,B2,LE,IH,SH,PIT,A2,MM,EYRR,PIT,G2,SPD,0,IH,IH,SPD,114,JH}; // i can't afford a carriage byte daisy6[] = {PIT,A2,OHIY,PIT,B2,KE,SPD,56,AY,SPD,114,NO,TT,PIT,G2,SPD,69,UX,SPD,114,FF,PIT,E2,SPD,75,OWRR,SPD,114,ED,PIT,G2,SPD,69,UX,SPD,114,PIT,E2,KE,EYRR,PIT,D2,SPD,44,IH,IH,SPD,114,JH}; // but you'll look sweet, on the seat byte daisy7[] = {BO,SPD,80,UX,SPD,114,TT,PIT,G2,IYEH,IHWW,LE,PIT,B2,LE,UH,OK,PIT,A2,SE,WW,IY,TT,3,PIT,G2,SPD,91,OH,SPD,114,NO,PIT,B2,TH,UX,2,PIT,A2,SE,IY,TT,2}; // of a bicycle built for two byte daisy8[] = {PIT,B2,UX,VV,PIT,C3,EYIY,PIT,D3,BE,OHIH,PIT,B2,SO,IH,PIT,G2,KO,LO,PIT,A2,BE,IH,SPD,82,EHLL,SPD,114,TT,PIT,D2,FF,OWRR,PIT,G2,TU,UW,SPD,1,UW,UW,SPD,114,3}; for (int i=0; i