Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
main.cpp@1:9465d72db54f, 2015-03-09 (annotated)
- 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?
| 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 | 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 | } |