Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Alarmsystem_log_funksjon_funker_ikke 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
