Bjørn André Nyrud
/
Alarmsystem_rev_innlevering_ferdig
fort test av mbed cli
Fork of Alarmsystem_rev_innlevering by
Diff: main.cpp
- 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