Working read code with mode button

Dependencies:   SDFileSystem emic2 mbed-rtos mbed

Fork of BAT_senior_design_Testnew by BAT

Revision:
43:82d67fb53e61
Parent:
42:44a898adef26
--- a/main.cpp	Mon Dec 04 23:25:38 2017 +0000
+++ b/main.cpp	Tue Dec 05 03:31:58 2017 +0000
@@ -22,9 +22,17 @@
 DigitalIn pb5 (p16);
 PwmOut myservo6(p26);
 DigitalIn pb6 (p15);
+DigitalIn read (p29);
 
+
+//DigitalOut led1(LED1);
+//DigitalOut led3(LED3);
+//DigitalOut led4(LED4);
+
+//DigitalIn linpot(p9);
 Serial pc(USBTX, USBRX);
 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
+//button button1(myservo, pb1, linpot);
 button button1(myservo, pb1, 1);
 button button2(myservo2, pb2, 2);
 button button3(myservo3, pb3, 3);
@@ -50,11 +58,14 @@
 int count = 0;
 
 // THREADS
+
 void button_thread()
 {
     while(true) {
         state = button1.updateState();
         state6 = button6.updateState();
+
+        //led4 = button1.getLp();
         Thread::wait(100); // wait till thread is done
     }
 }
@@ -67,6 +78,7 @@
     }
 }
 
+// thread for the custom button
 void button3_thread()
 {
     while(true) {
@@ -75,6 +87,7 @@
     }
 }
 
+// thread for the custom button
 void button4_thread()
 {
     while(true) {
@@ -83,6 +96,7 @@
     }
 }
 
+// thread for the custom button
 void button5_thread()
 {
     while(true) {
@@ -91,6 +105,7 @@
     }
 }
 
