klokka 15:07
Fork of AlarmsystemDel1 by
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Mon Jul 18 2022 17:56:09 by
1.7.2
