Miniproject of ECE4180

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Committer:
lzzcd001
Date:
Mon Mar 09 21:04:44 2015 +0000
Revision:
0:9e4f9c949728
Child:
1:9465d72db54f
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lzzcd001 0:9e4f9c949728 1 #include "mbed.h"
lzzcd001 0:9e4f9c949728 2 #include "rtos.h"
lzzcd001 0:9e4f9c949728 3 #include "uLCD_4DGL.h"
lzzcd001 0:9e4f9c949728 4
lzzcd001 0:9e4f9c949728 5 DigitalIn yes(p5);
lzzcd001 0:9e4f9c949728 6 DigitalIn no(p6);
lzzcd001 0:9e4f9c949728 7 uLCD_4DGL lcd(p28, p27, p30);
lzzcd001 0:9e4f9c949728 8 Mutex mutex;
lzzcd001 0:9e4f9c949728 9 LocalFileSystem local("local");
lzzcd001 0:9e4f9c949728 10
lzzcd001 0:9e4f9c949728 11 void setup()
lzzcd001 0:9e4f9c949728 12 {
lzzcd001 0:9e4f9c949728 13 lcd.baudrate(3000000);
lzzcd001 0:9e4f9c949728 14 lcd.background_color(0);
lzzcd001 0:9e4f9c949728 15 lcd.cls();
lzzcd001 0:9e4f9c949728 16 lcd.text_width(3); //4X size text
lzzcd001 0:9e4f9c949728 17 lcd.text_height(3);
lzzcd001 0:9e4f9c949728 18 //lcd.printf("Initializing...");
lzzcd001 0:9e4f9c949728 19 lcd.text_string("Initializing...", 0,0,FONT_8X12,BLUE);
lzzcd001 0:9e4f9c949728 20 }
lzzcd001 0:9e4f9c949728 21
lzzcd001 0:9e4f9c949728 22 void timer(void const *in) {
lzzcd001 0:9e4f9c949728 23 int* timeNo = (int*) in;
lzzcd001 0:9e4f9c949728 24 lcd.filled_rectangle(0,90,100,95,RED);
lzzcd001 0:9e4f9c949728 25 for (int i = 10; i>=0; i--) {
lzzcd001 0:9e4f9c949728 26 mutex.lock();
lzzcd001 0:9e4f9c949728 27 lcd.locate(9,10);
lzzcd001 0:9e4f9c949728 28 lcd.printf("00:%02d", i);
lzzcd001 0:9e4f9c949728 29 lcd.filled_rectangle(i*10,90,(i+1)*10,95,BLACK);
lzzcd001 0:9e4f9c949728 30 mutex.unlock();
lzzcd001 0:9e4f9c949728 31 Thread::wait(1000);
lzzcd001 0:9e4f9c949728 32 }
lzzcd001 0:9e4f9c949728 33 *timeNo = 0;
lzzcd001 0:9e4f9c949728 34 }
lzzcd001 0:9e4f9c949728 35
lzzcd001 0:9e4f9c949728 36 int main() {
lzzcd001 0:9e4f9c949728 37 yes.mode(PullUp);
lzzcd001 0:9e4f9c949728 38 no.mode(PullUp);
lzzcd001 0:9e4f9c949728 39 lcd.baudrate(3000000);
lzzcd001 0:9e4f9c949728 40 lcd.background_color(0);
lzzcd001 0:9e4f9c949728 41 lcd.cls();
lzzcd001 0:9e4f9c949728 42 lcd.color(WHITE);
lzzcd001 0:9e4f9c949728 43
lzzcd001 0:9e4f9c949728 44 lcd.printf("Initializing...");
lzzcd001 0:9e4f9c949728 45 int answer = 1;
lzzcd001 0:9e4f9c949728 46 bool flag = false;
lzzcd001 0:9e4f9c949728 47 int response = -1;
lzzcd001 0:9e4f9c949728 48 int score = 0;
lzzcd001 0:9e4f9c949728 49 int time;
lzzcd001 0:9e4f9c949728 50 int* timePointer = &time;
lzzcd001 0:9e4f9c949728 51 int question_no = 0;
lzzcd001 0:9e4f9c949728 52 bool endFlag = false;
lzzcd001 0:9e4f9c949728 53 char* question = (char*) malloc(sizeof(char) * 150+1);;
lzzcd001 0:9e4f9c949728 54 char* answerStr = (char*) malloc(sizeof(char)+1);;
lzzcd001 0:9e4f9c949728 55 wait(2);
lzzcd001 0:9e4f9c949728 56 lcd.cls();
lzzcd001 0:9e4f9c949728 57 lcd.printf("press to start");
lzzcd001 0:9e4f9c949728 58 while (yes == true && no == true) {}
lzzcd001 0:9e4f9c949728 59 lcd.cls();
lzzcd001 0:9e4f9c949728 60 lcd.printf("Quiz starts");
lzzcd001 0:9e4f9c949728 61 wait(2);
lzzcd001 0:9e4f9c949728 62 lcd.cls();
lzzcd001 0:9e4f9c949728 63 lcd.printf("Ready");
lzzcd001 0:9e4f9c949728 64 wait(2);
lzzcd001 0:9e4f9c949728 65 int total_no_questions = 100;
lzzcd001 0:9e4f9c949728 66 std::vector<std::string> question_inds;
lzzcd001 0:9e4f9c949728 67 for (i=0; i<total_no_questions; i++) {
lzzcd001 0:9e4f9c949728 68 question_ind[i] = i;
lzzcd001 0:9e4f9c949728 69 }
lzzcd001 0:9e4f9c949728 70 FILE *f = fopen("/local/test.txt", "r");
lzzcd001 0:9e4f9c949728 71 char buffer[1];
lzzcd001 0:9e4f9c949728 72 while (!endFlag) {
lzzcd001 0:9e4f9c949728 73 fgets(question, 150, f);
lzzcd001 0:9e4f9c949728 74 fgets(answerStr, 150, f);
lzzcd001 0:9e4f9c949728 75 sprintf(buffer, "%s", answerStr);
lzzcd001 0:9e4f9c949728 76 if (buffer[0] != 't' && buffer[0] != 'f') {
lzzcd001 0:9e4f9c949728 77 lcd.cls();
lzzcd001 0:9e4f9c949728 78 lcd.printf("Quiz ends");
lzzcd001 0:9e4f9c949728 79 wait(2);
lzzcd001 0:9e4f9c949728 80 endFlag = true;
lzzcd001 0:9e4f9c949728 81 break;
lzzcd001 0:9e4f9c949728 82 }
lzzcd001 0:9e4f9c949728 83 lcd.cls();
lzzcd001 0:9e4f9c949728 84 lcd.printf("Next Question");
lzzcd001 0:9e4f9c949728 85 wait(2);
lzzcd001 0:9e4f9c949728 86 question_no++;
lzzcd001 0:9e4f9c949728 87 if (buffer[0] == 't') {
lzzcd001 0:9e4f9c949728 88 answer = 1;
lzzcd001 0:9e4f9c949728 89 } else {
lzzcd001 0:9e4f9c949728 90 answer = 0;
lzzcd001 0:9e4f9c949728 91 }
lzzcd001 0:9e4f9c949728 92 for (int i = 3; i > 0; i--) {
lzzcd001 0:9e4f9c949728 93 lcd.cls();
lzzcd001 0:9e4f9c949728 94 //lcd.text_char(i, 12, 12, RED);
lzzcd001 0:9e4f9c949728 95 lcd.printf("%d",i);
lzzcd001 0:9e4f9c949728 96 Thread::wait(1000);
lzzcd001 0:9e4f9c949728 97 }
lzzcd001 0:9e4f9c949728 98 lcd.color(WHITE);
lzzcd001 0:9e4f9c949728 99 lcd.cls();
lzzcd001 0:9e4f9c949728 100 lcd.locate(1,1);
lzzcd001 0:9e4f9c949728 101 lcd.printf(question); // to be corrected
lzzcd001 0:9e4f9c949728 102 lcd.locate(2,14);
lzzcd001 0:9e4f9c949728 103 lcd.printf("Yes");
lzzcd001 0:9e4f9c949728 104 lcd.locate(14,14);
lzzcd001 0:9e4f9c949728 105 lcd.printf("No");
lzzcd001 0:9e4f9c949728 106 time = 10;
lzzcd001 0:9e4f9c949728 107 Thread timerr(timer, (void *) timePointer);
lzzcd001 0:9e4f9c949728 108 wait(0.1);
lzzcd001 0:9e4f9c949728 109 while (time >= 0 && flag == false) {
lzzcd001 0:9e4f9c949728 110 if (yes == true && no == true) {}
lzzcd001 0:9e4f9c949728 111 else if (yes == true) {
lzzcd001 0:9e4f9c949728 112 flag = true;
lzzcd001 0:9e4f9c949728 113 response = 1;
lzzcd001 0:9e4f9c949728 114 } else if (no == true) {
lzzcd001 0:9e4f9c949728 115 flag = true;
lzzcd001 0:9e4f9c949728 116 response = 0;
lzzcd001 0:9e4f9c949728 117 }
lzzcd001 0:9e4f9c949728 118 if (time == 0) {flag = true; response = -1;}
lzzcd001 0:9e4f9c949728 119 }
lzzcd001 0:9e4f9c949728 120 timerr.terminate();
lzzcd001 0:9e4f9c949728 121 if (response == 1) {
lzzcd001 0:9e4f9c949728 122 lcd.locate(2,14);
lzzcd001 0:9e4f9c949728 123 if (response == answer) {
lzzcd001 0:9e4f9c949728 124 lcd.textbackground_color(GREEN);
lzzcd001 0:9e4f9c949728 125 lcd.printf("Yes");
lzzcd001 0:9e4f9c949728 126 score++;
lzzcd001 0:9e4f9c949728 127 } else {
lzzcd001 0:9e4f9c949728 128 lcd.textbackground_color(RED);
lzzcd001 0:9e4f9c949728 129 lcd.printf("Yes");
lzzcd001 0:9e4f9c949728 130 }
lzzcd001 0:9e4f9c949728 131 } else if (response == 0) {
lzzcd001 0:9e4f9c949728 132 lcd.locate(14,14);
lzzcd001 0:9e4f9c949728 133 if (response == answer) {
lzzcd001 0:9e4f9c949728 134 lcd.textbackground_color(GREEN);
lzzcd001 0:9e4f9c949728 135 lcd.printf("No");
lzzcd001 0:9e4f9c949728 136 score++;
lzzcd001 0:9e4f9c949728 137 } else {
lzzcd001 0:9e4f9c949728 138 lcd.textbackground_color(RED);
lzzcd001 0:9e4f9c949728 139 lcd.printf("No");
lzzcd001 0:9e4f9c949728 140 }
lzzcd001 0:9e4f9c949728 141 } else if (response == -1) {
lzzcd001 0:9e4f9c949728 142 lcd.textbackground_color(RED);
lzzcd001 0:9e4f9c949728 143 lcd.locate(2,14);
lzzcd001 0:9e4f9c949728 144 lcd.printf("Yes");
lzzcd001 0:9e4f9c949728 145 lcd.locate(14,14);
lzzcd001 0:9e4f9c949728 146 lcd.printf("No");
lzzcd001 0:9e4f9c949728 147 };
lzzcd001 0:9e4f9c949728 148 wait(2);
lzzcd001 0:9e4f9c949728 149 lcd.cls();
lzzcd001 0:9e4f9c949728 150 lcd.locate(0,0);
lzzcd001 0:9e4f9c949728 151 lcd.textbackground_color(BLACK);
lzzcd001 0:9e4f9c949728 152 response = -2;
lzzcd001 0:9e4f9c949728 153 flag = false;
lzzcd001 0:9e4f9c949728 154 }
lzzcd001 0:9e4f9c949728 155 fclose(f);
lzzcd001 0:9e4f9c949728 156 lcd.cls();
lzzcd001 0:9e4f9c949728 157 lcd.printf("Total Score: %2.2f", score/(question_no+0.0) * 100);
lzzcd001 0:9e4f9c949728 158 while (true) {}
lzzcd001 0:9e4f9c949728 159 }