EasyVR by Chad and Alty

Dependents:   Lab4

This is code for the EasyVR module that is used with Lab 4.

Committer:
cmiller86
Date:
Mon Oct 19 15:15:55 2015 +0000
Revision:
1:80db49d7e068
Parent:
0:5d93573903ed
EasyVR library for use with ECE 4180 lab 4.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cmiller86 0:5d93573903ed 1 #ifndef EASYVR_H_DEFINED
cmiller86 0:5d93573903ed 2 #define EASYVR_H_DEFINED
cmiller86 0:5d93573903ed 3
cmiller86 0:5d93573903ed 4 #include <mbed.h>
cmiller86 0:5d93573903ed 5
cmiller86 0:5d93573903ed 6 #define ARG_MIN '@'
cmiller86 0:5d93573903ed 7 #define ARG_MAX '`'
cmiller86 0:5d93573903ed 8 #define ARG_ZERO 'A'
cmiller86 0:5d93573903ed 9 #define ARG_ACK ' '
cmiller86 0:5d93573903ed 10
cmiller86 0:5d93573903ed 11 #define CMD_BREAK 'b'
cmiller86 0:5d93573903ed 12 #define CMD_SLEEP 's'
cmiller86 0:5d93573903ed 13 #define CMD_KNOB 'k'
cmiller86 0:5d93573903ed 14 #define CMD_LEVEL 'v'
cmiller86 0:5d93573903ed 15 #define CMD_LANGUAGE 'l'
cmiller86 0:5d93573903ed 16 #define CMD_TIMEOUT 'o'
cmiller86 0:5d93573903ed 17 #define CMD_RECOG_SI 'i'
cmiller86 0:5d93573903ed 18 #define CMD_TRAIN_SD 't'
cmiller86 0:5d93573903ed 19 #define CMD_GROUP_SD 'g'
cmiller86 0:5d93573903ed 20 #define CMD_UNGROUP_SD 'u'
cmiller86 0:5d93573903ed 21 #define CMD_RECOG_SD 'd'
cmiller86 0:5d93573903ed 22 #define CMD_ERASE_SD 'e'
cmiller86 0:5d93573903ed 23 #define CMD_NAME_SD 'n'
cmiller86 0:5d93573903ed 24 #define CMD_COUNT_SD 'c'
cmiller86 0:5d93573903ed 25 #define CMD_DUMP_SD 'p'
cmiller86 0:5d93573903ed 26 #define CMD_MASK_SD 'm'
cmiller86 0:5d93573903ed 27 #define CMD_RESETALL 'r'
cmiller86 0:5d93573903ed 28 #define CMD_ID 'x'
cmiller86 0:5d93573903ed 29 #define CMD_DELAY 'y'
cmiller86 0:5d93573903ed 30 #define CMD_BAUDRATE 'a'
cmiller86 0:5d93573903ed 31 #define CMD_QUERY_IO 'q'
cmiller86 0:5d93573903ed 32 #define CMD_PLAY_SX 'w'
cmiller86 0:5d93573903ed 33 #define CMD_DUMP_SX 'h'
cmiller86 0:5d93573903ed 34
cmiller86 0:5d93573903ed 35 #define STS_MASK 'k'
cmiller86 0:5d93573903ed 36 #define STS_COUNT 'c'
cmiller86 0:5d93573903ed 37 #define STS_AWAKEN 'w'
cmiller86 0:5d93573903ed 38 #define STS_DATA 'd'
cmiller86 0:5d93573903ed 39 #define STS_ERROR 'e'
cmiller86 0:5d93573903ed 40 #define STS_INVALID 'v'
cmiller86 0:5d93573903ed 41 #define STS_TIMEOUT 't'
cmiller86 0:5d93573903ed 42 #define STS_INTERR 'i'
cmiller86 0:5d93573903ed 43 #define STS_SUCCESS 'o'
cmiller86 0:5d93573903ed 44 #define STS_RESULT 'r'
cmiller86 0:5d93573903ed 45 #define STS_SIMILAR 's'
cmiller86 0:5d93573903ed 46 #define STS_OUT_OF_MEM 'm'
cmiller86 0:5d93573903ed 47 #define STS_ID 'x'
cmiller86 0:5d93573903ed 48 #define STS_PIN 'p'
cmiller86 0:5d93573903ed 49 #define STS_TABLE_SX 'd'
cmiller86 0:5d93573903ed 50
cmiller86 0:5d93573903ed 51 #define ERR_DATACOL_TOO_NOISY 0x3
cmiller86 0:5d93573903ed 52 #define ERR_DATACOL_TOO_SOFT 0x4
cmiller86 0:5d93573903ed 53 #define ERR_DATACOL_TOO_LOUD 0x5
cmiller86 0:5d93573903ed 54 #define ERR_DATACOL_TOO_SOON 0x6
cmiller86 0:5d93573903ed 55 #define ERR_DATACOL_TOO_CHOPPY 0x7
cmiller86 0:5d93573903ed 56 #define ERR_RECOG_FAIL 0x11
cmiller86 0:5d93573903ed 57 #define ERR_RECOG_LOW_CONF 0x12
cmiller86 0:5d93573903ed 58 #define ERR_RECOG_MID_CONF 0x13
cmiller86 0:5d93573903ed 59 #define ERR_RECOG_BAD_TEMPLATE 0x14
cmiller86 0:5d93573903ed 60 #define ERR_RECOG_DURATION 0x17
cmiller86 0:5d93573903ed 61 #define ERR_SYNTH_BAD_VERSION 0x4A
cmiller86 0:5d93573903ed 62 #define ERR_SYNTH_BAD_MSG 0x4E
cmiller86 0:5d93573903ed 63 #define ERR_NOT_A_WORD 0x80
cmiller86 0:5d93573903ed 64
cmiller86 0:5d93573903ed 65 #define i2a(i) ((char)((i)+ARG_ZERO))
cmiller86 0:5d93573903ed 66 #define a2i(a) ((int)((a)-ARG_ZERO))
cmiller86 0:5d93573903ed 67
cmiller86 0:5d93573903ed 68 extern Serial term;
cmiller86 0:5d93573903ed 69
cmiller86 1:80db49d7e068 70 /** EasyVR class for ECE 4180 lab 4.
cmiller86 1:80db49d7e068 71 * Used for interfacing with an EasyVR module.
cmiller86 1:80db49d7e068 72 *
cmiller86 1:80db49d7e068 73 * Example:
cmiller86 1:80db49d7e068 74 * @code
cmiller86 1:80db49d7e068 75 * #include "mbed.h"
cmiller86 1:80db49d7e068 76 * #include "easyvr.h"
cmiller86 1:80db49d7e068 77 *
cmiller86 1:80db49d7e068 78 * EasyVR easyVR( p27, p28 );
cmiller86 1:80db49d7e068 79 *
cmiller86 1:80db49d7e068 80 * int main()
cmiller86 1:80db49d7e068 81 * {
cmiller86 1:80db49d7e068 82 * easyVR.wakeup();
cmiller86 1:80db49d7e068 83 * easyVR.setup();
cmiller86 1:80db49d7e068 84 * }
cmiller86 1:80db49d7e068 85 * @endcode
cmiller86 1:80db49d7e068 86 */
cmiller86 0:5d93573903ed 87 class EasyVR
cmiller86 0:5d93573903ed 88 {
cmiller86 0:5d93573903ed 89 public:
cmiller86 1:80db49d7e068 90 /** EasyVR constructor.
cmiller86 1:80db49d7e068 91 * Initializes the serial interface for the EasyVR module.
cmiller86 1:80db49d7e068 92 *
cmiller86 1:80db49d7e068 93 * @param tx The TX pin on the mbed that should be used. This connects to the EasyVR's RX pin.
cmiller86 1:80db49d7e068 94 * @param rx The RX pin on the mbed that should be used. This connects to the EasyVR's TX pin.
cmiller86 1:80db49d7e068 95 */
cmiller86 0:5d93573903ed 96 EasyVR( PinName tx, PinName rx );
cmiller86 1:80db49d7e068 97
cmiller86 1:80db49d7e068 98 /** Wakes up the EasyVR by sending it a "break" signal until a reply
cmiller86 1:80db49d7e068 99 * of "success" has been received.
cmiller86 1:80db49d7e068 100 */
cmiller86 0:5d93573903ed 101 void wakeup();
cmiller86 1:80db49d7e068 102
cmiller86 1:80db49d7e068 103 /** Sets up the EasyVR. This includes ensuring the EasyVR module is a valid EasyVR device,
cmiller86 1:80db49d7e068 104 * setting its timeout value, and its language.
cmiller86 1:80db49d7e068 105 *
cmiller86 1:80db49d7e068 106 * @param lang The language to be used, as an encoded integer. i.e. 0 is 'A', 1 is 'B', and so forth.
cmiller86 1:80db49d7e068 107 * @param timeout The timeout to be used, in seconds, as an encoded integer.
cmiller86 1:80db49d7e068 108 */
cmiller86 0:5d93573903ed 109 void setup( int lang, int timeout );
cmiller86 1:80db49d7e068 110
cmiller86 1:80db49d7e068 111 /** Sends a single byte to the EasyVR. This is most commonly used to send commands
cmiller86 1:80db49d7e068 112 * and parameters for those commands. Note that this is just a wrapper for the EasyVR's
cmiller86 1:80db49d7e068 113 * serial interface's putc() function.
cmiller86 1:80db49d7e068 114 *
cmiller86 1:80db49d7e068 115 * @param byte The byte to be sent.
cmiller86 1:80db49d7e068 116 * @see Serial.putc()
cmiller86 1:80db49d7e068 117 */
cmiller86 0:5d93573903ed 118 void send( char byte );
cmiller86 1:80db49d7e068 119
cmiller86 1:80db49d7e068 120 /** Receives a single byte from the EasyVR. This is most commonly used to receive
cmiller86 1:80db49d7e068 121 * signals from the EasyVR. Note that this is just a wrapper for the EasyVR's serial
cmiller86 1:80db49d7e068 122 * interface's getc() function.
cmiller86 1:80db49d7e068 123 *
cmiller86 1:80db49d7e068 124 * Be aware that this is a blocking method - it will stall the program until a byte is received!
cmiller86 1:80db49d7e068 125 *
cmiller86 1:80db49d7e068 126 * @return A single byte from the EasyVR.
cmiller86 1:80db49d7e068 127 * @see Serial.putc()
cmiller86 1:80db49d7e068 128 */
cmiller86 0:5d93573903ed 129 char receive();
cmiller86 1:80db49d7e068 130
cmiller86 1:80db49d7e068 131 /** Sets the EasyVR's baud rate. For speech recognition, this must be exactly 9600.
cmiller86 1:80db49d7e068 132 *
cmiller86 1:80db49d7e068 133 * @param rate The baud rate the EasyVR should communicate with.
cmiller86 1:80db49d7e068 134 * @see Serial.baud()
cmiller86 1:80db49d7e068 135 */
cmiller86 0:5d93573903ed 136 void baud( int rate );
cmiller86 0:5d93573903ed 137
cmiller86 0:5d93573903ed 138 private:
cmiller86 0:5d93573903ed 139 Serial dev;
cmiller86 0:5d93573903ed 140 };
cmiller86 0:5d93573903ed 141
cmiller86 0:5d93573903ed 142 #endif // EASYVR_H_DEFINED