Zhen Liu / Mbed 2 deprecated Mini_project

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

Committer:
lzzcd001
Date:
Mon Mar 09 22:04:56 2015 +0000
Revision:
1:9465d72db54f
Parent:
0:9e4f9c949728
Child:
2:346250dedcb6
Randomized version

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