06.03.2018

Dependencies:   Matrix

Fork of Alarmsystem_med_matrix_log_funker_ikke by Programmeringsgruppe 1

Revision:
18:d2e5d6f5faeb
Parent:
17:f046c0ca9edd
--- a/main.cpp	Tue Feb 27 11:19:05 2018 +0000
+++ b/main.cpp	Tue Mar 06 14:14:42 2018 +0000
@@ -2,14 +2,13 @@
 #include "rtos.h"
 #include <string>
 #include <stdio.h>
-#include <vector>
-#include "Matrix.h"
+//#include <vector>
+//#include "Matrix.h"
 
 /////DEFINISJONER/////
 #define Inn 4
 Serial pc(USBTX, USBRX);
 LocalFileSystem local("local");
-FILE *fp = fopen("/local/log.txt", "w" );
 
 /////INNGANGER/////
 DigitalIn Servicebryter(p20);
@@ -26,27 +25,32 @@
 /////VARIABLER/////
 float Soner[Inn];
 int tilstand = 0;
+volatile int buffer;
 volatile bool running = true;
 volatile bool admin = false;
 volatile int y1 = AlarmUtganger1;
 volatile int y2 = AlarmUtganger2;
+volatile int sone;
 string password = ("admin");
 Timer t;
-Matrix tilstander(4, 4);
-Matrix buffer_tilstander(4, 4);
+//enum {tilstand1, tilstand2, tilstand3, normaldrift} state;
+//Matrix tilstander(4, 4);
+//Matrix buffer_tilstander(4, 4);
 
 /////FUNKSJON DEKLARASJONER/////
 void Alarmf();
-void log_to_file();
+//void TilstandSjekk();
+//int log_to_file();
 Thread Alarm;
-Thread Log;
-int TilstandSjekk(int, int);
+//Thread Tilstandsjekk;
+//Thread Log;
 void admin_access_granted();
 void sone_monitor();
 void password_check();
 void read_keyinput();
 void request_status();
 void request_status_sone_dor(int sone, int dor);
+int TilstandSjekk(int, int);
 extern "C" void mbed_reset();
 
 /////MAIN/////
