SP03 Text to Speech Synthesizer
SP03.cpp@1:58ab657cd515, 2016-03-07 (annotated)
- Committer:
- yangcq88517
- Date:
- Mon Mar 07 14:38:55 2016 +0000
- Revision:
- 1:58ab657cd515
- Parent:
- 0:2326b6172834
improvment
Who changed what in which revision?
User | Revision | Line number | New 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 | } |