27.02.2018

Dependencies:   Matrix

Fork of Alarmsystem_log_funksjon_funker_ikke by Programmeringsgruppe 1

Revision:
11:dad1798ed88f
Parent:
10:f0a6d74095d4
Child:
12:0193024eab13
diff -r f0a6d74095d4 -r dad1798ed88f main.cpp
--- a/main.cpp	Fri Feb 09 07:51:55 2018 +0000
+++ b/main.cpp	Fri Feb 09 10:53:12 2018 +0000
@@ -1,5 +1,6 @@
 #include "mbed.h"
 #include <vector>
+#include <math.h>
 
 #define Inn 4
 //#define Feil 0<1
@@ -11,22 +12,21 @@
 BusOut AlarmUtganger1(p21, p22, p23, p24); //1 - Dør 1 Sone 1, 2 - Dør 1 Sone 2, 4 - Dør 1 Sone 3, 8 - Dør 1 Sone 4
 BusOut AlarmUtganger2(p25, p26, p27, p28); //1 - Dør 2 Sone 1, 2 - Dør 2 Sone 2, 4 - Dør 2 Sone 3, 8 - Dør 2 Sone 4
 DigitalIn Servicebryter(p20);
-AnalogIn _Sone1(p15); AnalogIn _Sone2(p16); AnalogIn _Sone3(p17); AnalogIn _Sone4(p19);
-float Soner[Inn];
-int tilstand1(int i);
+AnalogIn _Sone1(p15); AnalogIn _Sone2(p16); AnalogIn _Sone3(p17);  AnalogIn _Sone4(p19);
+float Soner[Inn]; int tilstand = 0;
+int TilstandSjekk(int, int);
 
-//Ticker AlarmBlink; // 10Hz blinking for alarmfunksjon på lys og telling
+Ticker AlarmBlink; // 10Hz blinking for alarmfunksjon på lys og telling
 //nt Tid = 0;
-//volatile int sysclock = 0;
+volatile int sysclock = 0;
 
 int Tilstandssjekk();
