Trying to separate read/write mode from typing mode

Dependencies:   SDFileSystem emic2 mbed-rtos mbed

Fork of BAT_senior_design_Nhi by BAT

Committer:
aismail1997
Date:
Mon Dec 04 19:57:53 2017 +0000
Revision:
42:bdb6f132a609
Parent:
41:560ee7866781
Letters in typing mode;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aismail1997 0:9eda4611081a 1 #include "mbed.h"
aismail1997 6:1aa86ad19af9 2 #include "rtos.h"
aismail1997 9:418a4437a693 3 #include "SDFileSystem.h"
aismail1997 10:21268d8bf979 4 #include "button.h"
aismail1997 19:ceac47be2e64 5 #include "buttonArray.h"
aismail1997 23:23970cf718ee 6 #include <string>
aismail1997 23:23970cf718ee 7 #include <iostream>
aismail1997 28:3c4ebc4fde0f 8 #include "emic2.h"
aismail1997 23:23970cf718ee 9
aismail1997 23:23970cf718ee 10 using namespace std;
aismail1997 3:9ed43e974156 11
aismail1997 13:b80dde24e9bc 12 // DEFINE I/O
aismail1997 0:9eda4611081a 13 PwmOut myservo(p21);
aismail1997 0:9eda4611081a 14 DigitalIn pb1 (p20);
aismail1997 14:581a3b02f4c3 15 PwmOut myservo2(p22);
aismail1997 14:581a3b02f4c3 16 DigitalIn pb2 (p19);
aismail1997 18:d14bf57f435b 17 PwmOut myservo3(p23);
aismail1997 18:d14bf57f435b 18 DigitalIn pb3 (p18);
aismail1997 18:d14bf57f435b 19 PwmOut myservo4(p24);
aismail1997 18:d14bf57f435b 20 DigitalIn pb4 (p17);
aismail1997 18:d14bf57f435b 21 PwmOut myservo5(p25);
aismail1997 18:d14bf57f435b 22 DigitalIn pb5 (p16);
aismail1997 18:d14bf57f435b 23 PwmOut myservo6(p26);
aismail1997 18:d14bf57f435b 24 DigitalIn pb6 (p15);
aismail1997 18:d14bf57f435b 25
aismail1997 18:d14bf57f435b 26 //DigitalOut led1(LED1);
aismail1997 18:d14bf57f435b 27 //DigitalOut led3(LED3);
aismail1997 22:6931917c70cd 28 //DigitalOut led4(LED4);
aismail1997 14:581a3b02f4c3 29
nnguyen45 32:e87bb6e83072 30 //DigitalIn linpot(p9);
nnguyen45 33:3090ec93b4aa 31 Serial pc(USBTX, USBRX);
aismail1997 23:23970cf718ee 32 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
aismail1997 21:c5df903f068a 33 //button button1(myservo, pb1, linpot);
aismail1997 21:c5df903f068a 34 button button1(myservo, pb1, 1);
aismail1997 21:c5df903f068a 35 button button2(myservo2, pb2, 2);
aismail1997 21:c5df903f068a 36 button button3(myservo3, pb3, 3);
aismail1997 21:c5df903f068a 37 button button4(myservo4, pb4, 4);
aismail1997 21:c5df903f068a 38 button button5(myservo5, pb5, 5);
aismail1997 21:c5df903f068a 39 button button6(myservo6, pb6, 6);
aismail1997 4:cc181f8f2bd1 40
aismail1997 19:ceac47be2e64 41 buttonArray buttonarr(button1, button2, button3, button4, button5, button6);
aismail1997 19:ceac47be2e64 42
aismail1997 28:3c4ebc4fde0f 43 emic2 myTTS(p28, p27); //serial RX,TX pins to emic
aismail1997 28:3c4ebc4fde0f 44
aismail1997 13:b80dde24e9bc 45 // INITIALIZE VARIABLES
aismail1997 13:b80dde24e9bc 46 // add mode, reset buttons
aismail1997 9:418a4437a693 47 int start = 0;
aismail1997 9:418a4437a693 48 int submit = 0;
aismail1997 18:d14bf57f435b 49 // Buttons begins in up state
aismail1997 17:08c575082052 50 int state = 0;
aismail1997 18:d14bf57f435b 51 int state2 = 0;
aismail1997 18:d14bf57f435b 52 int state3 = 0;
aismail1997 18:d14bf57f435b 53 int state4 = 0;
aismail1997 18:d14bf57f435b 54 int state5 = 0;
aismail1997 18:d14bf57f435b 55 int state6 = 0;
aismail1997 14:581a3b02f4c3 56 int count = 0;
aismail1997 6:1aa86ad19af9 57
aismail1997 6:1aa86ad19af9 58 // THREADS
aismail1997 13:b80dde24e9bc 59
aismail1997 6:1aa86ad19af9 60 void button_thread()
aismail1997 4:cc181f8f2bd1 61 {
aismail1997 14:581a3b02f4c3 62 while(true) {
aismail1997 19:ceac47be2e64 63 state = button1.updateState();
nnguyen45 33:3090ec93b4aa 64 state6 = button6.updateState();
nnguyen45 33:3090ec93b4aa 65
aismail1997 21:c5df903f068a 66 //led4 = button1.getLp();
aismail1997 19:ceac47be2e64 67 Thread::wait(100); // wait till thread is done
aismail1997 10:21268d8bf979 68 }
aismail1997 14:581a3b02f4c3 69 }
aismail1997 14:581a3b02f4c3 70
aismail1997 14:581a3b02f4c3 71 void button2_thread()
aismail1997 14:581a3b02f4c3 72 {
aismail1997 14:581a3b02f4c3 73 while(true) {
aismail1997 19:ceac47be2e64 74 state2 = button2.updateState();
aismail1997 40:85be3490d3a7 75 //state5 = button5.updateState();
nnguyen45 32:e87bb6e83072 76 Thread::wait(200); // wait till thread is done
aismail1997 10:21268d8bf979 77 }
aismail1997 4:cc181f8f2bd1 78 }
aismail1997 4:cc181f8f2bd1 79
aismail1997 18:d14bf57f435b 80 // thread for the custom button
aismail1997 18:d14bf57f435b 81 void button3_thread()
aismail1997 18:d14bf57f435b 82 {
aismail1997 18:d14bf57f435b 83 while(true) {
aismail1997 19:ceac47be2e64 84 state3 = button3.updateState();
aismail1997 40:85be3490d3a7 85 //state5 = button4.updateState();
nnguyen45 32:e87bb6e83072 86 Thread::wait(200); // wait till thread is done
aismail1997 18:d14bf57f435b 87 }
aismail1997 18:d14bf57f435b 88 }
aismail1997 18:d14bf57f435b 89
aismail1997 18:d14bf57f435b 90 // thread for the custom button
aismail1997 18:d14bf57f435b 91 void button4_thread()
aismail1997 18:d14bf57f435b 92 {
aismail1997 18:d14bf57f435b 93 while(true) {
aismail1997 19:ceac47be2e64 94 state4 = button4.updateState();
nnguyen45 32:e87bb6e83072 95 Thread::wait(200); // wait till thread is done
aismail1997 18:d14bf57f435b 96 }
aismail1997 18:d14bf57f435b 97 }
aismail1997 18:d14bf57f435b 98
aismail1997 18:d14bf57f435b 99 // thread for the custom button
aismail1997 18:d14bf57f435b 100 void button5_thread()
aismail1997 18:d14bf57f435b 101 {
aismail1997 18:d14bf57f435b 102 while(true) {
aismail1997 19:ceac47be2e64 103 state5 = button5.updateState();
nnguyen45 32:e87bb6e83072 104 Thread::wait(200); // wait till thread is done
aismail1997 18:d14bf57f435b 105 }
aismail1997 18:d14bf57f435b 106 }
aismail1997 18:d14bf57f435b 107
aismail1997 14:581a3b02f4c3 108
aismail1997 0:9eda4611081a 109 int main()
aismail1997 0:9eda4611081a 110 {
aismail1997 6:1aa86ad19af9 111 // SETUP
aismail1997 4:cc181f8f2bd1 112 // pull up the pushbutton to prevent bouncing
aismail1997 16:5c91af9b4e7c 113 pb1.mode(PullUp);
aismail1997 16:5c91af9b4e7c 114 pb2.mode(PullUp);
aismail1997 18:d14bf57f435b 115 pb3.mode(PullUp);
aismail1997 18:d14bf57f435b 116 pb4.mode(PullUp);
aismail1997 18:d14bf57f435b 117 pb5.mode(PullUp);
aismail1997 18:d14bf57f435b 118 pb6.mode(PullUp);
aismail1997 30:79cdf893c8b8 119 wait(.001);
aismail1997 15:7e9308d14faa 120
aismail1997 23:23970cf718ee 121 // PARSE INPUT FILE FOR LETTERS AND WORDS
aismail1997 23:23970cf718ee 122 char delimiter = ',';
aismail1997 29:b9bd85682db1 123 // TODO: fix the letters
aismail1997 23:23970cf718ee 124 string letter[2];
aismail1997 23:23970cf718ee 125 string word[2];
aismail1997 23:23970cf718ee 126 char check;
aismail1997 23:23970cf718ee 127 string temp;
aismail1997 23:23970cf718ee 128 string tempword = "";
aismail1997 23:23970cf718ee 129 int counter = 0;
aismail1997 23:23970cf718ee 130 FILE *fp = fopen("/sd/plan.txt", "r"); //create file
aismail1997 23:23970cf718ee 131 if(fp == NULL) {
aismail1997 30:79cdf893c8b8 132 //pc.printf("Could not open file for write\n");
aismail1997 23:23970cf718ee 133 }
aismail1997 23:23970cf718ee 134 check = fgetc(fp); //grabs a char from file
aismail1997 23:23970cf718ee 135 while(check != '\n') { //while not at the end of line for letters
aismail1997 23:23970cf718ee 136 if((check == delimiter) && (temp.length() == 1)) { //at a comma and have a letter stored
aismail1997 23:23970cf718ee 137 letter[counter] = temp; //write letter
aismail1997 23:23970cf718ee 138 counter = counter + 1; //increment counter
aismail1997 23:23970cf718ee 139 } else {
aismail1997 23:23970cf718ee 140 temp = check; //store letter
aismail1997 23:23970cf718ee 141 }
aismail1997 23:23970cf718ee 142 check = fgetc(fp); //grabs next char
aismail1997 23:23970cf718ee 143 }
aismail1997 23:23970cf718ee 144 counter = 0; //reset counter
aismail1997 23:23970cf718ee 145 check = fgetc(fp); //grabs next char
aismail1997 23:23970cf718ee 146 while(!feof(fp)) { //while not at the end of line for words
aismail1997 23:23970cf718ee 147 if(check == delimiter) { //when at the comma at the end of a word
aismail1997 23:23970cf718ee 148 word[counter] = tempword; //write word
aismail1997 23:23970cf718ee 149 tempword = "";
aismail1997 23:23970cf718ee 150 counter = counter + 1; //increment counter
aismail1997 23:23970cf718ee 151 } else {
aismail1997 23:23970cf718ee 152 tempword = tempword + check; //concatenate letters to build word
aismail1997 23:23970cf718ee 153 }
aismail1997 23:23970cf718ee 154 check = fgetc(fp); //grabs next char
aismail1997 23:23970cf718ee 155 }
aismail1997 23:23970cf718ee 156 fclose(fp); //close file
aismail1997 14:581a3b02f4c3 157
nnguyen45 33:3090ec93b4aa 158 Thread t1(button_thread);
nnguyen45 33:3090ec93b4aa 159 Thread t2(button2_thread);
nnguyen45 33:3090ec93b4aa 160 Thread t3(button3_thread);
nnguyen45 33:3090ec93b4aa 161 Thread t4(button4_thread);
nnguyen45 33:3090ec93b4aa 162 Thread t5(button5_thread);
nnguyen45 33:3090ec93b4aa 163 //Thread t6(button6_thread);
nnguyen45 33:3090ec93b4aa 164 t1.start(button_thread);
nnguyen45 33:3090ec93b4aa 165 t2.start(button2_thread);
nnguyen45 33:3090ec93b4aa 166 t3.start(button3_thread);
nnguyen45 33:3090ec93b4aa 167 t4.start(button4_thread);
nnguyen45 33:3090ec93b4aa 168 t5.start(button5_thread);
nnguyen45 33:3090ec93b4aa 169 //t6.start(button6_thread);
aismail1997 34:1248dfa0740b 170
aismail1997 41:560ee7866781 171 //char currletter;
aismail1997 23:23970cf718ee 172 int lettersize = sizeof(letter)/sizeof(letter[0]);
aismail1997 41:560ee7866781 173 //int type = 0;
aismail1997 34:1248dfa0740b 174
aismail1997 28:3c4ebc4fde0f 175 //TEXT-TO-SPEECH LOGIC
aismail1997 41:560ee7866781 176 myTTS.volume(3); //max volume is 18
nnguyen45 31:e5024aeca3a7 177 myTTS.voice(2);
aismail1997 28:3c4ebc4fde0f 178
aismail1997 42:bdb6f132a609 179
aismail1997 41:560ee7866781 180 // SETUP
aismail1997 42:bdb6f132a609 181 buttonarr.setup(); //Reset servos so that buttons are up for typing mode
aismail1997 41:560ee7866781 182 button1.setMode(1);
aismail1997 41:560ee7866781 183 button2.setMode(1);
aismail1997 41:560ee7866781 184 button3.setMode(1);
aismail1997 41:560ee7866781 185 button4.setMode(1);
aismail1997 41:560ee7866781 186 button5.setMode(1);
aismail1997 41:560ee7866781 187 button6.setMode(1);
aismail1997 41:560ee7866781 188
aismail1997 41:560ee7866781 189 // LETTER CODE
aismail1997 41:560ee7866781 190 // tell how to type letter
aismail1997 41:560ee7866781 191 // wait for input
aismail1997 41:560ee7866781 192 // check if correct letter
aismail1997 41:560ee7866781 193 // feedback
aismail1997 41:560ee7866781 194 // loop
aismail1997 41:560ee7866781 195
aismail1997 41:560ee7866781 196 for(int i = 0; i < lettersize; i++) { //iterate through the letter array
aismail1997 41:560ee7866781 197 char currletter = letter[i][0];
aismail1997 41:560ee7866781 198 int* pinsup = buttonarr.pinsUp(currletter);
aismail1997 41:560ee7866781 199 int currpress;
aismail1997 41:560ee7866781 200 int numpinsups = pinsup[0]; // size of array is first element of pinsup
aismail1997 41:560ee7866781 201 string presspin = "STo write the letter ";
aismail1997 41:560ee7866781 202 presspin = presspin + letter[i];
aismail1997 41:560ee7866781 203 presspin = presspin + ", press buttons";
aismail1997 41:560ee7866781 204
aismail1997 41:560ee7866781 205 for (int j = 1; j < numpinsups; j++) { // get what pins to press
aismail1997 41:560ee7866781 206 currpress = pinsup[j];
aismail1997 41:560ee7866781 207 switch (currpress) {
aismail1997 41:560ee7866781 208 case 1:
aismail1997 41:560ee7866781 209 presspin = presspin + " 1,";
aismail1997 41:560ee7866781 210 break;
aismail1997 41:560ee7866781 211 case 2:
aismail1997 41:560ee7866781 212 presspin = presspin + " 2,";
aismail1997 41:560ee7866781 213 break;
aismail1997 41:560ee7866781 214 case 3:
aismail1997 41:560ee7866781 215 presspin = presspin + " 3,";
aismail1997 41:560ee7866781 216 break;
aismail1997 41:560ee7866781 217 case 4:
aismail1997 41:560ee7866781 218 presspin = presspin + " 4,";
aismail1997 41:560ee7866781 219 break;
aismail1997 41:560ee7866781 220 case 5:
aismail1997 41:560ee7866781 221 presspin = presspin + " 5,";
aismail1997 41:560ee7866781 222 break;
aismail1997 41:560ee7866781 223 case 6:
aismail1997 41:560ee7866781 224 presspin = presspin + " 6,";
aismail1997 41:560ee7866781 225 break;
aismail1997 41:560ee7866781 226 }
aismail1997 41:560ee7866781 227 }
aismail1997 41:560ee7866781 228 myTTS.speakf("%s\r",presspin);
aismail1997 41:560ee7866781 229 myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
aismail1997 41:560ee7866781 230 //wait(2);
aismail1997 41:560ee7866781 231
aismail1997 41:560ee7866781 232 //WORKS UP TO HERE
aismail1997 41:560ee7866781 233 char* braille;
aismail1997 41:560ee7866781 234 char* oldbraille;
aismail1997 41:560ee7866781 235
aismail1997 41:560ee7866781 236 // TYPE MODE
aismail1997 41:560ee7866781 237 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 238 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 239
aismail1997 41:560ee7866781 240 // wait for input
aismail1997 41:560ee7866781 241 while (strcmp(braille, "111111") == 0) {
aismail1997 41:560ee7866781 242 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 243 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 244 }
aismail1997 41:560ee7866781 245
aismail1997 41:560ee7866781 246 // while buttons have not been released
aismail1997 41:560ee7866781 247 int oldsum = 0;
aismail1997 41:560ee7866781 248 int sum = 0;
aismail1997 41:560ee7866781 249 while ((strcmp(braille, "111111") != 0) && (oldsum <= sum)) {
aismail1997 41:560ee7866781 250 oldbraille = braille;
aismail1997 41:560ee7866781 251 oldsum = sum;
aismail1997 41:560ee7866781 252 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 253 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 254 sum = button1.getPress() + button2.getPress() + button3.getPress() + button4.getPress()
aismail1997 41:560ee7866781 255 + button5.getPress() + button6.getPress();
aismail1997 41:560ee7866781 256 }
aismail1997 41:560ee7866781 257 braille = oldbraille;
aismail1997 41:560ee7866781 258
aismail1997 41:560ee7866781 259 int currwrong;
aismail1997 41:560ee7866781 260 string wrongpin;
aismail1997 41:560ee7866781 261 // check result
aismail1997 41:560ee7866781 262 int* wrongpins = buttonarr.wrongPins(braille, currletter);
aismail1997 41:560ee7866781 263 int test = 1;
aismail1997 41:560ee7866781 264 while(test == 1) {
aismail1997 41:560ee7866781 265 wrongpin = "SYour answer is incorrect. Buttons";
aismail1997 41:560ee7866781 266 for (int j = 1; j < wrongpins[0]; j++) { // get what pins are wrong
aismail1997 41:560ee7866781 267 currwrong = wrongpins[j];
aismail1997 41:560ee7866781 268 switch (currwrong) {
aismail1997 41:560ee7866781 269 case 1:
aismail1997 41:560ee7866781 270 wrongpin = wrongpin + " 1,";
aismail1997 41:560ee7866781 271 break;
aismail1997 41:560ee7866781 272 case 2:
aismail1997 41:560ee7866781 273 wrongpin = wrongpin + " 2,";
aismail1997 41:560ee7866781 274 break;
aismail1997 41:560ee7866781 275 case 3:
aismail1997 41:560ee7866781 276 wrongpin = wrongpin + " 3,";
aismail1997 41:560ee7866781 277 break;
aismail1997 41:560ee7866781 278 case 4:
aismail1997 41:560ee7866781 279 wrongpin = wrongpin + " 4,";
aismail1997 41:560ee7866781 280 break;
aismail1997 41:560ee7866781 281 case 5:
aismail1997 41:560ee7866781 282 wrongpin = wrongpin + " 5,";
aismail1997 41:560ee7866781 283 break;
aismail1997 41:560ee7866781 284 case 6:
aismail1997 41:560ee7866781 285 wrongpin = wrongpin + " 6,";
aismail1997 41:560ee7866781 286 break;
aismail1997 41:560ee7866781 287 }
aismail1997 41:560ee7866781 288 }
aismail1997 41:560ee7866781 289 if (wrongpins[0] > 1) {
aismail1997 41:560ee7866781 290 wrongpin = wrongpin + " are wrong. Please try again.";
aismail1997 41:560ee7866781 291 myTTS.speakf("%s\r",wrongpin);
aismail1997 41:560ee7866781 292 myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
aismail1997 41:560ee7866781 293
aismail1997 41:560ee7866781 294 //UPDATE THE PINS THAT ARE WRONG BY CHECKING AGAIN BELOW
aismail1997 41:560ee7866781 295
aismail1997 41:560ee7866781 296 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 297 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 298
aismail1997 41:560ee7866781 299 // wait for input
aismail1997 41:560ee7866781 300 while (strcmp(braille, "111111") == 0) {
aismail1997 41:560ee7866781 301 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 302 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 303 }
aismail1997 41:560ee7866781 304
aismail1997 41:560ee7866781 305 // while buttons have not been released
aismail1997 41:560ee7866781 306 int oldsum = 0;
aismail1997 41:560ee7866781 307 int sum = 0;
aismail1997 41:560ee7866781 308 while ((strcmp(braille, "111111") != 0) && (oldsum <= sum)) {
aismail1997 41:560ee7866781 309 oldbraille = braille;
aismail1997 41:560ee7866781 310 oldsum = sum;
aismail1997 41:560ee7866781 311 sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
aismail1997 41:560ee7866781 312 !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
aismail1997 41:560ee7866781 313 sum = button1.getPress() + button2.getPress() + button3.getPress() + button4.getPress()
aismail1997 41:560ee7866781 314 + button5.getPress() + button6.getPress();
aismail1997 41:560ee7866781 315 }
aismail1997 41:560ee7866781 316
aismail1997 41:560ee7866781 317 // check result
aismail1997 41:560ee7866781 318 wrongpins = buttonarr.wrongPins(braille, currletter);
aismail1997 41:560ee7866781 319 } else {
aismail1997 41:560ee7866781 320 test = 0;
aismail1997 41:560ee7866781 321 myTTS.speakf("SGood job!\r");
aismail1997 41:560ee7866781 322 myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
aismail1997 41:560ee7866781 323 }
aismail1997 41:560ee7866781 324 }
aismail1997 41:560ee7866781 325
aismail1997 39:8cc80f0b4398 326 }
aismail1997 37:d873136dfb12 327
aismail1997 37:d873136dfb12 328 // MAIN THREAD
aismail1997 37:d873136dfb12 329 while(true) {
aismail1997 22:6931917c70cd 330
aismail1997 14:581a3b02f4c3 331 Thread::wait(500); // wait till thread is done
aismail1997 0:9eda4611081a 332 }
aismail1997 0:9eda4611081a 333 }