Kviz izveden pomocu mikrokontrolera NUCLEO-F103RB, 16x2 LCD-a i 3 tipkala.
Dependencies: mbed Pitanja TextLCD
Upute za igranje kviza:
Kviz pocinje pritiskom na tipkalo USER_BUTTON na mikrokontroleru. Zatim se na LCD-u ispisuje pitanje(3s vremena za procitati) te 3 odgovora(svaki 2s). Nakon toga odgovoriti na pitanje treba u 2.5s. Kviz ima 10 pitanja, kada se kviz zavrsi na LCD-u se prikaze broj tocnih odgovora. Kviz se ponovo pokrece pritiskom na tipkalo RESET na mikrokontroleru.
Na slici vidimo kako sklop izgleda.
main.cpp@0:e7a3d130037a, 2020-02-05 (annotated)
- Committer:
- sdenadija
- Date:
- Wed Feb 05 22:33:07 2020 +0000
- Revision:
- 0:e7a3d130037a
Kviz final version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sdenadija | 0:e7a3d130037a | 1 | #include "mbed.h" |
sdenadija | 0:e7a3d130037a | 2 | #include "pitanja.h" |
sdenadija | 0:e7a3d130037a | 3 | #include "TextLCD.h" |
sdenadija | 0:e7a3d130037a | 4 | |
sdenadija | 0:e7a3d130037a | 5 | DigitalOut myled(LED1); |
sdenadija | 0:e7a3d130037a | 6 | TextLCD lcd(PA_0,PA_1,PA_4,PB_0,PC_1,PC_0); // Rs, E, D4-D7 |
sdenadija | 0:e7a3d130037a | 7 | InterruptIn button(USER_BUTTON); |
sdenadija | 0:e7a3d130037a | 8 | DigitalIn buttonC(PA_9); |
sdenadija | 0:e7a3d130037a | 9 | DigitalIn buttonB(PC_7); |
sdenadija | 0:e7a3d130037a | 10 | DigitalIn buttonA(PB_6); |
sdenadija | 0:e7a3d130037a | 11 | Timer timer; |
sdenadija | 0:e7a3d130037a | 12 | int i = 1; |
sdenadija | 0:e7a3d130037a | 13 | int brojTocnih = 0; |
sdenadija | 0:e7a3d130037a | 14 | |
sdenadija | 0:e7a3d130037a | 15 | void start(); |
sdenadija | 0:e7a3d130037a | 16 | void zapocniKviz(); |
sdenadija | 0:e7a3d130037a | 17 | void postaviPitanje(string pitanjeA,string pitanjeB, string odgA, string odgB, string odgC, string tocanOdg); |
sdenadija | 0:e7a3d130037a | 18 | |
sdenadija | 0:e7a3d130037a | 19 | int main() |
sdenadija | 0:e7a3d130037a | 20 | { |
sdenadija | 0:e7a3d130037a | 21 | std::vector<Pitanje> pitanja = Pitanje::init(); |
sdenadija | 0:e7a3d130037a | 22 | myled = 0; |
sdenadija | 0:e7a3d130037a | 23 | string pitanjeA; |
sdenadija | 0:e7a3d130037a | 24 | string pitanjeB; |
sdenadija | 0:e7a3d130037a | 25 | string odgA; |
sdenadija | 0:e7a3d130037a | 26 | string odgB; |
sdenadija | 0:e7a3d130037a | 27 | string odgC; |
sdenadija | 0:e7a3d130037a | 28 | string tocanOdg; |
sdenadija | 0:e7a3d130037a | 29 | |
sdenadija | 0:e7a3d130037a | 30 | zapocniKviz(); |
sdenadija | 0:e7a3d130037a | 31 | int j = 1; |
sdenadija | 0:e7a3d130037a | 32 | while(j) { |
sdenadija | 0:e7a3d130037a | 33 | Pitanje* iter = pitanja.begin(); |
sdenadija | 0:e7a3d130037a | 34 | int i = 1; |
sdenadija | 0:e7a3d130037a | 35 | for ( ; iter != pitanja.end(); iter++) { |
sdenadija | 0:e7a3d130037a | 36 | pitanjeA = (*iter).getPitanjeA(); |
sdenadija | 0:e7a3d130037a | 37 | pitanjeB = (*iter).getPitanjeB(); |
sdenadija | 0:e7a3d130037a | 38 | odgA = (*iter).getOdgA(); |
sdenadija | 0:e7a3d130037a | 39 | odgB = (*iter).getOdgB(); |
sdenadija | 0:e7a3d130037a | 40 | odgC = (*iter).getOdgC(); |
sdenadija | 0:e7a3d130037a | 41 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 42 | tocanOdg = (*iter).getTocanOdg(); |
sdenadija | 0:e7a3d130037a | 43 | lcd.printf("%d. pitanje:",i); |
sdenadija | 0:e7a3d130037a | 44 | wait(1.5); |
sdenadija | 0:e7a3d130037a | 45 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 46 | i++; |
sdenadija | 0:e7a3d130037a | 47 | |
sdenadija | 0:e7a3d130037a | 48 | postaviPitanje(pitanjeA, pitanjeB, odgA, odgB, odgC, tocanOdg); |
sdenadija | 0:e7a3d130037a | 49 | |
sdenadija | 0:e7a3d130037a | 50 | if(i == 10) { |
sdenadija | 0:e7a3d130037a | 51 | j = 0; |
sdenadija | 0:e7a3d130037a | 52 | } |
sdenadija | 0:e7a3d130037a | 53 | } |
sdenadija | 0:e7a3d130037a | 54 | } |
sdenadija | 0:e7a3d130037a | 55 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 56 | lcd.printf("Kviz zavrsen!"); |
sdenadija | 0:e7a3d130037a | 57 | lcd.locate(3,1); |
sdenadija | 0:e7a3d130037a | 58 | lcd.printf("Tocno %d/10", brojTocnih); |
sdenadija | 0:e7a3d130037a | 59 | wait(3); |
sdenadija | 0:e7a3d130037a | 60 | } |
sdenadija | 0:e7a3d130037a | 61 | |
sdenadija | 0:e7a3d130037a | 62 | void start() |
sdenadija | 0:e7a3d130037a | 63 | { |
sdenadija | 0:e7a3d130037a | 64 | i = 0; |
sdenadija | 0:e7a3d130037a | 65 | } |
sdenadija | 0:e7a3d130037a | 66 | |
sdenadija | 0:e7a3d130037a | 67 | void zapocniKviz() |
sdenadija | 0:e7a3d130037a | 68 | { |
sdenadija | 0:e7a3d130037a | 69 | lcd.locate(2,0); |
sdenadija | 0:e7a3d130037a | 70 | lcd.printf("Zapocni kviz"); |
sdenadija | 0:e7a3d130037a | 71 | lcd.locate(5,1); |
sdenadija | 0:e7a3d130037a | 72 | lcd.printf("Sretno!"); |
sdenadija | 0:e7a3d130037a | 73 | while(i) { |
sdenadija | 0:e7a3d130037a | 74 | button.rise(&start); |
sdenadija | 0:e7a3d130037a | 75 | } |
sdenadija | 0:e7a3d130037a | 76 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 77 | } |
sdenadija | 0:e7a3d130037a | 78 | |
sdenadija | 0:e7a3d130037a | 79 | void postaviPitanje(string pitanjeA,string pitanjeB, string odgA, string odgB, string odgC, string tocanOdg) |
sdenadija | 0:e7a3d130037a | 80 | { |
sdenadija | 0:e7a3d130037a | 81 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 82 | lcd.locate(0,0); |
sdenadija | 0:e7a3d130037a | 83 | lcd.printf("%s",pitanjeA.c_str()); |
sdenadija | 0:e7a3d130037a | 84 | lcd.locate(0,1); |
sdenadija | 0:e7a3d130037a | 85 | lcd.printf("%s",pitanjeB.c_str()); |
sdenadija | 0:e7a3d130037a | 86 | wait(3); |
sdenadija | 0:e7a3d130037a | 87 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 88 | |
sdenadija | 0:e7a3d130037a | 89 | lcd.printf("A)%s",odgA.c_str()); |
sdenadija | 0:e7a3d130037a | 90 | wait(2); |
sdenadija | 0:e7a3d130037a | 91 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 92 | |
sdenadija | 0:e7a3d130037a | 93 | lcd.printf("B)%s",odgB.c_str()); |
sdenadija | 0:e7a3d130037a | 94 | wait(2); |
sdenadija | 0:e7a3d130037a | 95 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 96 | |
sdenadija | 0:e7a3d130037a | 97 | lcd.printf("C)%s",odgC.c_str()); |
sdenadija | 0:e7a3d130037a | 98 | wait(2); |
sdenadija | 0:e7a3d130037a | 99 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 100 | |
sdenadija | 0:e7a3d130037a | 101 | timer.reset(); |
sdenadija | 0:e7a3d130037a | 102 | timer.start(); |
sdenadija | 0:e7a3d130037a | 103 | lcd.printf("Vas odgovor je?"); |
sdenadija | 0:e7a3d130037a | 104 | while(timer.read_ms() < 3500) { |
sdenadija | 0:e7a3d130037a | 105 | if(buttonA || buttonB || buttonC) { |
sdenadija | 0:e7a3d130037a | 106 | if (buttonA &&(tocanOdg == odgA)) { |
sdenadija | 0:e7a3d130037a | 107 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 108 | lcd.locate(5,0); |
sdenadija | 0:e7a3d130037a | 109 | lcd.printf("Tocno"); |
sdenadija | 0:e7a3d130037a | 110 | wait(1); |
sdenadija | 0:e7a3d130037a | 111 | brojTocnih++; |
sdenadija | 0:e7a3d130037a | 112 | break; |
sdenadija | 0:e7a3d130037a | 113 | } |
sdenadija | 0:e7a3d130037a | 114 | if (buttonB &&(tocanOdg == odgB)) { |
sdenadija | 0:e7a3d130037a | 115 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 116 | lcd.locate(5,0); |
sdenadija | 0:e7a3d130037a | 117 | lcd.printf("Tocno"); |
sdenadija | 0:e7a3d130037a | 118 | wait(1); |
sdenadija | 0:e7a3d130037a | 119 | brojTocnih++; |
sdenadija | 0:e7a3d130037a | 120 | break; |
sdenadija | 0:e7a3d130037a | 121 | } |
sdenadija | 0:e7a3d130037a | 122 | if (buttonC &&(tocanOdg == odgC)) { |
sdenadija | 0:e7a3d130037a | 123 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 124 | lcd.locate(5,0); |
sdenadija | 0:e7a3d130037a | 125 | lcd.printf("Tocno"); |
sdenadija | 0:e7a3d130037a | 126 | wait(1); |
sdenadija | 0:e7a3d130037a | 127 | brojTocnih++; |
sdenadija | 0:e7a3d130037a | 128 | break; |
sdenadija | 0:e7a3d130037a | 129 | } else { |
sdenadija | 0:e7a3d130037a | 130 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 131 | lcd.locate(5,0); |
sdenadija | 0:e7a3d130037a | 132 | lcd.printf("Krivo"); |
sdenadija | 0:e7a3d130037a | 133 | wait(1); |
sdenadija | 0:e7a3d130037a | 134 | break; |
sdenadija | 0:e7a3d130037a | 135 | } |
sdenadija | 0:e7a3d130037a | 136 | } |
sdenadija | 0:e7a3d130037a | 137 | if (timer.read_ms() >2500) { |
sdenadija | 0:e7a3d130037a | 138 | lcd.cls(); |
sdenadija | 0:e7a3d130037a | 139 | lcd.printf("Isteklo vrijeme"); |
sdenadija | 0:e7a3d130037a | 140 | wait(1); |
sdenadija | 0:e7a3d130037a | 141 | break; |
sdenadija | 0:e7a3d130037a | 142 | } |
sdenadija | 0:e7a3d130037a | 143 | } |
sdenadija | 0:e7a3d130037a | 144 | } |