@@ -54,10 +58,10 @@
 {
     t.start();
     while(1) {
-        if(admin == false) {
+        if(admin == false) {  //Hvis passordet ikke er skrevet inn starter en funksjon "password_check"
             password_check();
         }
-        if(Servicebryter == 1) {
+        if(Servicebryter == 1) { //Hvis du trykker på servicebryteren, starter man innelåst modus i 15 sek der alarmer slår seg av.
             AlarmUtganger1 = 0;
             AlarmUtganger2 = 0;
             running = false;
@@ -66,9 +70,13 @@
             pc.printf("NB! Alarmer gar pa om 5 sek! \n");
             wait(5);
         }
-        while((admin) && (Servicebryter == 0)) {
-            Alarm.start(Alarmf);
-            Log.start(log_to_file);
+        while((admin) && (Servicebryter == 0)) { //Hvis man har skrevet inn admin passord og servicebryteren ikke er trykket på, kjører alle funksjonene i en løkke.
+            //if((y1 != AlarmUtganger1) || (y2 != AlarmUtganger2)) log_to_file();
+            //y1 = AlarmUtganger1;
+            //y2 = AlarmUtganger2;
+            Alarm.start(Alarmf); //dette starter funksjonen Alarmf i en tråd, dvs at denne går kontinuerlig og ikke stopper opp programmet.
+            //Log.start(log_to_file);
+            //Tilstandsjekk.start(TilstandSjekk);
             sone_monitor();
             read_keyinput();
         }
@@ -79,19 +87,111 @@
 void Alarmf(void)
 {
     while(1) {
-        if(running == true) {
+        if(running == true) { //Running er en global variabel som blir satt til false ved tilstand Normaldrift eller ved servicebryter lagt inn.
             Driftslys = !Driftslys;
-            Thread::wait(50);
-        } else {
+            Thread::wait(50);  //Som vanlig wait funksjon, bare litt annerledes kode i thread library OS5.
+        } else { //Hvis vi er i normaldrift driftlyset lyse kontinuerlig.
             Driftslys = 1;
         }
     }
 }
 
+void sone_monitor()
+{
+    //Først legger vi de forskjellige sonene inn i en tabell.
+    Soner[0] = _Sone1;
+    Soner[1] = _Sone2;
+    Soner[2] = _Sone3;
+    Soner[3] = _Sone4;
+    int tilstander[Inn];
+    for(int i = 0; i < Inn; i++) { //Dette sjekker en og en sone og setter de inn i riktige tilstander.
+        if((Soner[i] > 0.6 )&&( Soner[i] < 0.7)) { //Tilstand1, Dør 1 åpen
+            //pc.printf("Vi er i Tilstand1\n");
+            //state = tilstand1;
+            //tilstander(1, i) = 1;
+            tilstand = 1;
+            if(tilstander[i] != 1)TilstandSjekk(i, tilstand);
+            tilstander[i] = 1;
+        }
+        if((Soner[i] > 0.35 )&&( Soner[i] < 0.45)) { //Normaldrift
+            //state = normaldrift;
+            tilstand = 0;
+            if(tilstander[i] != 0)TilstandSjekk(i, tilstand);
+            tilstander[i] = 0;
+        }
+        if((Soner[i] > 0.46 )&&( Soner[i] < 0.55)) { //Tilstand2, Dør 2 åpen
+            //state = tilstand2;
+            //tilstander(2, i) = 1;
+            tilstand = 2;
+            if(tilstander[i] != 2)TilstandSjekk(i, tilstand);
+            tilstander[i] = 2;
+        }
+        if((Soner[i] > 0.9) &&( Soner[i] < 1)) { //Tilstand 3, Begge dører er åpen
+            //state = tilstand3;
+            //tilstander(3, i) = 1;
+            tilstand = 3;
+            if(tilstander[i] != 3)TilstandSjekk(i, tilstand);
+            tilstander[i] = 3;
+        }
+    }
+}
+
+/*void TilstandSjekk(void)
+{
+    while(1) {
+        int Y = 1;
+        int n = 2;
+        for(int k=0; k>=sone; k++) Y = k * n;
+        switch(state) {
+            case normaldrift:
+                pc.printf("Vi er i case 0");
+                running = false;
+                if((y1 != AlarmUtganger1) && (y2 != AlarmUtganger2)) {
+                    AlarmUtganger1 =- Y;
+                    AlarmUtganger2 =- Y;
+                }
+                y1 = AlarmUtganger1;
+                y2 = AlarmUtganger2;
+                buffer = 0;
+                break;
+            case tilstand1:
+                pc.printf("Vi er i case 1 \n");
+                running = true;
+                if(y1 != AlarmUtganger1) AlarmUtganger1 =+ Y;
+                if(buffer == ( 2 || 3)) AlarmUtganger2 =- Y;
+                y1 = AlarmUtganger1;
+                buffer = 1;
+                break;
+            case tilstand2:
+                pc.printf("Vi er i case 2 \n");
+                running = true;
+                if(y2 != AlarmUtganger2) AlarmUtganger2 =+ Y;
+                if(buffer == ( 1 || 3 )) AlarmUtganger1 =- Y;
+                y2 = AlarmUtganger2;
+                buffer = 2;
+                break;
+            case tilstand3:
+                pc.printf("Vi er i case 3 \n");
+                running = true;
+                if((y1 != AlarmUtganger1) && (y2 != AlarmUtganger2)) {
+                    AlarmUtganger1 =+ Y;
+                    AlarmUtganger2 =+ Y;
+                }
+                y1 = AlarmUtganger1;
+                y2 = AlarmUtganger2;
+                buffer = 3;
+                break;
+        }
+        Thread:wait(1000);
+    }
+}*/
+
 int TilstandSjekk(int i, int tilstand)
 {
-    tilstander.add(i, tilstand, 1);
+    //tilstander.add(i, tilstand, 1);
     if(tilstand == 0) {
+        wait(0.5);
+        pc.printf("Vi er i normaldrift i sone %d \n", i);
         running = false;
         double n = 2;
         double Y = 1;
@@ -100,14 +200,18 @@
         if ( Y == AlarmUtganger2) AlarmUtganger2 = AlarmUtganger2 - Y;
     }
     if(tilstand == 1) { //Hvis dør 1 er åpen...
+        wait(0.5);
+        pc.printf("Vi er i tilstand 1 i sone %d \n", i);
         running = true;
         double n = 2;
         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.
+        if( Y != AlarmUtganger1) AlarmUtganger1 = Y + AlarmUtganger1; //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
     }
     if(tilstand == 2) { //Hvis dør 2 er åpen...
+        wait(0.5);
+        pc.printf("Vi er i tilstand 2 i sone %d \n", i);
         running = true;
         double n = 2;
         double Y = 1;
@@ -116,6 +220,8 @@
         if( Y!=AlarmUtganger2) AlarmUtganger2 = Y + AlarmUtganger2;  //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
     }
     if(tilstand == 3) { //Hvis begge dører er åpne
+        wait(0.5);
+        pc.printf("Vi er i tilstand 3 i sone %d \n", i);
         running = true;
         double n = 2; // We want 2^i
         double Y = 1;
@@ -126,56 +232,33 @@
     return 0;
 }
 
-void log_to_file(void)
+/*int log_to_file()
 {
-    while(tilstander != buffer_tilstander) {
-        for(int i = 0; i < 4; i++) {
-            if(fp != NULL) {
-                if(tilstander(i, 1) == 1) {
-                    fprintf(fp,"Sone %d, dor 1 er aapen \n", i);
-                    fprintf(fp,"Tid:%f siden start \n",t.read());
-                }
+    //while(tilstander != buffer_tilstander) {
+    // wait(5.0);
 
-                if(tilstander(i, 2) == 1) {
-                    fprintf(fp,"Sone %d, dor 2 er lukket \n", i);
-                    fprintf(fp,"Tid:%f siden start \n",t.read());
-                }
-                if(tilstander(i, 3) == 1) {
-                    fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i);
-                    fprintf(fp,"Tid:%f siden start \n",t.read());
-                }
+    FILE *fp = fopen("/local/LOG.txt", "w" );
+    for(int i = 0; i < 4; i++) {
+        int n = 2;
+        int a1 = n * i;
+        int a2 = n * i;
+            if( (a1 == AlarmUtganger1) && (a2 != AlarmUtganger2) ) {
+                fprintf(fp,"Sone %d, dor 1 er aapen \n", i);
+                fprintf(fp,"Tid:%f siden start \n",t.read());
+            }
+
+            if( (a2 == AlarmUtganger2) && (a1 != AlarmUtganger1) ) {
+                fprintf(fp,"Sone %d, dor 2 er lukket \n", i);
+                fprintf(fp,"Tid:%f siden start \n",t.read());
+            }
+            if ( (a1 == AlarmUtganger1) && (a2 == AlarmUtganger2) ) {
+                fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i);
+                fprintf(fp,"Tid:%f siden start \n",t.read());
             }
         }
-    }
-    buffer_tilstander = tilstander;
-}
+ return 0;
+}*/
 
-void sone_monitor()
-{
-    Soner[0] = _Sone1;
-    //Soner[1] = _Sone2;
-    //Soner[2] = _Sone3;
-    //Soner[3] = _Sone4;
-    for(int i=0; i < Inn; i++) {
-        if((Soner[i] > 0.75 )&&( Soner[i] < 0.83)) { //Tilstand1, Dør 1 åpen
-            //pc.printf("Vi er i Tilstand1\n");
-            tilstand = 1;
-            TilstandSjekk(i, tilstand);
-        }
-        if((Soner[i] > 0.55 )&&( Soner[i] < 0.59)) { //Normaldrift
-            tilstand = 0;
-            TilstandSjekk(i, tilstand);
-        }
-        if((Soner[i] > 0.65 )&&( Soner[i] < 0.69)) { //Tilstand2, Dør 2 åpen
-            tilstand = 2;
-            TilstandSjekk(i, tilstand);
-        }
-        if(Soner[i] >= 1) { //Tilstand 3, Begge dører er åpen
-            tilstand = 3;
-            TilstandSjekk(i, tilstand);
-        }
-    }
-}
 void admin_access_granted()
 {
     admin = true;
@@ -222,13 +305,8 @@
             if( read == ("4, 1")) request_status_sone_dor(4, 1);
             if( read == ("4, 2")) request_status_sone_dor(4, 2);
             if( read == ("Status")) request_status();
-            if( read == ("Stop")) while(1) {
-                    fclose(fp);
-                }
-            if( read == ("Reset")) {
-                fclose(fp);
-                mbed_reset();
-            }
+            //if( read == ("Stop"))
+            if( read == ("Reset")) mbed_reset();
         }
     }
 }
@@ -257,13 +335,13 @@
 {
     int sone = 0;
     int n = 2;
-    for(int i = 0; i <= 8;) {
-        sone = sone + sone;
+    for(int i = 0; i < 8;) {
+        sone = sone + 1;
         if(i == 0) i = 1;
         else i = i*n;
         if(AlarmUtganger1 == i) pc.printf("Dor: 1 i Sone: %d er apent \n", sone);
-        else pc.printf("Dor: 1 i Sone: %d er lukket \n", i);
+        else pc.printf("Dor: 1 i Sone: %d er lukket \n", sone);
         if(AlarmUtganger2 == i) pc.printf("Dor: 2 i Sone: %d er apent \n", sone);
-        else pc.printf("Dor: 2 i Sone: %d er lukket \n", i);
+        else pc.printf("Dor: 2 i Sone: %d er lukket \n", sone);
     }
 }
\ No newline at end of file