fort test av mbed cli

Fork of Alarmsystem_rev_innlevering by Programmeringsgruppe 1

Revision:
17:f27485b6d16e
Parent:
16:3d2e29aa5df5
Child:
18:e06a42c5d2a4
--- a/main.cpp	Wed Feb 21 16:00:43 2018 +0000
+++ b/main.cpp	Thu Mar 08 22:34:53 2018 +0000
@@ -7,7 +7,6 @@
 #define Inn 4
 Serial pc(USBTX, USBRX);
 LocalFileSystem local("local");
-FILE *fp = fopen("/local/log.txt", "w" ) ;
 
 /////INNGANGER/////
 DigitalIn Servicebryter(p20);
@@ -18,243 +17,309 @@
 
 /////UTGANGER/////
 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 Utganger[8] = {p21, p22, p23, p24, p25,p26,p27,p28};
 
 /////VARIABLER/////
 float Soner[Inn];
-int tilstand = 0;
+int minne[8] = {};
+int tilstand[8]= {};
+volatile int buffer;
 volatile bool running = true;
 volatile bool admin = false;
-string password = ("admin");
+volatile bool start = false;
+volatile bool stopp = true;
+string passord = ("admin");
+string start_kommando = ("start");
+string stopp_kommando = ("stopp");
 Timer t;
+int v = 0;
 
 /////FUNKSJON DEKLARASJONER/////
 void Alarmf();
 Thread Alarm;
-int TilstandSjekk(int, int);
+Thread Read;
 void admin_access_granted();
 void sone_monitor();
+int log_to_file(int, int);
 void password_check();
 void read_keyinput();
-void request_status();
-void request_status_sone_dor(int sone, int dor);
+void start_sys();
+void stopp_sys();
+int logg_start();
+int logg_stopp();
+int request_status_sys();
+int request_status_alarm(int);
+int TilstandSjekk();
 extern "C" void mbed_reset();
-int log_to_file(int, int);
 
 /////MAIN/////
 int main()
 {
+    Read.start(password_check);// here stod den når vi brukte (read_keyinput)
     t.start();
     while(1) {
-        if(admin == false) {
-            password_check();
-        }
-        if(Servicebryter == 1) {
-            AlarmUtganger1 = 0;
-            AlarmUtganger2 = 0;
+        if(Servicebryter == 1) { //Hvis du trykker på servicebryteren, starter man innelåst modus i 15 sek der alarmer slår seg av.
             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();
+        while((admin) && (Servicebryter == 0)&&(start == true) && (stopp == false)) { //Hvis man har skrevet inn admin passord og servicebryteren ikke er trykket på, kjører alle funksjonene i en løkke.
+            Alarm.start(Alarmf); //dette starter funksjonen Alarmf i en tråd, dvs at denne går kontinuerlig og ikke stopper opp programmet.
+            sone_monitor();// Tilordener sloyfe verdier til tabell for soner.
+            wait(0.1);
+            TilstandSjekk();
         }
     }
 }
 
+
 /////FUNKSJONER/////
 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;
         }
     }
 }
 