+// thread for the custom button
 void button6_thread()
 {
     while(true) {
@@ -106,26 +121,40 @@
 
 void start_thread()
 {
+    // read pb_start
+    // if 1
     start = 1;
+    //pc.printf("start %d ", start);
+    // else 0
     Thread::wait(500); // wait till thread is done
 }
 
+
 int main()
 {
-    // SETUP; pull up the pushbutton to prevent bouncing
+    // SETUP
+    // pull up the pushbutton to prevent bouncing
     pb1.mode(PullUp);
     pb2.mode(PullUp);
     pb3.mode(PullUp);
     pb4.mode(PullUp);
     pb5.mode(PullUp);
     pb6.mode(PullUp);
+    read.mode(PullUp);
     wait(.001);
 
-    // servo setup up function; servos begin at 30 degrees
+    // servos begin at 30 degrees
+    // replace with a button setup function
     buttonarr.setup();
+    //buttonarr.setMode();
+
+    //led1 = 1;
+    //led2 = 1;
+
 
     // PARSE INPUT FILE FOR LETTERS AND WORDS
     char delimiter = ',';
+    // TODO: fix the letters
     string letter[2];
     string word[2];
     char check;
@@ -133,10 +162,14 @@
     string tempword = "";
     int counter = 0;
     FILE *fp = fopen("/sd/plan.txt", "r"); //create file
+    if(fp == NULL) {
+        //pc.printf("Could not open file for write\n");
+    }
     check = fgetc(fp); //grabs a char from file
     while(check != '\n') {  //while not at the end of line for letters
         if((check == delimiter) && (temp.length() == 1)) {  //at a comma and have a letter stored
             letter[counter] = temp; //write letter
+            //pc.printf("Letter: %s \n", letter[counter]);
             counter = counter + 1;  //increment counter
         } else {
             temp = check;   //store letter
@@ -148,6 +181,7 @@
     while(!feof(fp)) {  //while not at the end of line for words
         if(check == delimiter) {  //when at the comma at the end of a word
             word[counter] = tempword;   //write word
+            //pc.printf("Word: %s \n", word[counter]);
             tempword = "";
             counter = counter + 1;  //increment counter
         } else {
@@ -156,54 +190,62 @@
         check = fgetc(fp);  //grabs next char
     }
     fclose(fp); //close file
-    
-    //INITIALIZE THREADS
+
     Thread t1(button_thread);
     Thread t2(button2_thread);
     Thread t3(button3_thread);
     Thread t4(button4_thread);
     Thread t5(button5_thread);
+    //Thread t6(button6_thread);
     t1.start(button_thread);
     t2.start(button2_thread);
     t3.start(button3_thread);
     t4.start(button4_thread);
     t5.start(button5_thread);
-
+    //t6.start(button6_thread);
     char currletter;
     int lettersize = sizeof(letter)/sizeof(letter[0]);
+    //pc.printf("lettersize: %d", lettersize);
     int type = 0;
 
     //TEXT-TO-SPEECH LOGIC
-    myTTS.volume(18); //max volume is 18
+    myTTS.volume(18); //max volume
     myTTS.voice(2);
 
+    //myTTS.speakf("SWelcome to Bat, the Braille Assistive Teacher. This device will help you learn how to write and type braille.\r");  // Send the desired string to convert to speech
+    //myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
     char* braille;
     char userinput;
 
     // INITIAL RESET
-    if (type == 0) {
-        int reset = 1;
-        myTTS.speakf("SWelcome to Bat, the Braille Assistive Teacher. This device will help you learn how to write and type braille. Please setup the device by pressing down all the buttons.\r");
-        myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
-        while(reset == 1) {
-            wait(3);
-            sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
-                    button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
-            userinput = buttonarr.checkVal(braille);
-            if(userinput == 'Z') {
-                reset = 0;
-            } else {
-                myTTS.speakf("SSetup failed. Please try again.\r");
-                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
-            }
+    //if (type == 0) {
+    int reset = 1;
+    while(read==0) {}
+    myTTS.speakf("SWelcome to Bat, the Braille Assistive Teacher. This device will help you learn how to write and type braille. Please setup the device by pressing down all the buttons.\r");
+    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+    //while(read==0) {}
+    while(reset == 1) {
+        wait(2);
+        sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
+                button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
+        userinput = buttonarr.checkVal(braille);
+        if(userinput == 'Z') {
+            reset = 0;
+        } else {
+            //reset = 0;
+            myTTS.speakf("SSetup failed. Please try again.\r");
+            myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
         }
     }
+    //}
 
     for(int i = 0; i < lettersize; i++) {  //iterate through the letter array
         char currletter = letter[i][0];
+        //pc.printf("letter: %c \n", currletter);
         int* pinsup = buttonarr.pinsUp(currletter);
         int currpress;
         int numpinsups = pinsup[0];  // size of array is first element of pinsup
+        //string presspin;
         string presspin = "STo write the letter ";
         presspin = presspin + letter[i];
         presspin = presspin + ", press buttons";
@@ -234,21 +276,23 @@
         myTTS.speakf("%s\r",presspin);
         myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
         wait(2);
+        //pc.printf("hello");
 
+        //WORKS UP TO HERE
         char* braille;
         char userinput;
         char* oldbraille;
-        if (type == 0) {
-            sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
-                    button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
-            userinput = buttonarr.checkVal(braille);
-        } else {
+        //if (type == 0) {
+        sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
+                button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
+        userinput = buttonarr.checkVal(braille);
+        /*} else {
             // TYPE MODE
             sprintf(braille, "%d%d%d%d%d%d", !button1.getPress(), !button2.getPress(),
                     !button3.getPress(), !button4.getPress(), !button5.getPress(), !button6.getPress());
             userinput = buttonarr.checkVal(braille);
             oldbraille = braille;
-        }
+        }*/
 
         int currwrong;
         string wrongpin;
@@ -257,9 +301,13 @@
         int* wrongpins = buttonarr.wrongPins(braille, currletter);
         int test = 1;
         while(test == 1) {
+            //pc.printf("In while loop");
             wrongpin = "SYour answer is incorrect. Buttons";
+            //wrongpin = wrongpin + letter[i];
+            //wrongpin = wrongpin + ", press pins";
             for (int j = 1; j < wrongpins[0]; j++) {  // get what pins are wrong
                 currwrong = wrongpins[j];
+                //pc.printf("currwrong: %d", currwrong);
                 switch (currwrong) {
                     case 1:
                         wrongpin = wrongpin + " 1,";
@@ -281,16 +329,27 @@
                         break;
                 }
             }
+            //pc.printf("end for loop");
             if (wrongpins[0] > 1) {
                 wrongpin = wrongpin + " are wrong. Please try again.";
                 myTTS.speakf("%s\r",wrongpin);
                 myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
                 wait(2);
                 //UPDATE THE PINS THAT ARE WRONG BY CHECKING AGAIN BELOW
+                //char* braille;
+                //if (type == 0) {
                 sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
-                button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
+                        button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
                 userinput = buttonarr.checkVal(braille);
-                
+                /*} else {
+                    // TYPE MODE
+                    sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
+                            button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
+                    userinput = buttonarr.checkVal(braille);
+                }*/
+                // get input
+                //pc.printf("Your input was: %c", userinput);
+
                 // check result
                 wrongpins = buttonarr.wrongPins(braille, currletter);
             } else {
@@ -300,24 +359,56 @@
             }
         }
 
-        if (type == 0) {
-            int reset = 1;
-            myTTS.speakf("SNow reset by pressing down all the buttons.\r");
-            myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
-            while(reset == 1) {
-                char* braille;
-                sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
-                        button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
-                userinput = buttonarr.checkVal(braille);
-                if(userinput == 'Z') {
-                    reset = 0;
-                } else {
-                    wait(2);
-                    myTTS.speakf("SPlease try again.\r");
-                    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
-                }
+        //if (type == 0) {
+        int reset = 1;
+        myTTS.speakf("SNow reset by repressing down all the buttons.\r");
+        myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+        while(reset == 1) {
+            char* braille;
+            sprintf(braille, "%d%d%d%d%d%d", button1.getPress(), button2.getPress(),
+                    button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());
+            userinput = buttonarr.checkVal(braille);
+            if(userinput == 'Z') {
+                reset = 0;
+            } else {
+                wait(2);
+                myTTS.speakf("SPlease try again.\r");
+                myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
             }
         }
+        //}
+        //pc.printf("wrongpins are: %d", wrongpins[0]);
+    }
+
+// WORD CODE
+
+// WORD COUNTER
+// go through each word
+// go through each letter in the word
+// get user input
+// when buttons reset - save previous letter
+// loop until submit button is pressed
+// compare words
+// check what letters were wrong
+// give wrong letters - correct spelling is...
+
+    //SETTING UP SERVOS TO RELEASE FOR TYPING MODE FREEZES THE CODE
+    //buttonarr.setup(); //Reset servos so that buttons are up for typing mode
+    string currword;
+    int wordsize = sizeof(word)/sizeof(word[0]);
+
+    myTTS.speakf("SThis is the end of the module.\r");  // Send the desired string to convert to speech
+    myTTS.ready(); //ready waits for speech to finish from last command with a ":" response
+    for(int i = 0; i < wordsize; i++) {  //iterate through the word array
+        currword = word[i];
+        string presspin = "To type the word ";
+        presspin = presspin + word[i];
+        presspin = presspin + ", type letters ";
+        for (int j = 0; j < currword.length(); j++) {
+            presspin = presspin + ", "+ currword[j];
+        }
+        //myTTS.speakf("S%s\r", presspin); //UNCOMMENTING HERE WILL MESS UP READ/WRITE CODE
+        //myTTS.ready();
     }
 
 // MAIN THREAD