Miniproject of ECE4180

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

Committer:
lzzcd001
Date:
Wed Mar 11 21:11:38 2015 +0000
Revision:
2:346250dedcb6
Parent:
1:9465d72db54f
random seed based on time

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