-int TilstandSjekk(int i, int tilstand)
+void sone_monitor()
 {
-    log_to_file(i, tilstand);
-    if(tilstand == 0) {
-        running = false;
-        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;
+    //Først legger vi de forskjellige sonene inn i en tabell.
+    Soner[0] = _Sone1;
+    Soner[1] = _Sone2;
+    Soner[2] = _Sone3;
+    Soner[3] = _Sone4;
+    for(int i = 0, x = 0; i < 4; i++,x+=2) { //Dette sjekker en og en sone og setter de inn i riktige tilstander.
+        if( (Soner[i] > 0.35 ) && ( Soner[i] < 0.45) ) { //Normaldrift
+            tilstand[x] = 0;
+            tilstand[x+1] = 0;
+        }
+        if( (Soner[i] > 0.6 ) && ( Soner[i] < 0.7) ) { //Tilstand1, Dør 1 åpen
+            tilstand[x] = 1;
+            tilstand[x+1] = 0;
+            running = true;
+        }
+        if( (Soner[i] > 0.46 ) && ( Soner[i] < 0.55) ) { //Tilstand2, Dør 2 åpen
+            tilstand[x] = 0;
+            tilstand[x+1] = 1;
+            running = true;
+        }
+        if( (Soner[i] > 0.9) ) { //Tilstand 3, Begge dører er åpen
+            tilstand[x] = 1;
+            tilstand[x+1] = 1;
+        }
     }
-    if(tilstand == 1) { //Hvis dør 1 er åpen...
-        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(tilstand == 2) { //Hvis dør 2 er åpen...
-        running = true;
-        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.
-    }
-    if(tilstand == 3) { //Hvis begge dører er åpne
-        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;
-    }
-    return 0;
 }
 
-int log_to_file(int i, int tilstand)
+
+int TilstandSjekk()    // [ x, x+1, x+2, x+3, x+4, x+5, x+6, x+7 ]
 {
-    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;
+    for (int i = 0; i < 8; i++) {
+        if(minne[i] != tilstand[i]) {
+            Utganger[i] = 1;
+            minne[i] = tilstand[i];
+            log_to_file(i,Utganger[i]);
         }
     }
     return 0;
 }
 
-void sone_monitor()
+////////////////////////////////////////////////////////////
+/////////////////Mulige logg innforinger////////////////////
+// Tid: t sekunder                                        //
+// Alarm 1 har blitt utloost // Dette betyr Sone 1 door 1 //
+// Alarm 2 har blitt utloost // Dette betyr Sone 1 door 2 //
+// Alarm 3 har blitt utloost // Dette betyr Sone 2 door 1 //
+// Alarm 4 har blitt utloost // Dette betyr Sone 2 door 2 //
+// Alarm 5 har blitt utloost // Dette betyr Sone 3 door 1 //
+// Alarm 6 har blitt utloost // Dette betyr Sone 3 door 2 //
+// Alarm 7 har blitt utloost // Dette betyr Sone 4 door 1 //
+// Alarm 8 har blitt utloost // Dette betyr Sone 4 door 2 //
+////////////////////////////////////////////////////////////
+
+int log_to_file(int c, int b)   // c er sone, b er tilsand.
 {
-    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);
-        }
+    FILE *fp ;
+    fp = fopen( "/local/log.txt", "a" ) ;
+    if(fp != NULL) {
+        float tid = t.read();
+        fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \nAlarm %d: er utloost \n", tid, c+1);
     }
+    fclose(fp);
+    return 0;
 }
