Simulacija "F1 paddle shiftera" i brzine okretaja motora, s prikazom gear prikazom na 7 seg. displayu.
Dependencies: mbed
main.cpp@0:f5d724ec079a, 2021-02-22 (annotated)
- Committer:
- mdolenec
- Date:
- Mon Feb 22 22:20:20 2021 +0000
- Revision:
- 0:f5d724ec079a
Simulacija F1 paddle shiftera i brzine okretaja motora.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mdolenec | 0:f5d724ec079a | 1 | #include "mbed.h" |
mdolenec | 0:f5d724ec079a | 2 | #include "SegDisplay.h" |
mdolenec | 0:f5d724ec079a | 3 | InterruptIn button1(PA_5); //Interrupt pin |
mdolenec | 0:f5d724ec079a | 4 | InterruptIn button2(PA_6); //Interrupt pin |
mdolenec | 0:f5d724ec079a | 5 | Serial pc(USBTX, USBRX); //Serijska komunikacija s računalom |
mdolenec | 0:f5d724ec079a | 6 | DigitalOut greenLED(PA_10); |
mdolenec | 0:f5d724ec079a | 7 | DigitalOut yellowLED(PB_3); |
mdolenec | 0:f5d724ec079a | 8 | DigitalOut redLED(PB_5); |
mdolenec | 0:f5d724ec079a | 9 | Ticker blink; //Ticker za blinkanje ledice |
mdolenec | 0:f5d724ec079a | 10 | Timer debounce; //Timer za micanje debouncinga |
mdolenec | 0:f5d724ec079a | 11 | void toggle(void); //inicijalizacija funkcije |
mdolenec | 0:f5d724ec079a | 12 | void toggle2(void); //inicijalizacija funkcije |
mdolenec | 0:f5d724ec079a | 13 | void Upozorenje(void); //inicijalizacija funkcije |
mdolenec | 0:f5d724ec079a | 14 | int gear=1; // inicijalizacija varijable |
mdolenec | 0:f5d724ec079a | 15 | int brzinaOkretaja=0; // inicijalizacija varijable |
mdolenec | 0:f5d724ec079a | 16 | |
mdolenec | 0:f5d724ec079a | 17 | void redBlink() |
mdolenec | 0:f5d724ec079a | 18 | { |
mdolenec | 0:f5d724ec079a | 19 | redLED=!redLED; |
mdolenec | 0:f5d724ec079a | 20 | |
mdolenec | 0:f5d724ec079a | 21 | } |
mdolenec | 0:f5d724ec079a | 22 | |
mdolenec | 0:f5d724ec079a | 23 | //Funkcija za upozorenje kada je idealno za promijeniti brzinu |
mdolenec | 0:f5d724ec079a | 24 | void Upozorenje() |
mdolenec | 0:f5d724ec079a | 25 | { |
mdolenec | 0:f5d724ec079a | 26 | if(brzinaOkretaja>=4500 && brzinaOkretaja < 5500) { |
mdolenec | 0:f5d724ec079a | 27 | greenLED=1; |
mdolenec | 0:f5d724ec079a | 28 | yellowLED=0; |
mdolenec | 0:f5d724ec079a | 29 | redLED=0; |
mdolenec | 0:f5d724ec079a | 30 | } else if(brzinaOkretaja>=5500 && brzinaOkretaja < 7000) { |
mdolenec | 0:f5d724ec079a | 31 | greenLED=1; |
mdolenec | 0:f5d724ec079a | 32 | yellowLED=1; |
mdolenec | 0:f5d724ec079a | 33 | redLED=0; |
mdolenec | 0:f5d724ec079a | 34 | } else if(brzinaOkretaja>=6500 && brzinaOkretaja < 7500) { |
mdolenec | 0:f5d724ec079a | 35 | greenLED=1; |
mdolenec | 0:f5d724ec079a | 36 | yellowLED=1; |
mdolenec | 0:f5d724ec079a | 37 | redLED=1; |
mdolenec | 0:f5d724ec079a | 38 | } else if(brzinaOkretaja<4500 || brzinaOkretaja>=9000){ |
mdolenec | 0:f5d724ec079a | 39 | greenLED=0; |
mdolenec | 0:f5d724ec079a | 40 | yellowLED=0; |
mdolenec | 0:f5d724ec079a | 41 | redLED=0; |
mdolenec | 0:f5d724ec079a | 42 | } |
mdolenec | 0:f5d724ec079a | 43 | return; |
mdolenec | 0:f5d724ec079a | 44 | } |
mdolenec | 0:f5d724ec079a | 45 | |
mdolenec | 0:f5d724ec079a | 46 | int main() //Glavni program |
mdolenec | 0:f5d724ec079a | 47 | { |
mdolenec | 0:f5d724ec079a | 48 | debounce.start(); |
mdolenec | 0:f5d724ec079a | 49 | SegInit(); // Pozivanje funkcije za inicijalizaciju 7 seg. displaya |
mdolenec | 0:f5d724ec079a | 50 | while (brzinaOkretaja <= 9000 && gear <=6) { // infinite loop |
mdolenec | 0:f5d724ec079a | 51 | //brzina=(Ain/3.3)*9000; |
mdolenec | 0:f5d724ec079a | 52 | brzinaOkretaja = brzinaOkretaja + 100; |
mdolenec | 0:f5d724ec079a | 53 | pc.printf("Brzina okretaja: %d\n\r", brzinaOkretaja); // Ispis trenutne brzine okretaja |
mdolenec | 0:f5d724ec079a | 54 | wait(0.15); |
mdolenec | 0:f5d724ec079a | 55 | button1.rise(&toggle); // Prebacivanje u višu brzinu |
mdolenec | 0:f5d724ec079a | 56 | button2.rise(&toggle2); // Prebacivanje u nižu brzinu |
mdolenec | 0:f5d724ec079a | 57 | Upozorenje(); |
mdolenec | 0:f5d724ec079a | 58 | Seg1 = SegConvert(gear); // Pozivanje funkcije za ispis na 7 seg. displayu |
mdolenec | 0:f5d724ec079a | 59 | } |
mdolenec | 0:f5d724ec079a | 60 | blink.attach(&redBlink, 0.25); // Blinkanje ledice pomoću tickera |
mdolenec | 0:f5d724ec079a | 61 | pc.printf("Zakucali ste motor u blokadu, auto se gasi!!!"); |
mdolenec | 0:f5d724ec079a | 62 | wait(5); |
mdolenec | 0:f5d724ec079a | 63 | blink.detach(); |
mdolenec | 0:f5d724ec079a | 64 | } |
mdolenec | 0:f5d724ec079a | 65 | |
mdolenec | 0:f5d724ec079a | 66 | //Interrupt za prebaciti u višu brzini |
mdolenec | 0:f5d724ec079a | 67 | void toggle() |
mdolenec | 0:f5d724ec079a | 68 | { |
mdolenec | 0:f5d724ec079a | 69 | if (debounce.read_ms()>200) { // only allow toggle if debounce timer |
mdolenec | 0:f5d724ec079a | 70 | gear=gear+1; // has passed 200 ms |
mdolenec | 0:f5d724ec079a | 71 | brzinaOkretaja=brzinaOkretaja-3000; |
mdolenec | 0:f5d724ec079a | 72 | } |
mdolenec | 0:f5d724ec079a | 73 | debounce.reset(); // restart timer when the toggle is performed |
mdolenec | 0:f5d724ec079a | 74 | } |
mdolenec | 0:f5d724ec079a | 75 | |
mdolenec | 0:f5d724ec079a | 76 | //Interrupt za prebaciti u nizu brzinu |
mdolenec | 0:f5d724ec079a | 77 | void toggle2() |
mdolenec | 0:f5d724ec079a | 78 | { |
mdolenec | 0:f5d724ec079a | 79 | if (debounce.read_ms()>200){ |
mdolenec | 0:f5d724ec079a | 80 | gear=gear-1; // |
mdolenec | 0:f5d724ec079a | 81 | brzinaOkretaja=brzinaOkretaja+1500; |
mdolenec | 0:f5d724ec079a | 82 | } |
mdolenec | 0:f5d724ec079a | 83 | debounce.reset(); |
mdolenec | 0:f5d724ec079a | 84 | } |
mdolenec | 0:f5d724ec079a | 85 | |
mdolenec | 0:f5d724ec079a | 86 | |
mdolenec | 0:f5d724ec079a | 87 | |
mdolenec | 0:f5d724ec079a | 88 | |
mdolenec | 0:f5d724ec079a | 89 | |
mdolenec | 0:f5d724ec079a | 90 | |
mdolenec | 0:f5d724ec079a | 91 | |
mdolenec | 0:f5d724ec079a | 92 | |
mdolenec | 0:f5d724ec079a | 93 |