-//void AlarmBlink_Start(void);
+void AlarmBlink_Start(void);
 //volatile int Klokke = 0;
 
 int main()
 {
-    //AlarmBlink.attach(&AlarmBlink_Start, 0.05);
-
+    AlarmBlink.attach(&AlarmBlink_Start, 0.05);
     while(1) {
         /*if(Servicebryter == 1) {
             Utganger1 = 0;
@@ -37,21 +37,30 @@
         //Soner[2] = _Sone3;
         //Soner[3] = _Sone4;
         for(int i=0; i < Inn; i++) {
-            pc.printf("%f\n", Soner[i]);
+            //pc.printf("%f\n", Soner[i]);
+            Driftslys = 1;
+            if((AlarmUtganger1 && AlarmUtganger2) > 0) AlarmBlink_Start();
             if((Soner[i] > 0.75 )&&( Soner[i] < 0.83)) { //Tilstand1, Dør 1 åpen
-                pc.printf("Vi er i Tilstand1\n");
-                Tilstand1(i);
+                //pc.printf("Vi er i Tilstand1\n");
+                tilstand = 1;
+                TilstandSjekk(i, tilstand);
             }
             if((Soner[i] > 0.55 )&&( Soner[i] < 0.59)) { //Normaldrift
-                pc.printf("Vi er i Normaldrift\n");
+                //pc.printf("Vi er i Normaldrift\n");
+                tilstand = 0;
+                TilstandSjekk(i, tilstand);
             }
             if((Soner[i] > 0.65 )&&( Soner[i] < 0.69)) { //Tilstand 2, Dør 2 åpen
-                pc.printf("Vi er i tilstand2\n");
+                //pc.printf("Vi er i tilstand2\n");
+                tilstand = 2;
+                TilstandSjekk(i, tilstand);
             }
             if(Soner[i] >= 1) { //Begge dører er åpne
-                pc.printf("Vi er i tilstand 3, begge doorer er aapne");
+                //pc.printf("Vi er i tilstand 3, begge doorer er aapne");
+                tilstand = 3;
+                TilstandSjekk(i, tilstand);
             }
-            wait(1.5);
+            //wait(1.5);
         }
         //pc.printf("%f\n", Sone1[]);
         //Tilstandssjekk(Sone1[]);
@@ -63,15 +72,54 @@
     }
 }
 
-int Tilstand1(int a) {
-    AlarmUtganger1 = pow(2, a); //Alarmutganger operer med binærtall så bytter ut
+int TilstandSjekk(int i, int tilstand)
+{
+    if(tilstand == 0) {
+        //pc.printf("Vi er i funksjonen normaldrift i sone: %d \n", i);
+        double n = 2; // We want 2^i
+        double Y = 1;
+        for(int k=1; k<=i; k++) Y = Y*n;
+        if(Y == AlarmUtganger1) AlarmUtganger1 = AlarmUtganger1 - Y;
+        if(Y == AlarmUtganger2) AlarmUtganger2 = AlarmUtganger2 - Y;
+        if((AlarmUtganger1 && AlarmUtganger2) == 0 ) AlarmBlink.detach();
+        int Utganger1 = AlarmUtganger1; int Utganger2 = AlarmUtganger2;
+        //pc.printf("Utgangsbuss1 har naa verdien: %d \n Utgangsbuss2 har naa verdien: %d", Utganger1, Utganger2);
+    }
+    if(tilstand == 1) { //Hvis dør 1 er åpen...
+        //pc.printf("Vi er i funksjonen tilstandssjekk dor 1, med verdi: %d\n", i);
+        double n = 2; // We want 2^i
+        double Y = 1;
+        for(int k=1; k<=i; k++) Y = Y*n;
+        if( Y == AlarmUtganger2 ) AlarmUtganger2 = AlarmUtganger2 - Y;
+        if( Y!=AlarmUtganger1) AlarmUtganger1 = Y + AlarmUtganger1; //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
+        int Utganger1 = AlarmUtganger1;
+        //pc.printf("Vi har verdien paa utgangsbuss: %d\n", Utganger1);
+    }
+    if(tilstand == 2) { //Hvis dør 2 er åpen...
+        //pc.printf("Vi er i funksjonen tilstandssjekk dor 2, med verdi: %d\n", i);
+        double n = 2; // We want 2^i
+        double Y = 1;
+        for(int k=1; k<=i; k++) Y = Y*n;
+        if( Y == AlarmUtganger1 ) AlarmUtganger1 = AlarmUtganger1 - Y;
+        if( Y!=AlarmUtganger2) AlarmUtganger2 = Y + AlarmUtganger2;  //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
+        int Utganger2 = AlarmUtganger2;
+        //pc.printf("Vi har verdien paa utgangsbuss: %d\n", Utganger2);
+    }
+    if(tilstand == 3) { //Hvis begge dører er åpne
+        //pc.printf("Vi er i funksjonen tilstandssjekk alle dorer, med verdi: %d \n", i);
+        double n = 2; // We want 2^i
+        double Y = 1;
+        for(int k=1; k<=i; k++) Y = Y*n;
+        if( Y!=AlarmUtganger1 ) AlarmUtganger1 = Y + AlarmUtganger1;
+        if( Y!=AlarmUtganger2 ) AlarmUtganger2 = Y + AlarmUtganger2;
+        int Utganger2 = AlarmUtganger2;
+        int Utganger1 = AlarmUtganger2;
+        //pc.printf("Utgangsbuss1 har verdien: %d \n Utgangsbuss2 har verdien: %d \n", Utganger1, Utganger2);
+    }
+    return 0;
 }
 
-/*void AlarmBlink_Start(void)
+void AlarmBlink_Start(void)
 {
-    sysclock = !sysclock;
-    Driftslys = 1;
-    if(Normaldrift == 1) {
-        sysclock = 1;
-    }
-}*/
\ No newline at end of file
+    Driftslys = 0;
+}
\ No newline at end of file