+
 void admin_access_granted()
 {
     admin = true;
-    pc.printf("Admin access granted\n");//info
+    running = false;
+    pc.printf("\nAdministrator tilgang innvilget\n");//info
     pc.printf("Folgende kommandoer kan brukes: \n");// liste over funksjoner tilgjenglig.
-    pc.printf("Status sone og dor(sone forst, dor etter) Kommando: 1,2 \n");// funksjon 1 - request spesific status
-    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
+    pc.printf("Starte overvaaking av systemet. Kommando: 'start' + 'Enter'\n");//
+    pc.printf("Stoppe overvaaking av systemet. Kommando: 'stopp' + 'Enter'\n");//
+    pc.printf("Status alarm for hver some. Kommando: reqa1 \n");// funksjon 1 - request spesific status
+    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
+    read_keyinput();
 }
 
 void password_check()
 {
-    if(pc.readable() == 1) {
-        pc.printf("Write password: ");
-        string b;
-        char s;
-        for(int i = 0; i < 5; i++) {
-            s = pc.getc();
-            pc.printf("%c", s);
-            b += s;
-            if(b == password) {
-                admin_access_granted();
-            }
-        }
+    if(v == 0) {
+        pc.printf("Skriv passord: ");
+        v = 1;
+    }
+    char tastepassord[20];
+    pc.scanf("%s",&tastepassord);
+    int k = strcmp(tastepassord, "passord");
+    if(!k) {
+        admin_access_granted();
     }
 }
 
 void read_keyinput()
 {
-    if(pc.readable() == 1) {
-        pc.printf("\nDu skriver: ");
-        string read;
-        char c;
-        for(int i = 0; i < 6; i++) {
-            c = pc.getc();
-            pc.printf("%c ", c);
-            read += c;
-            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();
-            }
-        }
+    char read[20];
+    pc.scanf("%s",&read);
+    if(!strcmp(read, "start")) {
+        pc.printf("du er i start kommando");
+        start_sys();
+    }
+    if(!strcmp(read,"stopp")) {
+        stopp_sys();
     }
+    if( !strcmp(read, "reset")) mbed_reset();
+    if( !strcmp(read, "reqa1")) request_status_alarm(1);
+    if( !strcmp(read, "reqa2")) request_status_alarm(2);
+    if( !strcmp(read, "reqa3")) request_status_alarm(3);
+    if( !strcmp(read, "reqa4")) request_status_alarm(4);
+    if( !strcmp(read, "reqa5")) request_status_alarm(5); /// Jeg skriver denne kommandoen til systemet - gå til linje 287!
+    if( !strcmp(read, "reqa6")) request_status_alarm(6);
+    if( !strcmp(read, "reqa7")) request_status_alarm(7);
+    if( !strcmp(read, "reqa8")) request_status_alarm(8);
+    if( !strcmp(read, "status")) request_status_sys();
+}
+
+void start_sys()    // funksjon som lar systemet starte opp og kaller opp logg funksjon for og logge start.
+{
+    start = true;
+    stopp = false;
+    pc.printf("\nSystemet ble startet\n");
+    logg_start();
+}
+
+void stopp_sys()    // funksjon som lar systemet stopp opp og kaller opp logg funksjon for og logge stopp.
+{
+    start = false;
+    stopp = true;
+    running = false;
+    pc.printf("\nSystemet ble stoppet\n");
+    logg_stopp();
 }
 
+int logg_start()
+{
+    FILE *fp ;
+    fp = fopen( "/local/log.txt", "a" ) ;
+    if(fp != NULL) {
+        float tid = t.read();
+        fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \n Overvaakingen ble startet \n", tid);//t er tid
 
-void request_status_sone_dor(int sone, int dor)
+        fclose(fp);
+        return 0;
+    } else {
+        return 1;
+    }
+}
+int logg_stopp()
+{
+    FILE *fp ;
+    fp = fopen( "/local/log.txt", "a" ) ;
+    if(fp != NULL) {
+        float tid = t.read();
+        fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \n Overvaakingen ble stoppet \n", tid);//t er tid
+        fclose(fp);
+        return 0;
+    } else {
+        return 1;
+    }
+}
+int request_status_alarm(int v)
 {
-    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);
+    switch(v) {
+        case 1:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 1 i sone 1 er utloost\n");
+            } else {
+                pc.printf("Door 1 i sone 1 er ikke utloost\n");
+            }
+            break;
+        case 2:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 2 i sone 1 er utloost\n");
+            } else {
+                pc.printf("Door 2 i sone 1 er ikke utloost\n");
+            }
+            break;
+        case 3:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 1 i sone 2 er utloost\n");
+            } else {
+                pc.printf("Door 1 i sone 2 er ikke utloost\n");
+            }
+            break;
+        case 4:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 2 i sone 2 er utloost\n");
+            } else {
+                pc.printf("Door 2 i sone 2 er ikke utloost\n");
             }
-            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);
+            break;
+        case 5:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 1 i sone 3 er utloost\n");
+            } else {
+                pc.printf("Door 1 i sone 3 er ikke utloost\n");
+            }
+            break;
+        case 6:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 2 i sone 3 er utloost\n");
+            } else {
+                pc.printf("Door 2 i sone 3 er ikke utloost\n");
             }
+            break;
+        case 7:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 1 i sone 4 er utloost\n");
+            } else {
+                pc.printf("Door 1 i sone 4 er ikke utloost\n");
+            }
+            break;
+        case 8:
+            if(Utganger[v] == 1) {
+                pc.printf("Door 2 i sone 4 er utloost\n");
+            } else {
+                pc.printf("Door 2 i sone 4 er ikke utloost\n");
+            }
+            break;
+    }
+    return 0;
+}
+int request_status_sys()
+{
+    for(int u = 1; u <9; u++) {
+        if(Utganger[u] == 1) {
+            pc.printf("Alarm %d er utloost\n", u);
+        } else {
+            pc.printf("Alarm %d er ikke utloost\n", u);
         }
     }
-}
-
-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);
-    }
+    return 0;
 }
\ No newline at end of file