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

Files at this revision

API Documentation at this revision

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

SegDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
SegDisplay.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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
--- /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
--- /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();
+}
+
+
+
+
+
+
+
+
+
--- /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