fort test av mbed cli

Fork of Alarmsystem_rev_innlevering by Programmeringsgruppe 1

Revision:
16:3d2e29aa5df5
Parent:
15:272fb4e610dc
Child:
17:f27485b6d16e
--- a/main.cpp	Tue Feb 20 14:06:31 2018 +0000
+++ b/main.cpp	Wed Feb 21 16:00:43 2018 +0000
@@ -1,15 +1,13 @@
 #include "mbed.h"
 #include "rtos.h"
-#include <RtosTimer.h>
-#include <math.h>
-#include "mbed_error.h"
 #include <string>
-#include <iostream>
+#include <stdio.h>
 
 /////DEFINISJONER/////
 #define Inn 4
 Serial pc(USBTX, USBRX);
-//#define Feil 0<1
+LocalFileSystem local("local");
+FILE *fp = fopen("/local/log.txt", "w" ) ;
 
 /////INNGANGER/////
 DigitalIn Servicebryter(p20);
@@ -22,49 +20,53 @@
 DigitalOut Driftslys(LED1);
 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
-//DigitalOut myled2(LED2);
 
 /////VARIABLER/////
 float Soner[Inn];
 int tilstand = 0;
-int TilstandSjekk(int, int);
 volatile bool running = true;
 volatile bool admin = false;
 string password = ("admin");
-string keyinput;
-//volatile int Klokke = 0;
-//nt Tid = 0;
+Timer t;
 
 /////FUNKSJON DEKLARASJONER/////
 void Alarmf();
 Thread Alarm;
-Thread Sone;
-int Tilstandssjekk();
+int TilstandSjekk(int, int);
 void admin_access_granted();
 void sone_monitor();
 void password_check();
-//void read_keyinput();
-//void Alarm();
-//Ticker AlarmBlink; // 10Hz blinking for alarmfunksjon på lys og telling
-
+void read_keyinput();
+void request_status();
+void request_status_sone_dor(int sone, int dor);
+extern "C" void mbed_reset();
+int log_to_file(int, int);
 
 /////MAIN/////
 int main()
 {
+    t.start();
     while(1) {
         if(admin == false) {
             password_check();
         }
-        while(admin) {
+        if(Servicebryter == 1) {
+            AlarmUtganger1 = 0;
+            AlarmUtganger2 = 0;
+            running = false;
+            pc.printf("NB! Alle alarmer er i innelast modus i 15 sek!! \n");
+            wait(10);
+            pc.printf("NB! Alarmer gar pa om 5 sek! \n");
+            wait(5);
+        }
+        while((admin) && (Servicebryter == 0)) {
             Alarm.start(Alarmf);
             sone_monitor();
             read_keyinput();
-        }//if-end
-    }//main-end
+        }
+    }
 }
 
-
-
 /////FUNKSJONER/////
 void Alarmf(void)
 {
@@ -80,58 +82,67 @@
 
 int TilstandSjekk(int i, int tilstand)
 {
+    log_to_file(i, tilstand);
     if(tilstand == 0) {
-        //pc.printf("Vi er i funksjonen normaldrift i sone: %d \n", i);
-        //AlarmBlink.detach();
         running = false;
-        double n = 2; // We want 2^i
+        double n = 2;
         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;
-        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);
-        //Alarm();
         running = true;
-        double n = 2; // We want 2^i
+        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.
-        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);
-        //Alarm();
         running = true;
-        double n = 2; // We want 2^i
+        double n = 2;
         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);;
-        // Alarm();
         running = true;
         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;
 }
