![](/media/cache/group/tvz-logo.png.50x50_q85.png)
Simulacija "F1 paddle shiftera" i brzine okretaja motora, s prikazom gear prikazom na 7 seg. displayu.
Dependencies: mbed
Revision 0:f5d724ec079a, committed 2021-02-22
- Comitter:
- mdolenec
- Date:
- Mon Feb 22 22:20:20 2021 +0000
- Commit message:
- Simulacija F1 paddle shiftera i brzine okretaja motora.
Changed in this revision
diff -r 000000000000 -r f5d724ec079a SegDisplay.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SegDisplay.cpp Mon Feb 22 22:20:20 2021 +0000 @@ -0,0 +1,43 @@ +#include "SegDisplay.h" +BusOut Seg1(PB_4,PB_10,PA_8,PA_9,PC_7,PB_6,PA_7,PA_2); // A,B,C,D,E,F,G,DP +void SegInit(void) +{ + Seg1=SegConvert(0); //inicijalizacija +} +char SegConvert(int SegValue) //funkcija za konverziju int varijable u niz bitova za ispis na 7 seg displayu +{ + char SegByte=0x00; + switch (SegValue) { //DP G F E D C B A + case 0 : + SegByte = 0x3F; + break; // 0 0 1 1 1 1 1 1 binary + case 1 : + SegByte = 0x06; + break; // 0 0 0 0 0 1 1 0 binary + case 2 : + SegByte = 0x5B; + break; // 0 1 0 1 1 0 1 1 binary + case 3 : + SegByte = 0x4F; + break; // 0 1 0 0 1 1 1 1 binary + case 4 : + SegByte = 0x66; + break; // 0 1 1 0 0 1 1 0 binary + case 5 : + SegByte = 0x6D; + break; // 0 1 1 0 1 1 0 1 binary + case 6 : + SegByte = 0x7D; + break; // 0 1 1 1 1 1 0 1 binary + case 7 : + SegByte = 0x07; + break; // 0 0 0 0 0 1 1 1 binary + case 8 : + SegByte = 0x7F; + break; // 0 1 1 1 1 1 1 1 binary + case 9 : + SegByte = 0x6F; + break; // 0 1 1 0 1 1 1 1 binary + } + return SegByte; +} \ No newline at end of file
diff -r 000000000000 -r f5d724ec079a SegDisplay.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SegDisplay.h Mon Feb 22 22:20:20 2021 +0000 @@ -0,0 +1,7 @@ +#ifndef SEGDISPLAY_H +#define SEGDISPLAY_H +#include "mbed.h" +extern BusOut Seg1; //dopušta Seg1 da bude korišten i manipuliran od strane drugih datoteka +void SegInit(void); +char SegConvert(int SegValue); +#endif \ No newline at end of file
diff -r 000000000000 -r f5d724ec079a main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Feb 22 22:20:20 2021 +0000 @@ -0,0 +1,93 @@ +#include "mbed.h" +#include "SegDisplay.h" +InterruptIn button1(PA_5); //Interrupt pin +InterruptIn button2(PA_6); //Interrupt pin +Serial pc(USBTX, USBRX); //Serijska komunikacija s računalom +DigitalOut greenLED(PA_10); +DigitalOut yellowLED(PB_3); +DigitalOut redLED(PB_5); +Ticker blink; //Ticker za blinkanje ledice +Timer debounce; //Timer za micanje debouncinga +void toggle(void); //inicijalizacija funkcije +void toggle2(void); //inicijalizacija funkcije +void Upozorenje(void); //inicijalizacija funkcije +int gear=1; // inicijalizacija varijable +int brzinaOkretaja=0; // inicijalizacija varijable + +void redBlink() +{ + redLED=!redLED; + +} + +//Funkcija za upozorenje kada je idealno za promijeniti brzinu +void Upozorenje() +{ + if(brzinaOkretaja>=4500 && brzinaOkretaja < 5500) { + greenLED=1; + yellowLED=0; + redLED=0; + } else if(brzinaOkretaja>=5500 && brzinaOkretaja < 7000) { + greenLED=1; + yellowLED=1; + redLED=0; + } else if(brzinaOkretaja>=6500 && brzinaOkretaja < 7500) { + greenLED=1; + yellowLED=1; + redLED=1; + } else if(brzinaOkretaja<4500 || brzinaOkretaja>=9000){ + greenLED=0; + yellowLED=0; + redLED=0; + } + return; +} + +int main() //Glavni program +{ + debounce.start(); + SegInit(); // Pozivanje funkcije za inicijalizaciju 7 seg. displaya + while (brzinaOkretaja <= 9000 && gear <=6) { // infinite loop + //brzina=(Ain/3.3)*9000; + brzinaOkretaja = brzinaOkretaja + 100; + pc.printf("Brzina okretaja: %d\n\r", brzinaOkretaja); // Ispis trenutne brzine okretaja + wait(0.15); + button1.rise(&toggle); // Prebacivanje u višu brzinu + button2.rise(&toggle2); // Prebacivanje u nižu brzinu + Upozorenje(); + Seg1 = SegConvert(gear); // Pozivanje funkcije za ispis na 7 seg. displayu + } + blink.attach(&redBlink, 0.25); // Blinkanje ledice pomoću tickera + pc.printf("Zakucali ste motor u blokadu, auto se gasi!!!"); + wait(5); + blink.detach(); +} + +//Interrupt za prebaciti u višu brzini +void toggle() +{ + if (debounce.read_ms()>200) { // only allow toggle if debounce timer + gear=gear+1; // has passed 200 ms + brzinaOkretaja=brzinaOkretaja-3000; + } + debounce.reset(); // restart timer when the toggle is performed +} + +//Interrupt za prebaciti u nizu brzinu +void toggle2() +{ + if (debounce.read_ms()>200){ + gear=gear-1; // + brzinaOkretaja=brzinaOkretaja+1500; + } + debounce.reset(); +} + + + + + + + + +
diff -r 000000000000 -r f5d724ec079a mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Feb 22 22:20:20 2021 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file