![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
06.03.2018
Fork of Alarmsystem_med_matrix_log_funker_ikke by
Diff: main.cpp
- Revision:
- 18:d2e5d6f5faeb
- Parent:
- 17:f046c0ca9edd
--- a/main.cpp Tue Feb 27 11:19:05 2018 +0000 +++ b/main.cpp Tue Mar 06 14:14:42 2018 +0000 @@ -2,14 +2,13 @@ #include "rtos.h" #include <string> #include <stdio.h> -#include <vector> -#include "Matrix.h" +//#include <vector> +//#include "Matrix.h" /////DEFINISJONER///// #define Inn 4 Serial pc(USBTX, USBRX); LocalFileSystem local("local"); -FILE *fp = fopen("/local/log.txt", "w" ); /////INNGANGER///// DigitalIn Servicebryter(p20); @@ -26,27 +25,32 @@ /////VARIABLER///// float Soner[Inn]; int tilstand = 0; +volatile int buffer; volatile bool running = true; volatile bool admin = false; volatile int y1 = AlarmUtganger1; volatile int y2 = AlarmUtganger2; +volatile int sone; string password = ("admin"); Timer t; -Matrix tilstander(4, 4); -Matrix buffer_tilstander(4, 4); +//enum {tilstand1, tilstand2, tilstand3, normaldrift} state; +//Matrix tilstander(4, 4); +//Matrix buffer_tilstander(4, 4); /////FUNKSJON DEKLARASJONER///// void Alarmf(); -void log_to_file(); +//void TilstandSjekk(); +//int log_to_file(); Thread Alarm; -Thread Log; -int TilstandSjekk(int, int); +//Thread Tilstandsjekk; +//Thread Log; void admin_access_granted(); void sone_monitor(); void password_check(); void read_keyinput(); void request_status(); void request_status_sone_dor(int sone, int dor); +int TilstandSjekk(int, int); extern "C" void mbed_reset(); /////MAIN///// @@ -54,10 +58,10 @@ { t.start(); while(1) { - if(admin == false) { + if(admin == false) { //Hvis passordet ikke er skrevet inn starter en funksjon "password_check" password_check(); } - if(Servicebryter == 1) { + if(Servicebryter == 1) { //Hvis du trykker på servicebryteren, starter man innelåst modus i 15 sek der alarmer slår seg av. AlarmUtganger1 = 0; AlarmUtganger2 = 0; running = false; @@ -66,9 +70,13 @@ pc.printf("NB! Alarmer gar pa om 5 sek! \n"); wait(5); } - while((admin) && (Servicebryter == 0)) { - Alarm.start(Alarmf); - Log.start(log_to_file); + while((admin) && (Servicebryter == 0)) { //Hvis man har skrevet inn admin passord og servicebryteren ikke er trykket på, kjører alle funksjonene i en løkke. + //if((y1 != AlarmUtganger1) || (y2 != AlarmUtganger2)) log_to_file(); + //y1 = AlarmUtganger1; + //y2 = AlarmUtganger2; + Alarm.start(Alarmf); //dette starter funksjonen Alarmf i en tråd, dvs at denne går kontinuerlig og ikke stopper opp programmet. + //Log.start(log_to_file); + //Tilstandsjekk.start(TilstandSjekk); sone_monitor(); read_keyinput(); } @@ -79,19 +87,111 @@ 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; } } } +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; + int tilstander[Inn]; + for(int i = 0; i < Inn; i++) { //Dette sjekker en og en sone og setter de inn i riktige tilstander. + if((Soner[i] > 0.6 )&&( Soner[i] < 0.7)) { //Tilstand1, Dør 1 åpen + //pc.printf("Vi er i Tilstand1\n"); + //state = tilstand1; + //tilstander(1, i) = 1; + tilstand = 1; + if(tilstander[i] != 1)TilstandSjekk(i, tilstand); + tilstander[i] = 1; + } + if((Soner[i] > 0.35 )&&( Soner[i] < 0.45)) { //Normaldrift + //state = normaldrift; + tilstand = 0; + if(tilstander[i] != 0)TilstandSjekk(i, tilstand); + tilstander[i] = 0; + } + if((Soner[i] > 0.46 )&&( Soner[i] < 0.55)) { //Tilstand2, Dør 2 åpen + //state = tilstand2; + //tilstander(2, i) = 1; + tilstand = 2; + if(tilstander[i] != 2)TilstandSjekk(i, tilstand); + tilstander[i] = 2; + } + if((Soner[i] > 0.9) &&( Soner[i] < 1)) { //Tilstand 3, Begge dører er åpen + //state = tilstand3; + //tilstander(3, i) = 1; + tilstand = 3; + if(tilstander[i] != 3)TilstandSjekk(i, tilstand); + tilstander[i] = 3; + } + } +} + +/*void TilstandSjekk(void) +{ + while(1) { + int Y = 1; + int n = 2; + for(int k=0; k>=sone; k++) Y = k * n; + switch(state) { + case normaldrift: + pc.printf("Vi er i case 0"); + running = false; + if((y1 != AlarmUtganger1) && (y2 != AlarmUtganger2)) { + AlarmUtganger1 =- Y; + AlarmUtganger2 =- Y; + } + y1 = AlarmUtganger1; + y2 = AlarmUtganger2; + buffer = 0; + break; + case tilstand1: + pc.printf("Vi er i case 1 \n"); + running = true; + if(y1 != AlarmUtganger1) AlarmUtganger1 =+ Y; + if(buffer == ( 2 || 3)) AlarmUtganger2 =- Y; + y1 = AlarmUtganger1; + buffer = 1; + break; + case tilstand2: + pc.printf("Vi er i case 2 \n"); + running = true; + if(y2 != AlarmUtganger2) AlarmUtganger2 =+ Y; + if(buffer == ( 1 || 3 )) AlarmUtganger1 =- Y; + y2 = AlarmUtganger2; + buffer = 2; + break; + case tilstand3: + pc.printf("Vi er i case 3 \n"); + running = true; + if((y1 != AlarmUtganger1) && (y2 != AlarmUtganger2)) { + AlarmUtganger1 =+ Y; + AlarmUtganger2 =+ Y; + } + y1 = AlarmUtganger1; + y2 = AlarmUtganger2; + buffer = 3; + break; + } + Thread:wait(1000); + } +}*/ + int TilstandSjekk(int i, int tilstand) { - tilstander.add(i, tilstand, 1); + //tilstander.add(i, tilstand, 1); if(tilstand == 0) { + wait(0.5); + pc.printf("Vi er i normaldrift i sone %d \n", i); running = false; double n = 2; double Y = 1; @@ -100,14 +200,18 @@ if ( Y == AlarmUtganger2) AlarmUtganger2 = AlarmUtganger2 - Y; } if(tilstand == 1) { //Hvis dør 1 er åpen... + wait(0.5); + pc.printf("Vi er i tilstand 1 i sone %d \n", i); 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( 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... + wait(0.5); + pc.printf("Vi er i tilstand 2 i sone %d \n", i); running = true; double n = 2; double Y = 1; @@ -116,6 +220,8 @@ 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 + wait(0.5); + pc.printf("Vi er i tilstand 3 i sone %d \n", i); running = true; double n = 2; // We want 2^i double Y = 1; @@ -126,56 +232,33 @@ return 0; } -void log_to_file(void) +/*int log_to_file() { - while(tilstander != buffer_tilstander) { - for(int i = 0; i < 4; i++) { - if(fp != NULL) { - if(tilstander(i, 1) == 1) { - fprintf(fp,"Sone %d, dor 1 er aapen \n", i); - fprintf(fp,"Tid:%f siden start \n",t.read()); - } + //while(tilstander != buffer_tilstander) { + // wait(5.0); - if(tilstander(i, 2) == 1) { - fprintf(fp,"Sone %d, dor 2 er lukket \n", i); - fprintf(fp,"Tid:%f siden start \n",t.read()); - } - if(tilstander(i, 3) == 1) { - fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i); - fprintf(fp,"Tid:%f siden start \n",t.read()); - } + FILE *fp = fopen("/local/LOG.txt", "w" ); + for(int i = 0; i < 4; i++) { + int n = 2; + int a1 = n * i; + int a2 = n * i; + if( (a1 == AlarmUtganger1) && (a2 != AlarmUtganger2) ) { + fprintf(fp,"Sone %d, dor 1 er aapen \n", i); + fprintf(fp,"Tid:%f siden start \n",t.read()); + } + + if( (a2 == AlarmUtganger2) && (a1 != AlarmUtganger1) ) { + fprintf(fp,"Sone %d, dor 2 er lukket \n", i); + fprintf(fp,"Tid:%f siden start \n",t.read()); + } + if ( (a1 == AlarmUtganger1) && (a2 == AlarmUtganger2) ) { + fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i); + fprintf(fp,"Tid:%f siden start \n",t.read()); } } - } - buffer_tilstander = tilstander; -} + return 0; +}*/ -void sone_monitor() -{ - 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); - } - } -} void admin_access_granted() { admin = true; @@ -222,13 +305,8 @@ 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(); - } + //if( read == ("Stop")) + if( read == ("Reset")) mbed_reset(); } } } @@ -257,13 +335,13 @@ { int sone = 0; int n = 2; - for(int i = 0; i <= 8;) { - sone = sone + sone; + for(int i = 0; i < 8;) { + sone = sone + 1; 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); + else pc.printf("Dor: 1 i Sone: %d er lukket \n", sone); 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); + else pc.printf("Dor: 2 i Sone: %d er lukket \n", sone); } } \ No newline at end of file