Mbed_Text_Reader using an SDcard reader, 12-key touch pad and uLCD.

Dependencies:   FATFileSystem mbed-rtos mbed

Committer:
ndureja3
Date:
Mon Mar 24 06:45:02 2014 +0000
Revision:
0:6bd0fe190ecc
24 Mar 2014

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ndureja3 0:6bd0fe190ecc 1 #include <mbed.h>
ndureja3 0:6bd0fe190ecc 2 #include <string>
ndureja3 0:6bd0fe190ecc 3 #include <list>
ndureja3 0:6bd0fe190ecc 4 #include <vector>
ndureja3 0:6bd0fe190ecc 5
ndureja3 0:6bd0fe190ecc 6 #include <mpr121.h> // Touchpad
ndureja3 0:6bd0fe190ecc 7 #include "SDFileSystem.h" // SD Card
ndureja3 0:6bd0fe190ecc 8 #include "uLCD_4DGL.h" // uLCD
ndureja3 0:6bd0fe190ecc 9
ndureja3 0:6bd0fe190ecc 10
ndureja3 0:6bd0fe190ecc 11 // Global Variables
ndureja3 0:6bd0fe190ecc 12 int wpm; // Words Per Minute
ndureja3 0:6bd0fe190ecc 13 int wpmChange;
ndureja3 0:6bd0fe190ecc 14 int play; // 1 -> Play || 0-> Pause
ndureja3 0:6bd0fe190ecc 15 int pause; // Slight pause
ndureja3 0:6bd0fe190ecc 16 int reset; // Reset Flag
ndureja3 0:6bd0fe190ecc 17 int menuX; // Menu cursor
ndureja3 0:6bd0fe190ecc 18 int menuY;
ndureja3 0:6bd0fe190ecc 19 int numFiles; // Number of files in dir
ndureja3 0:6bd0fe190ecc 20 int fileChoose; // File choose flag
ndureja3 0:6bd0fe190ecc 21
ndureja3 0:6bd0fe190ecc 22
ndureja3 0:6bd0fe190ecc 23
ndureja3 0:6bd0fe190ecc 24
ndureja3 0:6bd0fe190ecc 25 // Setup the Serial to the PC for debugging
ndureja3 0:6bd0fe190ecc 26 Serial pc(USBTX, USBRX);
ndureja3 0:6bd0fe190ecc 27
ndureja3 0:6bd0fe190ecc 28
ndureja3 0:6bd0fe190ecc 29 // ********** LCD **********
ndureja3 0:6bd0fe190ecc 30 uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object
ndureja3 0:6bd0fe190ecc 31
ndureja3 0:6bd0fe190ecc 32
ndureja3 0:6bd0fe190ecc 33 // ********** Touchpad **********
ndureja3 0:6bd0fe190ecc 34
ndureja3 0:6bd0fe190ecc 35 // Create the interrupt receiver object on pin 26
ndureja3 0:6bd0fe190ecc 36 InterruptIn interrupt(p26);
ndureja3 0:6bd0fe190ecc 37
ndureja3 0:6bd0fe190ecc 38 // Setup the i2c bus on pins 9 and 10
ndureja3 0:6bd0fe190ecc 39 I2C i2c(p9, p10);
ndureja3 0:6bd0fe190ecc 40
ndureja3 0:6bd0fe190ecc 41 // Setup the Mpr121:
ndureja3 0:6bd0fe190ecc 42 // constructor(i2c object, i2c address of the mpr121)
ndureja3 0:6bd0fe190ecc 43 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
ndureja3 0:6bd0fe190ecc 44
ndureja3 0:6bd0fe190ecc 45 void fallInterrupt()
ndureja3 0:6bd0fe190ecc 46 {
ndureja3 0:6bd0fe190ecc 47 double value = mpr121.read(0x00);
ndureja3 0:6bd0fe190ecc 48 value +=mpr121.read(0x01)<<8;
ndureja3 0:6bd0fe190ecc 49
ndureja3 0:6bd0fe190ecc 50 if(value!=0) {
ndureja3 0:6bd0fe190ecc 51 int val = log(value)/log(2.0);
ndureja3 0:6bd0fe190ecc 52 // uLCD.printf("%i\n",val);
ndureja3 0:6bd0fe190ecc 53
ndureja3 0:6bd0fe190ecc 54 switch(val) {
ndureja3 0:6bd0fe190ecc 55 case 0: // Repeat
ndureja3 0:6bd0fe190ecc 56 reset = 1;
ndureja3 0:6bd0fe190ecc 57 break;
ndureja3 0:6bd0fe190ecc 58 case 2: // Decrease speed
ndureja3 0:6bd0fe190ecc 59 if(wpm>100) {
ndureja3 0:6bd0fe190ecc 60 wpm -=100;
ndureja3 0:6bd0fe190ecc 61 wpmChange = 1;
ndureja3 0:6bd0fe190ecc 62 }
ndureja3 0:6bd0fe190ecc 63
ndureja3 0:6bd0fe190ecc 64 break;
ndureja3 0:6bd0fe190ecc 65 case 5: // Down
ndureja3 0:6bd0fe190ecc 66
ndureja3 0:6bd0fe190ecc 67 if(menuY<numFiles+1)
ndureja3 0:6bd0fe190ecc 68 menuY++;
ndureja3 0:6bd0fe190ecc 69 break;
ndureja3 0:6bd0fe190ecc 70 case 6: // Play/Pause
ndureja3 0:6bd0fe190ecc 71 play = (play==0) ? 1 :0;
ndureja3 0:6bd0fe190ecc 72 break;
ndureja3 0:6bd0fe190ecc 73 case 7: // Up
ndureja3 0:6bd0fe190ecc 74
ndureja3 0:6bd0fe190ecc 75 if(menuY>2)
ndureja3 0:6bd0fe190ecc 76 menuY--;
ndureja3 0:6bd0fe190ecc 77 break;
ndureja3 0:6bd0fe190ecc 78 case 8: // Enter
ndureja3 0:6bd0fe190ecc 79 fileChoose = 1;
ndureja3 0:6bd0fe190ecc 80 break;
ndureja3 0:6bd0fe190ecc 81 case 10: // Increase Speed
ndureja3 0:6bd0fe190ecc 82
ndureja3 0:6bd0fe190ecc 83 if(wpm<500) {
ndureja3 0:6bd0fe190ecc 84 wpm +=100;
ndureja3 0:6bd0fe190ecc 85 wpmChange = 1;
ndureja3 0:6bd0fe190ecc 86 }
ndureja3 0:6bd0fe190ecc 87
ndureja3 0:6bd0fe190ecc 88 break;
ndureja3 0:6bd0fe190ecc 89
ndureja3 0:6bd0fe190ecc 90 default:
ndureja3 0:6bd0fe190ecc 91 break;
ndureja3 0:6bd0fe190ecc 92 }
ndureja3 0:6bd0fe190ecc 93
ndureja3 0:6bd0fe190ecc 94
ndureja3 0:6bd0fe190ecc 95 }
ndureja3 0:6bd0fe190ecc 96
ndureja3 0:6bd0fe190ecc 97 }
ndureja3 0:6bd0fe190ecc 98
ndureja3 0:6bd0fe190ecc 99 // ********** SD Card **********
ndureja3 0:6bd0fe190ecc 100 SDFileSystem sd(p5, p6, p7, p8, "sd");
ndureja3 0:6bd0fe190ecc 101
ndureja3 0:6bd0fe190ecc 102 //read all directory and file names in current directory into filename vector
ndureja3 0:6bd0fe190ecc 103 vector<string> filenames;
ndureja3 0:6bd0fe190ecc 104 void read_file_names(char *dir)
ndureja3 0:6bd0fe190ecc 105 {
ndureja3 0:6bd0fe190ecc 106 DIR *dp;
ndureja3 0:6bd0fe190ecc 107 struct dirent *dirp;
ndureja3 0:6bd0fe190ecc 108 dp = opendir(dir);
ndureja3 0:6bd0fe190ecc 109 while((dirp = readdir(dp)) != NULL) {
ndureja3 0:6bd0fe190ecc 110 filenames.push_back(string(dirp->d_name));
ndureja3 0:6bd0fe190ecc 111 }
ndureja3 0:6bd0fe190ecc 112 closedir(dp);
ndureja3 0:6bd0fe190ecc 113 }
ndureja3 0:6bd0fe190ecc 114
ndureja3 0:6bd0fe190ecc 115
ndureja3 0:6bd0fe190ecc 116 // Function to print the words per minute on uLCD
ndureja3 0:6bd0fe190ecc 117 void printWPM()
ndureja3 0:6bd0fe190ecc 118 {
ndureja3 0:6bd0fe190ecc 119 uLCD.text_width(1);
ndureja3 0:6bd0fe190ecc 120 uLCD.text_height(2);
ndureja3 0:6bd0fe190ecc 121 uLCD.locate(0,7);
ndureja3 0:6bd0fe190ecc 122 uLCD.color(WHITE);
ndureja3 0:6bd0fe190ecc 123 uLCD.printf("%i wpm",wpm);
ndureja3 0:6bd0fe190ecc 124 }
ndureja3 0:6bd0fe190ecc 125
ndureja3 0:6bd0fe190ecc 126 int main()
ndureja3 0:6bd0fe190ecc 127 {
ndureja3 0:6bd0fe190ecc 128
ndureja3 0:6bd0fe190ecc 129 // Initializations
ndureja3 0:6bd0fe190ecc 130 wpm = 300;
ndureja3 0:6bd0fe190ecc 131 play = 1;
ndureja3 0:6bd0fe190ecc 132 wpmChange = 0;
ndureja3 0:6bd0fe190ecc 133 reset = 0;
ndureja3 0:6bd0fe190ecc 134 pause = 0;
ndureja3 0:6bd0fe190ecc 135 menuX = 15;
ndureja3 0:6bd0fe190ecc 136 menuY = 2;
ndureja3 0:6bd0fe190ecc 137 numFiles = 0;
ndureja3 0:6bd0fe190ecc 138 fileChoose = 0;
ndureja3 0:6bd0fe190ecc 139
ndureja3 0:6bd0fe190ecc 140 // Check for input from the touchpad
ndureja3 0:6bd0fe190ecc 141 interrupt.mode(PullUp);
ndureja3 0:6bd0fe190ecc 142 interrupt.fall(&fallInterrupt);
ndureja3 0:6bd0fe190ecc 143
ndureja3 0:6bd0fe190ecc 144
ndureja3 0:6bd0fe190ecc 145 // Debug in console
ndureja3 0:6bd0fe190ecc 146 pc.printf("\nHello World\n\r");
ndureja3 0:6bd0fe190ecc 147
ndureja3 0:6bd0fe190ecc 148 read_file_names("/sd/mydir");
ndureja3 0:6bd0fe190ecc 149 uLCD.color(WHITE);
ndureja3 0:6bd0fe190ecc 150 uLCD.printf("/sd/mydir\n\n");
ndureja3 0:6bd0fe190ecc 151 uLCD.color(GREEN);
ndureja3 0:6bd0fe190ecc 152
ndureja3 0:6bd0fe190ecc 153 // Display file names in the menu
ndureja3 0:6bd0fe190ecc 154 for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++) {
ndureja3 0:6bd0fe190ecc 155 uLCD.printf(" - %s\n\r",(*it).c_str());
ndureja3 0:6bd0fe190ecc 156 numFiles++;
ndureja3 0:6bd0fe190ecc 157 }
ndureja3 0:6bd0fe190ecc 158
ndureja3 0:6bd0fe190ecc 159 // Choose the file to read
ndureja3 0:6bd0fe190ecc 160 while(fileChoose == 0) {
ndureja3 0:6bd0fe190ecc 161 uLCD.filled_rectangle(107,0,128,128,BLACK);
ndureja3 0:6bd0fe190ecc 162 interrupt.fall(&fallInterrupt);
ndureja3 0:6bd0fe190ecc 163 uLCD.locate(menuX,menuY);
ndureja3 0:6bd0fe190ecc 164 uLCD.color(BLUE);
ndureja3 0:6bd0fe190ecc 165 uLCD.printf("<--");
ndureja3 0:6bd0fe190ecc 166 }
ndureja3 0:6bd0fe190ecc 167
ndureja3 0:6bd0fe190ecc 168 char fn[30] = "";
ndureja3 0:6bd0fe190ecc 169 int num = 0;
ndureja3 0:6bd0fe190ecc 170 for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++) {
ndureja3 0:6bd0fe190ecc 171 if(num==(menuY-2))
ndureja3 0:6bd0fe190ecc 172 strcpy(fn,(*it).c_str());
ndureja3 0:6bd0fe190ecc 173 num++;
ndureja3 0:6bd0fe190ecc 174 }
ndureja3 0:6bd0fe190ecc 175
ndureja3 0:6bd0fe190ecc 176 uLCD.cls();
ndureja3 0:6bd0fe190ecc 177
ndureja3 0:6bd0fe190ecc 178
ndureja3 0:6bd0fe190ecc 179 pc.printf("%s",fn);
ndureja3 0:6bd0fe190ecc 180
ndureja3 0:6bd0fe190ecc 181 uLCD.text_width(3);
ndureja3 0:6bd0fe190ecc 182 uLCD.text_height(3);
ndureja3 0:6bd0fe190ecc 183 uLCD.locate(0,1);
ndureja3 0:6bd0fe190ecc 184 uLCD.color(WHITE);
ndureja3 0:6bd0fe190ecc 185 uLCD.printf("%s",fn);
ndureja3 0:6bd0fe190ecc 186 wait(2);
ndureja3 0:6bd0fe190ecc 187
ndureja3 0:6bd0fe190ecc 188 /*
ndureja3 0:6bd0fe190ecc 189
ndureja3 0:6bd0fe190ecc 190 // Write to file if needed
ndureja3 0:6bd0fe190ecc 191 pc.printf("Start writing\n\r");
ndureja3 0:6bd0fe190ecc 192 mkdir("/sd/mydir", 0777);
ndureja3 0:6bd0fe190ecc 193
ndureja3 0:6bd0fe190ecc 194
ndureja3 0:6bd0fe190ecc 195 FILE *fp = fopen("/sd/mydir/sdtest", "w");
ndureja3 0:6bd0fe190ecc 196 if(fp == NULL) {
ndureja3 0:6bd0fe190ecc 197 error("Could not open file for write\n");
ndureja3 0:6bd0fe190ecc 198 }
ndureja3 0:6bd0fe190ecc 199
ndureja3 0:6bd0fe190ecc 200 fprintf(fp, "This is a demo for our project uLCD Text Reader. You can read at speeds between 100 words per minute to 500 words per minute. ");
ndureja3 0:6bd0fe190ecc 201 fprintf(fp, "You can use the MPR121 12-key touch pad to play, pause and reset the text stream. The mbed reads the text file from the microSD card. ");
ndureja3 0:6bd0fe190ecc 202 fprintf(fp, "Give it a try: ");
ndureja3 0:6bd0fe190ecc 203 fprintf(fp, "3! 2! 1! Go Jackets! ");
ndureja3 0:6bd0fe190ecc 204 fprintf(fp, "I'm a Ramblin' Wreck from Georgia Tech, and a hell of an engineer. ");
ndureja3 0:6bd0fe190ecc 205 fprintf(fp, "A helluva, helluva, Helluva, helluva, hell of an engineer. ");
ndureja3 0:6bd0fe190ecc 206 fprintf(fp, "Like all the jolly good fellows, I drink my whiskey clear. ");
ndureja3 0:6bd0fe190ecc 207 fprintf(fp, "I'm a Ramblin' Wreck from Georgia Tech and a hell of an engineer. ");
ndureja3 0:6bd0fe190ecc 208
ndureja3 0:6bd0fe190ecc 209 fprintf(fp, "Oh! If I had a daughter, sir, I'd dress her in White and Gold, ");
ndureja3 0:6bd0fe190ecc 210 fprintf(fp, "And put her on the campus to cheer the brave and bold. ");
ndureja3 0:6bd0fe190ecc 211 fprintf(fp, "But if I had a son, sir, I'll tell you what he'd do— ");
ndureja3 0:6bd0fe190ecc 212 fprintf(fp, "He would yell, 'To hell with Georgia!' like his daddy used to do. ");
ndureja3 0:6bd0fe190ecc 213
ndureja3 0:6bd0fe190ecc 214 fprintf(fp, "Oh, I wish I had a barrel of rum and sugar three thousand pounds, ");
ndureja3 0:6bd0fe190ecc 215 fprintf(fp, "A college bell to put it in and a clapper to stir it round. ");
ndureja3 0:6bd0fe190ecc 216 fprintf(fp, "I'd drink to all the good fellows who come from far and near. ");
ndureja3 0:6bd0fe190ecc 217 fprintf(fp, "I'm a ramblin', gamblin', hell of an engineer! ");
ndureja3 0:6bd0fe190ecc 218
ndureja3 0:6bd0fe190ecc 219
ndureja3 0:6bd0fe190ecc 220 fclose(fp);
ndureja3 0:6bd0fe190ecc 221 */
ndureja3 0:6bd0fe190ecc 222
ndureja3 0:6bd0fe190ecc 223 // Open the selected file in read mode
ndureja3 0:6bd0fe190ecc 224 char path[] = "/sd/mydir/";
ndureja3 0:6bd0fe190ecc 225 strcat(path,fn);
ndureja3 0:6bd0fe190ecc 226 pc.printf("Start reading\n\r %s",path);
ndureja3 0:6bd0fe190ecc 227
ndureja3 0:6bd0fe190ecc 228 FILE *fp1 = fopen(path, "r");
ndureja3 0:6bd0fe190ecc 229 if(fp1 == NULL) {
ndureja3 0:6bd0fe190ecc 230 error("Could not open file for read\n");
ndureja3 0:6bd0fe190ecc 231 }
ndureja3 0:6bd0fe190ecc 232
ndureja3 0:6bd0fe190ecc 233 // Setup the display on uLCD
ndureja3 0:6bd0fe190ecc 234 uLCD.cls();
ndureja3 0:6bd0fe190ecc 235 uLCD.line(0, 82, 127, 82, WHITE);
ndureja3 0:6bd0fe190ecc 236 uLCD.line(0, 58, 127, 58, WHITE);
ndureja3 0:6bd0fe190ecc 237 uLCD.line(62, 54, 62, 62, RED);
ndureja3 0:6bd0fe190ecc 238 uLCD.line(63, 54, 63, 62, RED);
ndureja3 0:6bd0fe190ecc 239 uLCD.line(62, 80, 62, 88, RED);
ndureja3 0:6bd0fe190ecc 240 uLCD.line(63, 80, 63, 88, RED);
ndureja3 0:6bd0fe190ecc 241 printWPM();
ndureja3 0:6bd0fe190ecc 242
ndureja3 0:6bd0fe190ecc 243
ndureja3 0:6bd0fe190ecc 244 char oneword[9]; // The current temp word buffer
ndureja3 0:6bd0fe190ecc 245 char disp[9]; // The current word
ndureja3 0:6bd0fe190ecc 246 int len; // length of the current word
ndureja3 0:6bd0fe190ecc 247
ndureja3 0:6bd0fe190ecc 248
ndureja3 0:6bd0fe190ecc 249 while(1) {
ndureja3 0:6bd0fe190ecc 250
ndureja3 0:6bd0fe190ecc 251 // Read till the end of the file
ndureja3 0:6bd0fe190ecc 252 while(!feof(fp1)) {
ndureja3 0:6bd0fe190ecc 253
ndureja3 0:6bd0fe190ecc 254 // Reser Mode
ndureja3 0:6bd0fe190ecc 255 if(reset == 1) {
ndureja3 0:6bd0fe190ecc 256 fclose(fp1);
ndureja3 0:6bd0fe190ecc 257 char path[] = "/sd/mydir/";
ndureja3 0:6bd0fe190ecc 258 strcat(path,fn);
ndureja3 0:6bd0fe190ecc 259 FILE *fp1 = fopen(path, "r");
ndureja3 0:6bd0fe190ecc 260
ndureja3 0:6bd0fe190ecc 261 if(fp1 == NULL) {
ndureja3 0:6bd0fe190ecc 262 pc.printf("Start reading\n\r %s",path);
ndureja3 0:6bd0fe190ecc 263 error("Could not open file for read\n");
ndureja3 0:6bd0fe190ecc 264 }
ndureja3 0:6bd0fe190ecc 265 reset = 0;
ndureja3 0:6bd0fe190ecc 266 uLCD.text_width(3);
ndureja3 0:6bd0fe190ecc 267 uLCD.text_height(3);
ndureja3 0:6bd0fe190ecc 268 uLCD.locate(2,0);
ndureja3 0:6bd0fe190ecc 269 uLCD.color(RED);
ndureja3 0:6bd0fe190ecc 270 uLCD.printf("<<");
ndureja3 0:6bd0fe190ecc 271 wait(0.5);
ndureja3 0:6bd0fe190ecc 272 uLCD.filled_rectangle(0,0,128,40,BLACK);
ndureja3 0:6bd0fe190ecc 273 }
ndureja3 0:6bd0fe190ecc 274
ndureja3 0:6bd0fe190ecc 275 // Pause
ndureja3 0:6bd0fe190ecc 276 while(play == 0) {
ndureja3 0:6bd0fe190ecc 277
ndureja3 0:6bd0fe190ecc 278 uLCD.text_width(3);
ndureja3 0:6bd0fe190ecc 279 uLCD.text_height(3);
ndureja3 0:6bd0fe190ecc 280 uLCD.locate(2,0);
ndureja3 0:6bd0fe190ecc 281 uLCD.color(RED);
ndureja3 0:6bd0fe190ecc 282 uLCD.printf("||");
ndureja3 0:6bd0fe190ecc 283 interrupt.fall(&fallInterrupt);
ndureja3 0:6bd0fe190ecc 284 printWPM();
ndureja3 0:6bd0fe190ecc 285 if(reset == 1) {
ndureja3 0:6bd0fe190ecc 286 fclose(fp1);
ndureja3 0:6bd0fe190ecc 287 char path[] = "/sd/mydir/";
ndureja3 0:6bd0fe190ecc 288 strcat(path,fn);
ndureja3 0:6bd0fe190ecc 289 FILE *fp1 = fopen(path, "r");
ndureja3 0:6bd0fe190ecc 290 if(fp1 == NULL) {
ndureja3 0:6bd0fe190ecc 291 pc.printf("Start reading\n\r %s",path);
ndureja3 0:6bd0fe190ecc 292 error("321Could not open file for read\n");
ndureja3 0:6bd0fe190ecc 293 }
ndureja3 0:6bd0fe190ecc 294 reset = 0;
ndureja3 0:6bd0fe190ecc 295 play = 1;
ndureja3 0:6bd0fe190ecc 296 uLCD.text_width(3);
ndureja3 0:6bd0fe190ecc 297 uLCD.text_height(3);
ndureja3 0:6bd0fe190ecc 298 uLCD.locate(2,0);
ndureja3 0:6bd0fe190ecc 299 uLCD.color(RED);
ndureja3 0:6bd0fe190ecc 300 uLCD.printf("<<");
ndureja3 0:6bd0fe190ecc 301 wait(0.5);
ndureja3 0:6bd0fe190ecc 302 uLCD.filled_rectangle(0,0,128,40,BLACK);
ndureja3 0:6bd0fe190ecc 303
ndureja3 0:6bd0fe190ecc 304
ndureja3 0:6bd0fe190ecc 305 }
ndureja3 0:6bd0fe190ecc 306 if(play==1) {
ndureja3 0:6bd0fe190ecc 307 uLCD.text_width(3);
ndureja3 0:6bd0fe190ecc 308 uLCD.text_height(3);
ndureja3 0:6bd0fe190ecc 309 uLCD.locate(2,0);
ndureja3 0:6bd0fe190ecc 310 uLCD.color(RED);
ndureja3 0:6bd0fe190ecc 311 uLCD.printf("> ");
ndureja3 0:6bd0fe190ecc 312 wait(0.5);
ndureja3 0:6bd0fe190ecc 313 uLCD.filled_rectangle(0,0,128,40,BLACK);
ndureja3 0:6bd0fe190ecc 314 }
ndureja3 0:6bd0fe190ecc 315 }
ndureja3 0:6bd0fe190ecc 316
ndureja3 0:6bd0fe190ecc 317 // Change in words per minute
ndureja3 0:6bd0fe190ecc 318 if(wpmChange == 1) {
ndureja3 0:6bd0fe190ecc 319 printWPM();
ndureja3 0:6bd0fe190ecc 320 wpmChange = 0;
ndureja3 0:6bd0fe190ecc 321 }
ndureja3 0:6bd0fe190ecc 322 uLCD.text_width(2);
ndureja3 0:6bd0fe190ecc 323 uLCD.text_height(2);
ndureja3 0:6bd0fe190ecc 324 uLCD.color(WHITE);
ndureja3 0:6bd0fe190ecc 325 uLCD.locate(0,4);
ndureja3 0:6bd0fe190ecc 326
ndureja3 0:6bd0fe190ecc 327 // Diplay the current word
ndureja3 0:6bd0fe190ecc 328
ndureja3 0:6bd0fe190ecc 329 fscanf(fp1, "%s",oneword);
ndureja3 0:6bd0fe190ecc 330 len = strlen(oneword);
ndureja3 0:6bd0fe190ecc 331 //pc.printf("%i",len);
ndureja3 0:6bd0fe190ecc 332
ndureja3 0:6bd0fe190ecc 333 for(int i = 0; i< (9-len)/2 ; i++) {
ndureja3 0:6bd0fe190ecc 334 disp[i] = ' ';
ndureja3 0:6bd0fe190ecc 335 }
ndureja3 0:6bd0fe190ecc 336 for(int j = 0 , i = (9-len)/2 ; j< len ; i++) {
ndureja3 0:6bd0fe190ecc 337 if(oneword[j] == '.' || oneword[j] == '!' || oneword[j] == ',') {
ndureja3 0:6bd0fe190ecc 338 pause = 1;
ndureja3 0:6bd0fe190ecc 339 }
ndureja3 0:6bd0fe190ecc 340 disp[i] = oneword[j++];
ndureja3 0:6bd0fe190ecc 341 }
ndureja3 0:6bd0fe190ecc 342
ndureja3 0:6bd0fe190ecc 343 for(int i = (9-len)/2 + len ; i<9; i++) {
ndureja3 0:6bd0fe190ecc 344 disp[i] = ' ';
ndureja3 0:6bd0fe190ecc 345 }
ndureja3 0:6bd0fe190ecc 346
ndureja3 0:6bd0fe190ecc 347 for(int i=0; i<9; i++) {
ndureja3 0:6bd0fe190ecc 348 if(i==4)
ndureja3 0:6bd0fe190ecc 349 uLCD.color(RED);
ndureja3 0:6bd0fe190ecc 350 else
ndureja3 0:6bd0fe190ecc 351 uLCD.color(WHITE);
ndureja3 0:6bd0fe190ecc 352 uLCD.printf("%c", disp[i]);
ndureja3 0:6bd0fe190ecc 353 }
ndureja3 0:6bd0fe190ecc 354
ndureja3 0:6bd0fe190ecc 355 // Handle wait time for wpm speed and processing time
ndureja3 0:6bd0fe190ecc 356 // Offer slight pause in the sentence to enhance reading
ndureja3 0:6bd0fe190ecc 357 float temp = (pause ==1) ? (60.0/(wpm-(0.5*wpm))) : (60.0/wpm);
ndureja3 0:6bd0fe190ecc 358 wait(temp - 0.1);
ndureja3 0:6bd0fe190ecc 359 pause = 0;
ndureja3 0:6bd0fe190ecc 360
ndureja3 0:6bd0fe190ecc 361
ndureja3 0:6bd0fe190ecc 362
ndureja3 0:6bd0fe190ecc 363
ndureja3 0:6bd0fe190ecc 364 }
ndureja3 0:6bd0fe190ecc 365 fclose(fp1);
ndureja3 0:6bd0fe190ecc 366 interrupt.fall(&fallInterrupt);
ndureja3 0:6bd0fe190ecc 367 }
ndureja3 0:6bd0fe190ecc 368
ndureja3 0:6bd0fe190ecc 369
ndureja3 0:6bd0fe190ecc 370 }