Simulacija "F1 paddle shiftera" i brzine okretaja motora, s prikazom gear prikazom na 7 seg. displayu.

Dependencies:   mbed

https://os.mbed.com/media/uploads/mdolenec/f1_paddle_shifter_scheme.jpg

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?

UserRevisionLine numberNew 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