Bjørn André Nyrud
/
Alarmsystem_rev_innlevering_ferdig
fort test av mbed cli
Fork of Alarmsystem_rev_innlevering by
main.cpp
- Committer:
- Banyrud
- Date:
- 2018-03-08
- Revision:
- 17:f27485b6d16e
- Parent:
- 16:3d2e29aa5df5
- Child:
- 18:e06a42c5d2a4
File content as of revision 17:f27485b6d16e:
#include "mbed.h" #include "rtos.h" #include <string> #include <stdio.h> /////DEFINISJONER///// #define Inn 4 Serial pc(USBTX, USBRX); LocalFileSystem local("local"); /////INNGANGER///// DigitalIn Servicebryter(p20); AnalogIn _Sone1(p15); AnalogIn _Sone2(p16); AnalogIn _Sone3(p17); AnalogIn _Sone4(p19); /////UTGANGER///// DigitalOut Driftslys(LED1); DigitalOut Utganger[8] = {p21, p22, p23, p24, p25,p26,p27,p28}; /////VARIABLER///// float Soner[Inn]; int minne[8] = {}; int tilstand[8]= {}; volatile int buffer; volatile bool running = true; volatile bool admin = false; 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; Thread Read; void admin_access_granted(); void sone_monitor(); int log_to_file(int, int); void password_check(); void read_keyinput(); 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(); /////MAIN///// int main() { Read.start(password_check);// here stod den når vi brukte (read_keyinput) t.start(); while(1) { 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)&&(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) { //Running er en global variabel som blir satt til false ved tilstand Normaldrift eller ved servicebryter lagt inn. Driftslys = !Driftslys; 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; } } } void sone_monitor() { //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; } } } int TilstandSjekk() // [ x, x+1, x+2, x+3, x+4, x+5, x+6, x+7 ] { 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; } //////////////////////////////////////////////////////////// /////////////////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. { 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; running = false; pc.printf("\nAdministrator tilgang innvilget\n");//info pc.printf("Folgende kommandoer kan brukes: \n");// liste over funksjoner tilgjenglig. 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(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() { 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 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) { 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"); } 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); } } return 0; }