Programmeringsgruppe 1
/
Alarmsystem20_02_2018
klokka 15:07
Fork of AlarmsystemDel1 by
Diff: main.cpp
- Revision:
- 15:272fb4e610dc
- Parent:
- 14:8e7aaf0cf5d7
--- a/main.cpp Tue Feb 20 08:35:16 2018 +0000 +++ b/main.cpp Tue Feb 20 14:06:31 2018 +0000 @@ -3,7 +3,8 @@ #include <RtosTimer.h> #include <math.h> #include "mbed_error.h" -#include<string> +#include <string> +#include <iostream> /////DEFINISJONER///// #define Inn 4 @@ -28,6 +29,7 @@ int tilstand = 0; int TilstandSjekk(int, int); volatile bool running = true; +volatile bool admin = false; string password = ("admin"); string keyinput; //volatile int Klokke = 0; @@ -35,11 +37,13 @@ /////FUNKSJON DEKLARASJONER///// void Alarmf(); -Thread monitoring; +Thread Alarm; +Thread Sone; int Tilstandssjekk(); -int admin_access_granted(); -int sone_monitor(); -int read_keyinput(); +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 @@ -47,26 +51,31 @@ /////MAIN///// int main() { - pc.printf("Write admin access password:\n"); - pc.scanf("%s",keyinput); - if(keyinput == password){ - monitoring(sone_monitor); - admin_access_granted(); - while(1) { - RtosTimer Alarm(Alarmf); + while(1) { + if(admin == false) { + password_check(); + } + while(admin) { + Alarm.start(Alarmf); + sone_monitor(); read_keyinput(); - - }//while-end - }//if-end -}//main-end - + }//if-end + }//main-end +} /////FUNKSJONER///// void Alarmf(void) { - Driftslys = !Driftslys; + while(1) { + if(running == true) { + Driftslys = !Driftslys; + Thread::wait(50); + } else { + Driftslys = 1; + } + } } int TilstandSjekk(int i, int tilstand) @@ -74,7 +83,7 @@ if(tilstand == 0) { //pc.printf("Vi er i funksjonen normaldrift i sone: %d \n", i); //AlarmBlink.detach(); - Alarm.stop(); + running = false; double n = 2; // We want 2^i double Y = 1; for(int k=1; k<=i; k++) Y = Y*n; @@ -87,7 +96,7 @@ if(tilstand == 1) { //Hvis dør 1 er åpen... //pc.printf("Vi er i funksjonen tilstandssjekk dor 1, med verdi: %d\n", i); //Alarm(); - Alarm.start(50); + running = true; double n = 2; // We want 2^i double Y = 1; for(int k=1; k<=i; k++) Y = Y*n; @@ -99,7 +108,7 @@ if(tilstand == 2) { //Hvis dør 2 er åpen... //pc.printf("Vi er i funksjonen tilstandssjekk dor 2, med verdi: %d\n", i); //Alarm(); - Alarm.start(50); + running = true; double n = 2; // We want 2^i double Y = 1; for(int k=1; k<=i; k++) Y = Y*n; @@ -111,7 +120,7 @@ if(tilstand == 3) { //Hvis begge dører er åpne //pc.printf("Vi er i funksjonen tilstandssjekk alle dorer, med verdi: %d \n", i);; // Alarm(); - Alarm.start(50); + running = true; double n = 2; // We want 2^i double Y = 1; for(int k=1; k<=i; k++) Y = Y*n; @@ -123,13 +132,14 @@ } return 0; } -sone_monitor() +void sone_monitor() { Soner[0] = _Sone1; //Soner[1] = _Sone2; //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"); @@ -161,22 +171,97 @@ //while(sysclock == 0); //Tid++; } -admin_access_granted() +void admin_access_granted() +{ + admin = true; + pc.printf("Admin access granted\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 +} +void password_check() { - pc.printf("Admin access granted\n");//info - pc.printf("Following commands are available\n");// liste over funksjoner tilgjenglig. - pc.printf("#req_sta_sone(1-4)_door(1-2)\n");// funksjon 1 - request spesific status - pc.printf("#req_sta_all\n");// funksjon 1 - request status all - pc.printf("#reset_sone(1-4)_door(1-2)\n");// funksjon 3 - request spesific log - pc.printf("#reset_all\n");// funksjon 4 - request log all + 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(); + } + } + } } -read_keyinput() -{ - serial.readabl - pc.scanf("%s", keyinput); -/*void Alarm() +void read_keyinput(int i) { - Driftslys = !Driftslys; - wait(0.05); - }*/ \ No newline at end of file + if(pc.readable() == 1) { + pc.printf("Du skriver: "); + string read; + char c; + for(i = 0; i < 6; i++) { + c = pc.getc(); + 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; + } + } + } +} + +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); + } +} + +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