
Display text on screen.
Dependencies: TextLCD mbed MaxSonar RTC-DS1307
Fork of TextLCD_HelloWorld by
main.cpp@8:8ce2ab8191cf, 2017-05-25 (annotated)
- Committer:
- aueangpanit
- Date:
- Thu May 25 09:15:49 2017 +0000
- Revision:
- 8:8ce2ab8191cf
- Parent:
- 7:f00ddf85cacc
- Child:
- 9:39190ed25585
Working multi-choice quiz
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 1:7418a52375a0 | 1 | // Hello World! for the TextLCD |
simon | 1:7418a52375a0 | 2 | |
simon | 0:334327d1a416 | 3 | #include "mbed.h" |
aueangpanit | 4:c669026b6f6e | 4 | #include <string> |
simon | 0:334327d1a416 | 5 | #include "TextLCD.h" |
aueangpanit | 5:2f13ec8efe0b | 6 | #include "MaxSonar.h" |
aueangpanit | 5:2f13ec8efe0b | 7 | using std::string; |
simon | 0:334327d1a416 | 8 | |
aueangpanit | 3:5e0ba6e35849 | 9 | TextLCD lcd(PTE30, PTE29, PTE23, PTE22, PTE21, PTE20); // rs, e, d4-d7 |
aueangpanit | 3:5e0ba6e35849 | 10 | |
aueangpanit | 7:f00ddf85cacc | 11 | DigitalOut questionScreen(PTE3); |
aueangpanit | 4:c669026b6f6e | 12 | DigitalOut screen1(PTE5); |
aueangpanit | 4:c669026b6f6e | 13 | DigitalOut screen2(PTE4); |
aueangpanit | 4:c669026b6f6e | 14 | |
aueangpanit | 4:c669026b6f6e | 15 | void UpdateScreen(DigitalOut screen, string text); |
aueangpanit | 5:2f13ec8efe0b | 16 | void UpdateScreen(DigitalOut screen, char text[1024]); |
aueangpanit | 8:8ce2ab8191cf | 17 | void DisplayNewQuestion(); |
aueangpanit | 8:8ce2ab8191cf | 18 | bool CheckCorrect(int screenNumber); |
aueangpanit | 8:8ce2ab8191cf | 19 | |
aueangpanit | 8:8ce2ab8191cf | 20 | string questions[4] = {"What is 2*2?", |
aueangpanit | 8:8ce2ab8191cf | 21 | "What is 5*2?", |
aueangpanit | 8:8ce2ab8191cf | 22 | "what is 2+2?", |
aueangpanit | 8:8ce2ab8191cf | 23 | "What is 5*4?"}; |
aueangpanit | 8:8ce2ab8191cf | 24 | |
aueangpanit | 8:8ce2ab8191cf | 25 | string screen1Answers[4] = {"4 ", "10 ", "5 ", "18 "}; |
aueangpanit | 8:8ce2ab8191cf | 26 | string screen2Answers[4] = {"5 ", "8 ", "4 ", "20 "}; |
aueangpanit | 8:8ce2ab8191cf | 27 | int correctScreen[4] = {1, 1, 2, 2}; //1 = screen1; 2 = screen2; |
aueangpanit | 8:8ce2ab8191cf | 28 | |
aueangpanit | 8:8ce2ab8191cf | 29 | int questionCount = 0; |
simon | 0:334327d1a416 | 30 | |
simon | 0:334327d1a416 | 31 | int main() { |
aueangpanit | 8:8ce2ab8191cf | 32 | UpdateScreen(screen2, "Hello!"); |
aueangpanit | 5:2f13ec8efe0b | 33 | |
aueangpanit | 5:2f13ec8efe0b | 34 | MaxSonar *range1; |
aueangpanit | 5:2f13ec8efe0b | 35 | float r1; |
aueangpanit | 6:fa30f8383b99 | 36 | |
aueangpanit | 6:fa30f8383b99 | 37 | MaxSonar *range2; |
aueangpanit | 6:fa30f8383b99 | 38 | float r2; |
aueangpanit | 5:2f13ec8efe0b | 39 | |
aueangpanit | 5:2f13ec8efe0b | 40 | // Create and configure object for 3.3V powered LV-series device, |
aueangpanit | 5:2f13ec8efe0b | 41 | // accessed with analog reads (in cm) on p16, triggered by p7. |
aueangpanit | 5:2f13ec8efe0b | 42 | range1 = new MaxSonar(MS_LV, MS_ANALOG, PTB8, PTC2); |
aueangpanit | 5:2f13ec8efe0b | 43 | range1->setVoltage(3.3); |
aueangpanit | 5:2f13ec8efe0b | 44 | range1->setUnits(MS_CM); |
aueangpanit | 5:2f13ec8efe0b | 45 | |
aueangpanit | 6:fa30f8383b99 | 46 | range2 = new MaxSonar(MS_LV, MS_ANALOG, PTB9, PTB3); |
aueangpanit | 6:fa30f8383b99 | 47 | range2->setVoltage(3.3); |
aueangpanit | 6:fa30f8383b99 | 48 | range2->setUnits(MS_CM); |
aueangpanit | 5:2f13ec8efe0b | 49 | |
aueangpanit | 5:2f13ec8efe0b | 50 | while(1) { |
aueangpanit | 5:2f13ec8efe0b | 51 | // Trigger read, wait 49ms until ranger finder has |
aueangpanit | 5:2f13ec8efe0b | 52 | // finished, then read. |
aueangpanit | 5:2f13ec8efe0b | 53 | range1->triggerRead(); |
aueangpanit | 5:2f13ec8efe0b | 54 | wait_ms(49); |
aueangpanit | 5:2f13ec8efe0b | 55 | r1 = range1->read(); |
aueangpanit | 6:fa30f8383b99 | 56 | |
aueangpanit | 6:fa30f8383b99 | 57 | range2->triggerRead(); |
aueangpanit | 6:fa30f8383b99 | 58 | wait_ms(49); |
aueangpanit | 6:fa30f8383b99 | 59 | r2 = range2->read(); |
aueangpanit | 5:2f13ec8efe0b | 60 | |
aueangpanit | 8:8ce2ab8191cf | 61 | if(r1 < 20) |
aueangpanit | 8:8ce2ab8191cf | 62 | { |
aueangpanit | 8:8ce2ab8191cf | 63 | if(CheckCorrect(1)) |
aueangpanit | 8:8ce2ab8191cf | 64 | { |
aueangpanit | 8:8ce2ab8191cf | 65 | UpdateScreen(questionScreen, "Correct!"); |
aueangpanit | 8:8ce2ab8191cf | 66 | wait(1); |
aueangpanit | 8:8ce2ab8191cf | 67 | DisplayNewQuestion(); |
aueangpanit | 8:8ce2ab8191cf | 68 | } |
aueangpanit | 8:8ce2ab8191cf | 69 | else |
aueangpanit | 8:8ce2ab8191cf | 70 | { |
aueangpanit | 8:8ce2ab8191cf | 71 | UpdateScreen(questionScreen, "Try Again!"); |
aueangpanit | 8:8ce2ab8191cf | 72 | wait(1); |
aueangpanit | 8:8ce2ab8191cf | 73 | UpdateScreen(questionScreen, questions[questionCount]); |
aueangpanit | 8:8ce2ab8191cf | 74 | } |
aueangpanit | 8:8ce2ab8191cf | 75 | } |
aueangpanit | 8:8ce2ab8191cf | 76 | if(r2 < 20) |
aueangpanit | 8:8ce2ab8191cf | 77 | { |
aueangpanit | 8:8ce2ab8191cf | 78 | if(CheckCorrect(2)) |
aueangpanit | 8:8ce2ab8191cf | 79 | { |
aueangpanit | 8:8ce2ab8191cf | 80 | UpdateScreen(questionScreen, "Correct!"); |
aueangpanit | 8:8ce2ab8191cf | 81 | wait(1); |
aueangpanit | 8:8ce2ab8191cf | 82 | DisplayNewQuestion(); |
aueangpanit | 8:8ce2ab8191cf | 83 | } |
aueangpanit | 8:8ce2ab8191cf | 84 | else |
aueangpanit | 8:8ce2ab8191cf | 85 | { |
aueangpanit | 8:8ce2ab8191cf | 86 | UpdateScreen(questionScreen, "Try Again!"); |
aueangpanit | 8:8ce2ab8191cf | 87 | wait(1); |
aueangpanit | 8:8ce2ab8191cf | 88 | UpdateScreen(questionScreen, questions[questionCount]); |
aueangpanit | 8:8ce2ab8191cf | 89 | } |
aueangpanit | 8:8ce2ab8191cf | 90 | } |
aueangpanit | 8:8ce2ab8191cf | 91 | |
aueangpanit | 8:8ce2ab8191cf | 92 | /* |
aueangpanit | 5:2f13ec8efe0b | 93 | // Print and delay 0.5s. |
aueangpanit | 6:fa30f8383b99 | 94 | char range1_char_array[1024]; |
aueangpanit | 6:fa30f8383b99 | 95 | char range2_char_array[1024]; |
aueangpanit | 6:fa30f8383b99 | 96 | sprintf (range1_char_array, "Range: %.3f cm\n", r1); |
aueangpanit | 6:fa30f8383b99 | 97 | sprintf (range2_char_array, "Range: %.3f cm\n", r2); |
aueangpanit | 7:f00ddf85cacc | 98 | UpdateScreen(questionScreen, range1_char_array); |
aueangpanit | 6:fa30f8383b99 | 99 | UpdateScreen(screen2, range2_char_array); |
aueangpanit | 8:8ce2ab8191cf | 100 | */ |
aueangpanit | 5:2f13ec8efe0b | 101 | |
aueangpanit | 5:2f13ec8efe0b | 102 | wait(0.5); |
aueangpanit | 5:2f13ec8efe0b | 103 | } |
aueangpanit | 4:c669026b6f6e | 104 | } |
aueangpanit | 4:c669026b6f6e | 105 | |
aueangpanit | 8:8ce2ab8191cf | 106 | void DisplayNewQuestion() |
aueangpanit | 8:8ce2ab8191cf | 107 | { |
aueangpanit | 8:8ce2ab8191cf | 108 | if(questionCount >= 3) |
aueangpanit | 8:8ce2ab8191cf | 109 | { |
aueangpanit | 8:8ce2ab8191cf | 110 | questionCount = 0; |
aueangpanit | 8:8ce2ab8191cf | 111 | } |
aueangpanit | 8:8ce2ab8191cf | 112 | else |
aueangpanit | 8:8ce2ab8191cf | 113 | { |
aueangpanit | 8:8ce2ab8191cf | 114 | questionCount++; |
aueangpanit | 8:8ce2ab8191cf | 115 | } |
aueangpanit | 8:8ce2ab8191cf | 116 | |
aueangpanit | 8:8ce2ab8191cf | 117 | UpdateScreen(questionScreen, questions[questionCount]); |
aueangpanit | 8:8ce2ab8191cf | 118 | UpdateScreen(screen1, screen1Answers[questionCount]); |
aueangpanit | 8:8ce2ab8191cf | 119 | UpdateScreen(screen2, screen2Answers[questionCount]); |
aueangpanit | 8:8ce2ab8191cf | 120 | } |
aueangpanit | 8:8ce2ab8191cf | 121 | |
aueangpanit | 8:8ce2ab8191cf | 122 | bool CheckCorrect(int screenNumber) |
aueangpanit | 8:8ce2ab8191cf | 123 | { |
aueangpanit | 8:8ce2ab8191cf | 124 | if(screenNumber == correctScreen[questionCount]) |
aueangpanit | 8:8ce2ab8191cf | 125 | { |
aueangpanit | 8:8ce2ab8191cf | 126 | return true; |
aueangpanit | 8:8ce2ab8191cf | 127 | } |
aueangpanit | 8:8ce2ab8191cf | 128 | else |
aueangpanit | 8:8ce2ab8191cf | 129 | { |
aueangpanit | 8:8ce2ab8191cf | 130 | return false; |
aueangpanit | 8:8ce2ab8191cf | 131 | } |
aueangpanit | 8:8ce2ab8191cf | 132 | } |
aueangpanit | 8:8ce2ab8191cf | 133 | |
aueangpanit | 4:c669026b6f6e | 134 | void UpdateScreen(DigitalOut screen, string text) |
aueangpanit | 4:c669026b6f6e | 135 | { |
aueangpanit | 4:c669026b6f6e | 136 | //disable all E pin for all screens |
aueangpanit | 8:8ce2ab8191cf | 137 | questionScreen = 0; |
aueangpanit | 4:c669026b6f6e | 138 | screen1 = 0; |
aueangpanit | 4:c669026b6f6e | 139 | screen2 = 0; |
aueangpanit | 4:c669026b6f6e | 140 | |
aueangpanit | 4:c669026b6f6e | 141 | //enable E pin for the scrren that we want to update |
aueangpanit | 4:c669026b6f6e | 142 | screen = 1; |
aueangpanit | 4:c669026b6f6e | 143 | |
aueangpanit | 5:2f13ec8efe0b | 144 | //convert text to char array |
aueangpanit | 5:2f13ec8efe0b | 145 | char text_char_array[1024]; |
aueangpanit | 5:2f13ec8efe0b | 146 | strcpy(text_char_array, text.c_str()); |
aueangpanit | 4:c669026b6f6e | 147 | //some weird behaviour after disabling the E pin once means that we need to update the screen several times for it to display properly |
aueangpanit | 5:2f13ec8efe0b | 148 | for(int i = 0; i < 10; i++) |
aueangpanit | 4:c669026b6f6e | 149 | { |
aueangpanit | 3:5e0ba6e35849 | 150 | lcd.cls(); |
aueangpanit | 4:c669026b6f6e | 151 | lcd.printf(text_char_array); |
aueangpanit | 3:5e0ba6e35849 | 152 | } |
aueangpanit | 5:2f13ec8efe0b | 153 | } |
aueangpanit | 5:2f13ec8efe0b | 154 | |
aueangpanit | 5:2f13ec8efe0b | 155 | void UpdateScreen(DigitalOut screen, char text[1024]) |
aueangpanit | 5:2f13ec8efe0b | 156 | { |
aueangpanit | 5:2f13ec8efe0b | 157 | //disable all E pin for all screens |
aueangpanit | 8:8ce2ab8191cf | 158 | questionScreen = 0; |
aueangpanit | 5:2f13ec8efe0b | 159 | screen1 = 0; |
aueangpanit | 5:2f13ec8efe0b | 160 | screen2 = 0; |
aueangpanit | 4:c669026b6f6e | 161 | |
aueangpanit | 5:2f13ec8efe0b | 162 | //enable E pin for the scrren that we want to update |
aueangpanit | 5:2f13ec8efe0b | 163 | screen = 1; |
aueangpanit | 4:c669026b6f6e | 164 | |
aueangpanit | 5:2f13ec8efe0b | 165 | //some weird behaviour after disabling the E pin once means that we need to update the screen several times for it to display properly |
aueangpanit | 5:2f13ec8efe0b | 166 | for(int i = 0; i < 10; i++) |
aueangpanit | 5:2f13ec8efe0b | 167 | { |
aueangpanit | 5:2f13ec8efe0b | 168 | lcd.cls(); |
aueangpanit | 5:2f13ec8efe0b | 169 | lcd.printf(text); |
aueangpanit | 5:2f13ec8efe0b | 170 | } |
simon | 0:334327d1a416 | 171 | } |