+
+int log_to_file(int i, int tilstand)
+{
+    int p;
+    FILE *fp = fopen("/local/log.txt", "w" ) ;
+    if(fp != NULL) {
+        if ((tilstand == 1) && (p != 1)) {
+            fprintf(fp,"Sone %d, dor 1 er aapen \n",i);
+            fprintf(fp,"Tid:%f siden start \n",t.read());
+            p = 1;
+        }
+
+        if ((tilstand == 2) && (p != 2)) {
+            fprintf(fp,"Sone %d, dor 2 er lukket \n",i);
+            fprintf(fp,"Tid:%f siden start \n",t.read());
+            p = 2;
+        }
+        if ((tilstand == 3) && (p != 3)) {
+            fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i);
+            fprintf(fp,"Tid:%f siden start \n",t.read());
+            p = 3;
+        }
+    }
+    return 0;
+}
+
 void sone_monitor()
 {
     Soner[0] = _Sone1;
@@ -139,37 +150,24 @@
     //Soner[2] = _Sone3;
     //Soner[3] = _Sone4;
     for(int i=0; i < Inn; i++) {
-        read_keyinput(i);
-        //pc.printf("%f\n", Soner[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
-            //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");
+        if((Soner[i] > 0.65 )&&( Soner[i] < 0.69)) { //Tilstand2, Dør 2 åpen
             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");
+        if(Soner[i] >= 1) { //Tilstand 3, Begge dører er åpen
             tilstand = 3;
             TilstandSjekk(i, tilstand);
         }
-        //wait(1.5);
     }
-    //pc.printf("%f\n", Sone1[]);
-    //Tilstandssjekk(Sone1[]);
-    //float volt = Sone1[];
-    //pc.printf("%f\n", volt);
-    //while(sysclock == 1);
-    //while(sysclock == 0);
-    //Tid++;
 }
 void admin_access_granted()
 {
@@ -180,6 +178,7 @@
     pc.printf("Status alle soner og dorer. Kommando: Status \n");// funksjon 1 - request status all
     pc.printf("Reset hele systemet. Kommando: 'Reset' \n");// funksjon 4 - request log all
 }
+
 void password_check()
 {
     if(pc.readable() == 1) {
@@ -197,71 +196,65 @@
     }
 }
 
-void read_keyinput(int i)
+void read_keyinput()
 {
     if(pc.readable() == 1) {
-        pc.printf("Du skriver: ");
+        pc.printf("\nDu skriver: ");
         string read;
         char c;
-        for(i = 0; i < 6; i++) {
+        for(int i = 0; i < 6; i++) {
             c = pc.getc();
-            pc.printf("%c", c);
+            pc.printf("%c ", c);
             read += c;
-            switch(read) {
-                case "1, 1":
-                    request_status_sone_dor(1, 1);
-                    break;
-                case "1, 2":
-                    request_status_sone_dor(1, 2);
-                    break;
-                case "2, 1":
-                    request_status_sone_dor(2, 1);
-                    break;
-                case "2, 2":
-                    request_status_sone_dor(2, 2);
-                    break;
-                case "3, 1":
-                    request_status_sone_dor(3, 1);
-                    break;
-                case "3, 2":
-                    request_status_sone_dor(3, 2);
-                    break;
-                case "4, 1":
-                    request_status_sone_dor(4, 1);
-                    break;
-                case "4, 2":
-                    request_status_sone_dor(4, 2);
-                    break;
-                case "Status":
-                    request_status();
-                    break;
-                case "Reset":
-                    request_reset();
-                    break;
+            if( read == ("1, 1")) request_status_sone_dor(1, 1);
+            if( read == ("1, 2")) request_status_sone_dor(1, 2);
+            if( read == ("2, 1")) request_status_sone_dor(2, 1);
+            if( read == ("2, 2")) request_status_sone_dor(2, 2);
+            if( read == ("3, 1")) request_status_sone_dor(3, 1);
+            if( read == ("3, 2")) request_status_sone_dor(3, 2);
+            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();
             }
         }
     }
 }
 
+
 void request_status_sone_dor(int sone, int dor)
 {
-    double n = 2; // We want 2^i
-    double Y = 1;
-    for(int k=1; k<=sone; k++) Y = Y*n;
-    if(dor == 1) {
-        if (Alarmutganger1 == Y) pc.printf("Dor: %d i sone: %d er lukket", dor, Y);
-        else pc.printf("Dor: %d i sone: %d er apnet", dor, Y);
-    }
-    if(dor == 2) {
-        if (AlarmUtganger2 == Y) pc.printf("Dor: %d i sone: %d er lukket", dor, Y);
-        else pc.printf("Dor: %d i sone: %d er apnet", dor, Y);
+    int n = 2;
+    for(int i = 0; i <= 16;) {
+        if(i == 0) i = 1;
+        else i = i * n;
+        if(sone == i) {
+            if(dor == 1) {
+                if(AlarmUtganger1 == sone) pc.printf("Dor: %d i sone: %d er apnet \n", dor, sone);
+                else pc.printf("Dor: %d i sone: %d er lukket \n", dor, sone);
+            }
+            if(dor == 2) {
+                if(AlarmUtganger2 == sone) pc.printf("Dor: %d i sone: %d er apnet \n", dor, sone);
+                else pc.printf("Dor: %d i sone: %d er lukket \n", dor, sone);
+            }
+        }
     }
 }
 
-void request_status() {
-    int dor1[Inn] = {
-    dor1[Inn] = AlarmUtganger2;
-    
-
-//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
\ No newline at end of file
+void request_status()
+{
+    int sone = 0;
+    int n = 2;
+    for(int i = 0; i <= 8;) {
+        sone = sone + sone;
+        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);
+        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);
+    }
+}
\ No newline at end of file