Prototip volana F1

Dependencies:   mbed trostrukiSedamSeg

https://os.mbed.com/media/uploads/mmaretic/volan_shema.pdf https://os.mbed.com/media/uploads/mmaretic/prototip_volana_formule_1.pdf

Revision:
0:1e6d734c8f95
Child:
2:3227eef26c80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 02 18:41:30 2021 +0000
@@ -0,0 +1,102 @@
+#include "mbed.h"
+#include "trostrukiSedamSeg.h"
+
+Ticker DrsDebouncer;
+Ticker UpozorenjaDebouncer;
+Ticker Multiplexer;
+InterruptIn DrsButton(PB_10);
+InterruptIn UpozorenjaButton(PB_4);
+AnalogIn Ain(PC_0);
+PwmOut servo(PA_10);
+
+char zaPrikazati[10];
+
+SedamSeg prikaz;
+
+volatile enum state{
+    BRZINA,
+    DRS,
+    UPOZORENJA   
+} s;
+
+void drsInt();
+void debouncedDrsInt();
+void upozorenjaInt();
+void debouncedUpozorenjaInt();
+void displaySeg();
+
+int main() {
+    
+    float ADCvalue;
+    
+    servo.period_ms(20);
+    servo.pulsewidth_us(1250);
+
+    DrsButton.mode(PullDown);
+    DrsButton.rise(&drsInt);
+    DrsButton.fall(&drsInt);
+    
+    UpozorenjaButton.mode(PullDown);
+    UpozorenjaButton.rise(&upozorenjaInt);
+    UpozorenjaButton.fall(&upozorenjaInt);
+    
+    Multiplexer.attach(&displaySeg,0.005);
+
+    while(1){
+        switch(s){
+            case DRS:
+                servo.pulsewidth_us(2000);
+                sprintf(zaPrikazati,"%s","DRS");
+                break;
+            case UPOZORENJA:
+                servo.pulsewidth_us(1250);
+                sprintf(zaPrikazati,"%s","UPO");
+                break;
+            default:
+                servo.pulsewidth_us(1250);
+                ADCvalue = Ain - 0.03;
+                ADCvalue = (ADCvalue < 0) ? 0 : ADCvalue;
+                ADCvalue *= 309.27;
+                sprintf(zaPrikazati,"%i",(int)ADCvalue);
+                if(ADCvalue < 10){
+                    zaPrikazati[2] = zaPrikazati[0];
+                    zaPrikazati[0] = '0';
+                    zaPrikazati[1] = '0';
+                }
+                else if(ADCvalue < 100){
+                    zaPrikazati[2] = zaPrikazati[1];
+                    zaPrikazati[1] = zaPrikazati[0];
+                    zaPrikazati[0] = '0';
+                }
+                break;
+        }
+        
+        wait(0.1);
+    }    
+}
+
+void drsInt(){
+    DrsButton.disable_irq();
+    DrsDebouncer.attach(&debouncedDrsInt,0.02);
+}
+
+void debouncedDrsInt(){
+    DrsDebouncer.detach();
+    s = (DrsButton && !UpozorenjaButton) ? DRS : (UpozorenjaButton ? UPOZORENJA : BRZINA);
+    DrsButton.enable_irq();
+}
+
+void upozorenjaInt(){
+    UpozorenjaButton.disable_irq();
+    UpozorenjaDebouncer.attach(&debouncedUpozorenjaInt,0.02);
+}
+
+void debouncedUpozorenjaInt(){
+    UpozorenjaDebouncer.detach();
+    s = UpozorenjaButton ? UPOZORENJA : (DrsButton ? DRS : BRZINA);
+    UpozorenjaButton.enable_irq();
+}
+
+void displaySeg(){   
+    prikaz.displaySeg(zaPrikazati);
+}
\ No newline at end of file