Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Alarmsystem_log_funksjon_funker_ikke by
Diff: main.cpp
- 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
    