klokka 15:07

Fork of AlarmsystemDel1 by Programmeringsgruppe 1

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include <RtosTimer.h>
00004 #include <math.h>
00005 #include "mbed_error.h"
00006 #include <string>
00007 #include <iostream>
00008 
00009 /////DEFINISJONER/////
00010 #define Inn 4
00011 Serial pc(USBTX, USBRX);
00012 //#define Feil 0<1
00013 
00014 /////INNGANGER/////
00015 DigitalIn Servicebryter(p20);
00016 AnalogIn _Sone1(p15);
00017 AnalogIn _Sone2(p16);
00018 AnalogIn _Sone3(p17);
00019 AnalogIn _Sone4(p19);
00020 
00021 /////UTGANGER/////
00022 DigitalOut Driftslys(LED1);
00023 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
00024 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
00025 //DigitalOut myled2(LED2);
00026 
00027 /////VARIABLER/////
00028 float Soner[Inn];
00029 int tilstand = 0;
00030 int TilstandSjekk(int, int);
00031 volatile bool running = true;
00032 volatile bool admin = false;
00033 string password = ("admin");
00034 string keyinput;
00035 //volatile int Klokke = 0;
00036 //nt Tid = 0;
00037 
00038 /////FUNKSJON DEKLARASJONER/////
00039 void Alarmf();
00040 Thread Alarm;
00041 Thread Sone;
00042 int Tilstandssjekk();
00043 void admin_access_granted();
00044 void sone_monitor();
00045 void password_check();
00046 //void read_keyinput();
00047 //void Alarm();
00048 //Ticker AlarmBlink; // 10Hz blinking for alarmfunksjon på lys og telling
00049 
00050 
00051 /////MAIN/////
00052 int main()
00053 {
00054     while(1) {
00055         if(admin == false) {
00056             password_check();
00057         }
00058         while(admin) {
00059             Alarm.start(Alarmf);
00060             sone_monitor();
00061             read_keyinput();
00062         }//if-end
00063     }//main-end
00064 }
00065 
00066 
00067 
00068 /////FUNKSJONER/////
00069 void Alarmf(void)
00070 {
00071     while(1) {
00072         if(running == true) {
00073             Driftslys = !Driftslys;
00074             Thread::wait(50);
00075         } else {
00076             Driftslys = 1;
00077         }
00078     }
00079 }
00080 
00081 int TilstandSjekk(int i, int tilstand)
00082 {
00083     if(tilstand == 0) {
00084         //pc.printf("Vi er i funksjonen normaldrift i sone: %d \n", i);
00085         //AlarmBlink.detach();
00086         running = false;
00087         double n = 2; // We want 2^i
00088         double Y = 1;
00089         for(int k=1; k<=i; k++) Y = Y*n;
00090         if ( Y == AlarmUtganger1) AlarmUtganger1 = AlarmUtganger1 - Y;
00091         if ( Y == AlarmUtganger2) AlarmUtganger2 = AlarmUtganger2 - Y;
00092         int Utganger1 = AlarmUtganger1;
00093         int Utganger2 = AlarmUtganger2;
00094         //pc.printf("Utgangsbuss1 har naa verdien: %d \n Utgangsbuss2 har naa verdien: %d", Utganger1, Utganger2);
00095     }
00096     if(tilstand == 1) { //Hvis dør 1 er åpen...
00097         //pc.printf("Vi er i funksjonen tilstandssjekk dor 1, med verdi: %d\n", i);
00098         //Alarm();
00099         running = true;
00100         double n = 2; // We want 2^i
00101         double Y = 1;
00102         for(int k=1; k<=i; k++) Y = Y*n;
00103         if( Y == AlarmUtganger2 ) AlarmUtganger2 = AlarmUtganger2 - Y;
00104         if( Y!=AlarmUtganger1) AlarmUtganger1 = Y + AlarmUtganger1; //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
00105         int Utganger1 = AlarmUtganger1;
00106         //pc.printf("Vi har verdien paa utgangsbuss: %d\n", Utganger1);
00107     }
00108     if(tilstand == 2) { //Hvis dør 2 er åpen...
00109         //pc.printf("Vi er i funksjonen tilstandssjekk dor 2, med verdi: %d\n", i);
00110         //Alarm();
00111         running = true;
00112         double n = 2; // We want 2^i
00113         double Y = 1;
00114         for(int k=1; k<=i; k++) Y = Y*n;
00115         if( Y == AlarmUtganger1 ) AlarmUtganger1 = AlarmUtganger1 - Y;
00116         if( Y!=AlarmUtganger2) AlarmUtganger2 = Y + AlarmUtganger2;  //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør.
00117         int Utganger2 = AlarmUtganger2;
00118         //pc.printf("Vi har verdien paa utgangsbuss: %d\n", Utganger2);
00119     }
00120     if(tilstand == 3) { //Hvis begge dører er åpne
00121         //pc.printf("Vi er i funksjonen tilstandssjekk alle dorer, med verdi: %d \n", i);;
00122         // Alarm();
00123         running = true;
00124         double n = 2; // We want 2^i
00125         double Y = 1;
00126         for(int k=1; k<=i; k++) Y = Y*n;
00127         if( Y!=AlarmUtganger1 ) AlarmUtganger1 = Y + AlarmUtganger1;
00128         if( Y!=AlarmUtganger2 ) AlarmUtganger2 = Y + AlarmUtganger2;
00129         int Utganger2 = AlarmUtganger2;
00130         int Utganger1 = AlarmUtganger2;
00131         //pc.printf("Utgangsbuss1 har verdien: %d \n Utgangsbuss2 har verdien: %d \n", Utganger1, Utganger2);
00132     }
00133     return 0;
00134 }
00135 void sone_monitor()
00136 {
00137     Soner[0] = _Sone1;
00138     //Soner[1] = _Sone2;
00139     //Soner[2] = _Sone3;
00140     //Soner[3] = _Sone4;
00141     for(int i=0; i < Inn; i++) {
00142         read_keyinput(i);
00143         //pc.printf("%f\n", Soner[i]);
00144         if((Soner[i] > 0.75 )&&( Soner[i] < 0.83)) { //Tilstand1, Dør 1 åpen
00145             //pc.printf("Vi er i Tilstand1\n");
00146             tilstand = 1;
00147             TilstandSjekk(i, tilstand);
00148         }
00149         if((Soner[i] > 0.55 )&&( Soner[i] < 0.59)) { //Normaldrift
00150             //pc.printf("Vi er i Normaldrift\n")
00151             tilstand = 0;
00152             TilstandSjekk(i, tilstand);
00153         }
00154         if((Soner[i] > 0.65 )&&( Soner[i] < 0.69)) { //Tilstand 2, Dør 2 åpen
00155             //pc.printf("Vi er i tilstand2\n");
00156             tilstand = 2;
00157             TilstandSjekk(i, tilstand);
00158         }
00159         if(Soner[i] >= 1) { //Begge dører er åpne
00160             //pc.printf("Vi er i tilstand 3, begge doorer er aapne");
00161             tilstand = 3;
00162             TilstandSjekk(i, tilstand);
00163         }
00164         //wait(1.5);
00165     }
00166     //pc.printf("%f\n", Sone1[]);
00167     //Tilstandssjekk(Sone1[]);
00168     //float volt = Sone1[];
00169     //pc.printf("%f\n", volt);
00170     //while(sysclock == 1);
00171     //while(sysclock == 0);
00172     //Tid++;
00173 }
00174 void admin_access_granted()
00175 {
00176     admin = true;
00177     pc.printf("Admin access granted\n");//info
00178     pc.printf("Folgende kommandoer kan brukes: \n");// liste over funksjoner tilgjenglig.
00179     pc.printf("Status sone og dor(sone forst, dor etter) Kommando: 1,2 \n");// funksjon 1 - request spesific status
00180     pc.printf("Status alle soner og dorer. Kommando: Status \n");// funksjon 1 - request status all
00181     pc.printf("Reset hele systemet. Kommando: 'Reset' \n");// funksjon 4 - request log all
00182 }
00183 void password_check()
00184 {
00185     if(pc.readable() == 1) {
00186         pc.printf("Write password: ");
00187         string b;
00188         char s;
00189         for(int i = 0; i < 5; i++) {
00190             s = pc.getc();
00191             pc.printf("%c", s);
00192             b += s;
00193             if(b == password) {
00194                 admin_access_granted();
00195             }
00196         }
00197     }
00198 }
00199 
00200 void read_keyinput(int i)
00201 {
00202     if(pc.readable() == 1) {
00203         pc.printf("Du skriver: ");
00204         string read;
00205         char c;
00206         for(i = 0; i < 6; i++) {
00207             c = pc.getc();
00208             pc.printf("%c", c);
00209             read += c;
00210             switch(read) {
00211                 case "1, 1":
00212                     request_status_sone_dor(1, 1);
00213                     break;
00214                 case "1, 2":
00215                     request_status_sone_dor(1, 2);
00216                     break;
00217                 case "2, 1":
00218                     request_status_sone_dor(2, 1);
00219                     break;
00220                 case "2, 2":
00221                     request_status_sone_dor(2, 2);
00222                     break;
00223                 case "3, 1":
00224                     request_status_sone_dor(3, 1);
00225                     break;
00226                 case "3, 2":
00227                     request_status_sone_dor(3, 2);
00228                     break;
00229                 case "4, 1":
00230                     request_status_sone_dor(4, 1);
00231                     break;
00232                 case "4, 2":
00233                     request_status_sone_dor(4, 2);
00234                     break;
00235                 case "Status":
00236                     request_status();
00237                     break;
00238                 case "Reset":
00239                     request_reset();
00240                     break;
00241             }
00242         }
00243     }
00244 }
00245 
00246 void request_status_sone_dor(int sone, int dor)
00247 {
00248     double n = 2; // We want 2^i
00249     double Y = 1;
00250     for(int k=1; k<=sone; k++) Y = Y*n;
00251     if(dor == 1) {
00252         if (Alarmutganger1 == Y) pc.printf("Dor: %d i sone: %d er lukket", dor, Y);
00253         else pc.printf("Dor: %d i sone: %d er apnet", dor, Y);
00254     }
00255     if(dor == 2) {
00256         if (AlarmUtganger2 == Y) pc.printf("Dor: %d i sone: %d er lukket", dor, Y);
00257         else pc.printf("Dor: %d i sone: %d er apnet", dor, Y);
00258     }
00259 }
00260 
00261 void request_status() {
00262     int dor1[Inn] = {
00263     dor1[Inn] = AlarmUtganger2;
00264     
00265 
00266 //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
00267 //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