SP03 Text to Speech Synthesizer

Committer:
yangcq88517
Date:
Mon Mar 07 14:45:16 2016 +0000
Revision:
2:4090898287d5
Parent:
1:58ab657cd515
update document

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:2326b6172834 1 #include "SP03.h"
yangcq88517 0:2326b6172834 2
yangcq88517 0:2326b6172834 3 SP03::SP03(PinName sda, PinName scl): i2c_bus(sda,scl)
yangcq88517 0:2326b6172834 4 {
yangcq88517 0:2326b6172834 5 i2c_bus.frequency(CLOCK_RATE);
yangcq88517 1:58ab657cd515 6 _volume = VOLUME_MAX;
yangcq88517 1:58ab657cd515 7 _speed = SPEED_NORMAL;
yangcq88517 0:2326b6172834 8 }
yangcq88517 0:2326b6172834 9
yangcq88517 1:58ab657cd515 10 void SP03::speak(const char * message)
yangcq88517 0:2326b6172834 11 {
yangcq88517 1:58ab657cd515 12 i2c_bus.start();
yangcq88517 1:58ab657cd515 13 i2c_bus.write(DEFAULT_ADDRESS);
yangcq88517 1:58ab657cd515 14 i2c_bus.write(REGISTER_FOR_COMMAND);
yangcq88517 1:58ab657cd515 15 i2c_bus.write(0x00);
yangcq88517 1:58ab657cd515 16 i2c_bus.write(_volume);
yangcq88517 1:58ab657cd515 17 i2c_bus.write(_speed);
yangcq88517 1:58ab657cd515 18 i2c_bus.write(DEFAULT_SPEECH_PITCH);
yangcq88517 1:58ab657cd515 19 int i = 0;
yangcq88517 1:58ab657cd515 20 while (true) {
yangcq88517 1:58ab657cd515 21 i2c_bus.write(message[i++]);
yangcq88517 1:58ab657cd515 22 if (message[i] == 0x00)
yangcq88517 1:58ab657cd515 23 break;
yangcq88517 1:58ab657cd515 24 }
yangcq88517 1:58ab657cd515 25 i2c_bus.write(0x00);
yangcq88517 1:58ab657cd515 26 i2c_bus.stop();
yangcq88517 0:2326b6172834 27
yangcq88517 1:58ab657cd515 28 i2c_bus.start();
yangcq88517 1:58ab657cd515 29 i2c_bus.write(DEFAULT_ADDRESS);
yangcq88517 1:58ab657cd515 30 i2c_bus.write(REGISTER_FOR_COMMAND);
yangcq88517 1:58ab657cd515 31 i2c_bus.write(SPEAK_OUT_THE_BUFFER);
yangcq88517 1:58ab657cd515 32 i2c_bus.stop();
yangcq88517 0:2326b6172834 33 }
yangcq88517 0:2326b6172834 34
yangcq88517 1:58ab657cd515 35 void SP03::setSpeed(char speed)
yangcq88517 0:2326b6172834 36 {
yangcq88517 1:58ab657cd515 37 _speed = speed;
yangcq88517 1:58ab657cd515 38 }
yangcq88517 1:58ab657cd515 39
yangcq88517 1:58ab657cd515 40 void SP03::setVolume(char volume)
yangcq88517 1:58ab657cd515 41 {
yangcq88517 1:58ab657cd515 42 _volume = volume;
yangcq88517 0:2326b6172834 43 }
yangcq88517 0:2326b6172834 44
yangcq88517 1:58ab657cd515 45 bool SP03::isSpeaking()
yangcq88517 0:2326b6172834 46 {
yangcq88517 1:58ab657cd515 47 i2c_bus.start();
yangcq88517 1:58ab657cd515 48 i2c_bus.write(DEFAULT_ADDRESS);
yangcq88517 1:58ab657cd515 49 i2c_bus.write(REGISTER_FOR_COMMAND);
yangcq88517 1:58ab657cd515 50 i2c_bus.stop();
yangcq88517 1:58ab657cd515 51
yangcq88517 1:58ab657cd515 52 i2c_bus.start();
yangcq88517 1:58ab657cd515 53 i2c_bus.write(DEFAULT_ADDRESS | 0x01);
yangcq88517 1:58ab657cd515 54 int value = i2c_bus.read(0x00);
yangcq88517 1:58ab657cd515 55 i2c_bus.stop();
yangcq88517 1:58ab657cd515 56
yangcq88517 1:58ab657cd515 57 if (value == 0x00)
yangcq88517 0:2326b6172834 58 return false;
yangcq88517 0:2326b6172834 59 else return true;
yangcq88517 0:2326b6172834 60 }