Miniproject of ECE4180
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
main.cpp@0:9e4f9c949728, 2015-03-09 (annotated)
- Committer:
- lzzcd001
- Date:
- Mon Mar 09 21:04:44 2015 +0000
- Revision:
- 0:9e4f9c949728
- Child:
- 1:9465d72db54f
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |