Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem emic2 mbed-rtos mbed
Fork of BAT_senior_design_Testnew by
Revision 43:82d67fb53e61, committed 2017-12-05
- Comitter:
- nnguyen45
- Date:
- Tue Dec 05 03:31:58 2017 +0000
- Parent:
- 42:44a898adef26
- Commit message:
- Working with mode button
Changed in this revision
--- a/button.cpp Mon Dec 04 23:25:38 2017 +0000
+++ b/button.cpp Tue Dec 05 03:31:58 2017 +0000
@@ -10,15 +10,20 @@
// button constructor
button::button(PwmOut servo, DigitalIn pb, int id)
: servo(servo), pb(pb), state(0), press(0), id(id) {}
+/*button::button(PwmOut servo, DigitalIn pb, AnalogIn lp)
+ : servo(servo), pb(pb), linpot(lp), press(0), state(0) {}
+*/
+//Serial pc(USBTX, USBRX);
// FUNCTIONS
+
// get servo pin
PwmOut button::getServoPin()
{
return servo;
}
-// set button state
+// get servo pin
void button::setState(int mystate)
{
state = mystate;
@@ -29,6 +34,12 @@
press = mypress;
}
+// get servo pin
+/*void button::setMode(int mymode)
+{
+ mode = mymode;
+}*/
+
// get current state of the button
int button::getState()
{
@@ -43,23 +54,29 @@
int button::getPress()
{
+ //pc.printf("%d", press);
return press;
}
// get current state of the button
int button::getLp()
{
+ /* if (linpot < 2)
+ return 1;
+ else*/
return 0;
}
// move servo into the slot
void button::moveServoIn()
{
+ //myled = 1;
// rotate 90 degrees one way
for(int i=4; i<=7; i++) {
servo = i/100.0;
wait(0.01);
}
+ //press = 1;
switch (id) {
case 1:
led2 = 0;
@@ -97,6 +114,7 @@
// move servo out of the slot
void button::moveServoOut()
{
+ //myled = 0;
for(int i=7; i>4; i--) {
servo = i/100.0;
wait(0.01);
@@ -108,6 +126,7 @@
int button::updateState()
{
+ //myled = 0;
// state 0 - button is up, pb = 0
if (pb == 0 && state == 3) {
// nothing happens here, servo is still
@@ -118,6 +137,12 @@
moveServoIn();
state = 1;
press = 1;
+
+ // Speaker says stuff
+ /*myTTS.volume(18); //max volume
+ myTTS.speakf("S");//Speak command starts with "S"
+ myTTS.speakf("Hey, you pressed a pin!"); // Send the desired string to convert to speech
+ myTTS.speakf("\r"); //marks end of speak command*/
}
// state 2 - button is down, pb = 0
if (pb == 0 && state == 1) {
@@ -131,6 +156,9 @@
press = 0;
}
// state 4 - handle debouncing while button is down
+ /*if (pb1 = 1 && state == 2) {
+ count++;
+ }*/
return state;
}
--- a/button.h Mon Dec 04 23:25:38 2017 +0000
+++ b/button.h Tue Dec 05 03:31:58 2017 +0000
@@ -13,14 +13,20 @@
int state; // where is the button (0 - 4)
int press; // is the button up or down
int id; // this is the ID, each button should have a unique id
+ // int mode; // is the system in reading or typing mode
+ //AnalogIn linpot;
public:
// constructors
button(); // Default
button(PwmOut servo, DigitalIn pb, int id);
+ //button(PwmOut servo, DigitalIn pb, AnalogIn linpot);
+ // button(PwmOut servo, DigitalIn pb, AnalogIn linpot);
// functions
PwmOut getServoPin(); // get the servo pin
+ //void setState(int state); // set state
+ //void setMode(int mode); // set mode
void setState(int); // set what state the button is in - up or down
void setPress(int); // set the button press
void moveServoIn(); // move servo into the slot
--- a/buttonArray.cpp Mon Dec 04 23:25:38 2017 +0000
+++ b/buttonArray.cpp Tue Dec 05 03:31:58 2017 +0000
@@ -1,17 +1,27 @@
#include "mbed.h"
#include "buttonArray.h"
+// type mode
+
// buttonArray constructor
buttonArray::buttonArray(button b1, button b2, button b3, button b4, button b5, button b6)
: button1(b1), button2(b2), button3(b3), button4(b4), button5(b5), button6(b6) {}
+//Serial pc(USBTX, USBRX);
+
// FUNCTIONS
// map input braille to ascii
// braille respresentation here - https://en.wikipedia.org/wiki/Braille_ASCII
char buttonArray::checkVal(char* braille)
{
+ //pc.printf(" checkVal \n");
+ //char* braille;
char val = 'K';
+ /*int test = button1.getPress();
+ sprintf(braille, "%d%d%d%d%d%d", test, button2.getPress(),
+ button3.getPress(), button4.getPress(), button5.getPress(), button6.getPress());*/
+ //pc.printf(" %s \n", braille);
if (strcmp(braille, "000000") == 0) val = 'X';
if (strcmp(braille, "011111") == 0) val = 'A';
if (strcmp(braille, "001111") == 0) val = 'B';
@@ -23,12 +33,12 @@
if (strcmp(braille, "001101") == 0) val = 'H';
if (strcmp(braille, "101011") == 0) val = 'I';
if (strcmp(braille, "101001") == 0) val = 'J';
- //if (strcmp(braille, "011111") == 0) val = 'K';
- if (strcmp(braille, "000111") == 0) val = 'L';
+ /*if (strcmp(braille, "011111") == 0) val = 'K';
+ if (strcmp(braille, "000111") == 0) val = 'L';*/
if (strcmp(braille, "010011") == 0) val = 'M';
if (strcmp(braille, "010001") == 0) val = 'N';
if (strcmp(braille, "010101") == 0) val = 'O';
- if (strcmp(braille, "000011") == 0) val = 'P';
+ /*if (strcmp(braille, "000011") == 0) val = 'P';
if (strcmp(braille, "000001") == 0) val = 'Q';
if (strcmp(braille, "000101") == 0) val = 'R';
if (strcmp(braille, "100011") == 0) val = 'S';
@@ -36,11 +46,12 @@
if (strcmp(braille, "010110") == 0) val = 'U';
if (strcmp(braille, "000110") == 0) val = 'V';
if (strcmp(braille, "101000") == 0) val = 'W';
- //if (strcmp(braille, "010010") == 0) val = 'X';
+ if (strcmp(braille, "010010") == 0) val = 'X';
if (strcmp(braille, "010000") == 0) val = 'Y';
- //if (strcmp(braille, "010100") == 0) val = 'Z';
+ if (strcmp(braille, "010100") == 0) val = 'Z';*/
// check if reset
if (strcmp(braille, "111111") == 0) val = 'Z';
+ //pc.printf(" %c \n", val);
return val;
}
@@ -58,12 +69,12 @@
if (val == 'H') braille = "001101";
if (val == 'I') braille = "101011";
if (val == 'J') braille = "101001";
- //if (val == 'K') braille = "010111";
- if (val == 'L') braille = "000111";
+ /*if (val == 'K') braille = "011111";
+ if (val == 'L') braille = "000111";*/
if (val == 'M') braille = "010011";
if (val == 'N') braille = "010001";
if (val == 'O') braille = "010101";
- if (val == 'P') braille = "000011";
+ /*if (val == 'P') braille = "000011";
if (val == 'Q') braille = "000001";
if (val == 'R') braille = "000101";
if (val == 'S') braille = "100011";
@@ -71,9 +82,9 @@
if (val == 'U') braille = "010110";
if (val == 'V') braille = "000110";
if (val == 'W') braille = "101000";
- //if (val == 'X') braille = "010010";
+ if (val == 'X') braille = "010010";
if (val == 'Y') braille = "010000";
- //if (val == 'Z') braille = "010100";
+ if (val == 'Z') braille = "010100";*/
// check if reset
if (val == ' ') braille = "111111";
return braille;
@@ -83,6 +94,7 @@
int* buttonArray::pinsUp(char val)
{
int* pinsup;
+ //pinsup = new int[7];
char* braille = getBraille(val);
int j = 1;
for (int i = 0; i < 6; i++) {
@@ -100,13 +112,16 @@
// takes in current and actual char as input and returns status of each char
int* buttonArray::wrongPins(char* inarr, char actual)
{
+ // TODO check initial value of wrong
int* wrong;
wrong = new int[7];
char* actarr = getBraille(actual);
+ //pc.printf("wrong pins");
int j = 1;
for (int i = 0; i < 6; i++) {
if(inarr[i] != actarr[i]) {
wrong[j] = i+1;
+ //pc.printf("%d ", wrong[j]);
j++;
}
}
@@ -152,7 +167,8 @@
void buttonArray::setup()
{
- // servo setup function; servos begin at 30 degrees
+ // servos begin at 30 degrees
+ // replace with a button setup function
button1.setup();
button2.setup();
button3.setup();
--- 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
