21.02.2018
Fork of Alarmsystem20_02_2018 by
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 #include <string> 00004 #include <stdio.h> 00005 00006 /////DEFINISJONER///// 00007 #define Inn 4 00008 Serial pc(USBTX, USBRX); 00009 LocalFileSystem local("local"); 00010 FILE *fp = fopen("/local/log.txt", "w" ) ; 00011 00012 /////INNGANGER///// 00013 DigitalIn Servicebryter(p20); 00014 AnalogIn _Sone1(p15); 00015 AnalogIn _Sone2(p16); 00016 AnalogIn _Sone3(p17); 00017 AnalogIn _Sone4(p19); 00018 00019 /////UTGANGER///// 00020 DigitalOut Driftslys(LED1); 00021 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 00022 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 00023 00024 /////VARIABLER///// 00025 float Soner[Inn]; 00026 int tilstand = 0; 00027 volatile bool running = true; 00028 volatile bool admin = false; 00029 string password = ("admin"); 00030 Timer t; 00031 00032 /////FUNKSJON DEKLARASJONER///// 00033 void Alarmf(); 00034 Thread Alarm; 00035 int TilstandSjekk(int, int); 00036 void admin_access_granted(); 00037 void sone_monitor(); 00038 void password_check(); 00039 void read_keyinput(); 00040 void request_status(); 00041 void request_status_sone_dor(int sone, int dor); 00042 extern "C" void mbed_reset(); 00043 int log_to_file(int, int); 00044 00045 /////MAIN///// 00046 int main() 00047 { 00048 t.start(); 00049 while(1) { 00050 if(admin == false) { 00051 password_check(); 00052 } 00053 if(Servicebryter == 1) { 00054 AlarmUtganger1 = 0; 00055 AlarmUtganger2 = 0; 00056 running = false; 00057 pc.printf("NB! Alle alarmer er i innelast modus i 15 sek!! \n"); 00058 wait(10); 00059 pc.printf("NB! Alarmer gar pa om 5 sek! \n"); 00060 wait(5); 00061 } 00062 while((admin) && (Servicebryter == 0)) { 00063 Alarm.start(Alarmf); 00064 sone_monitor(); 00065 read_keyinput(); 00066 } 00067 } 00068 } 00069 00070 /////FUNKSJONER///// 00071 void Alarmf(void) 00072 { 00073 while(1) { 00074 if(running == true) { 00075 Driftslys = !Driftslys; 00076 Thread::wait(50); 00077 } else { 00078 Driftslys = 1; 00079 } 00080 } 00081 } 00082 00083 int TilstandSjekk(int i, int tilstand) 00084 { 00085 log_to_file(i, tilstand); 00086 if(tilstand == 0) { 00087 running = false; 00088 double n = 2; 00089 double Y = 1; 00090 for(int k=1; k<=i; k++) Y = Y*n; 00091 if ( Y == AlarmUtganger1) AlarmUtganger1 = AlarmUtganger1 - Y; 00092 if ( Y == AlarmUtganger2) AlarmUtganger2 = AlarmUtganger2 - Y; 00093 } 00094 if(tilstand == 1) { //Hvis dør 1 er åpen... 00095 running = true; 00096 double n = 2; 00097 double Y = 1; 00098 for(int k=1; k<=i; k++) Y = Y*n; 00099 if( Y == AlarmUtganger2 ) AlarmUtganger2 = AlarmUtganger2 - Y; 00100 if( Y!=AlarmUtganger1) AlarmUtganger1 = Y + AlarmUtganger1; //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør. 00101 } 00102 if(tilstand == 2) { //Hvis dør 2 er åpen... 00103 running = true; 00104 double n = 2; 00105 double Y = 1; 00106 for(int k=1; k<=i; k++) Y = Y*n; 00107 if( Y == AlarmUtganger1 ) AlarmUtganger1 = AlarmUtganger1 - Y; 00108 if( Y!=AlarmUtganger2) AlarmUtganger2 = Y + AlarmUtganger2; //Sjekk om denne verdien har blitt sjekket før, hvis ikke starter alarm på neste dør. 00109 } 00110 if(tilstand == 3) { //Hvis begge dører er åpne 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 = Y + AlarmUtganger1; 00116 if( Y!=AlarmUtganger2 ) AlarmUtganger2 = Y + AlarmUtganger2; 00117 } 00118 return 0; 00119 } 00120 00121 int log_to_file(int i, int tilstand) 00122 { 00123 int p; 00124 FILE *fp = fopen("/local/log.txt", "w" ) ; 00125 if(fp != NULL) { 00126 if ((tilstand == 1) && (p != 1)) { 00127 fprintf(fp,"Sone %d, dor 1 er aapen \n",i); 00128 fprintf(fp,"Tid:%f siden start \n",t.read()); 00129 p = 1; 00130 } 00131 00132 if ((tilstand == 2) && (p != 2)) { 00133 fprintf(fp,"Sone %d, dor 2 er lukket \n",i); 00134 fprintf(fp,"Tid:%f siden start \n",t.read()); 00135 p = 2; 00136 } 00137 if ((tilstand == 3) && (p != 3)) { 00138 fprintf(fp,"Sone %d dor 1 og 2 er lukket \n",i); 00139 fprintf(fp,"Tid:%f siden start \n",t.read()); 00140 p = 3; 00141 } 00142 } 00143 return 0; 00144 } 00145 00146 void sone_monitor() 00147 { 00148 Soner[0] = _Sone1; 00149 //Soner[1] = _Sone2; 00150 //Soner[2] = _Sone3; 00151 //Soner[3] = _Sone4; 00152 for(int i=0; i < Inn; i++) { 00153 if((Soner[i] > 0.75 )&&( Soner[i] < 0.83)) { //Tilstand1, Dør 1 åpen 00154 //pc.printf("Vi er i Tilstand1\n"); 00155 tilstand = 1; 00156 TilstandSjekk(i, tilstand); 00157 } 00158 if((Soner[i] > 0.55 )&&( Soner[i] < 0.59)) { //Normaldrift 00159 tilstand = 0; 00160 TilstandSjekk(i, tilstand); 00161 } 00162 if((Soner[i] > 0.65 )&&( Soner[i] < 0.69)) { //Tilstand2, Dør 2 åpen 00163 tilstand = 2; 00164 TilstandSjekk(i, tilstand); 00165 } 00166 if(Soner[i] >= 1) { //Tilstand 3, Begge dører er åpen 00167 tilstand = 3; 00168 TilstandSjekk(i, tilstand); 00169 } 00170 } 00171 } 00172 void admin_access_granted() 00173 { 00174 admin = true; 00175 pc.printf("Admin access granted\n");//info 00176 pc.printf("Folgende kommandoer kan brukes: \n");// liste over funksjoner tilgjenglig. 00177 pc.printf("Status sone og dor(sone forst, dor etter) Kommando: 1,2 \n");// funksjon 1 - request spesific status 00178 pc.printf("Status alle soner og dorer. Kommando: Status \n");// funksjon 1 - request status all 00179 pc.printf("Reset hele systemet. Kommando: 'Reset' \n");// funksjon 4 - request log all 00180 } 00181 00182 void password_check() 00183 { 00184 if(pc.readable() == 1) { 00185 pc.printf("Write password: "); 00186 string b; 00187 char s; 00188 for(int i = 0; i < 5; i++) { 00189 s = pc.getc(); 00190 pc.printf("%c", s); 00191 b += s; 00192 if(b == password) { 00193 admin_access_granted(); 00194 } 00195 } 00196 } 00197 } 00198 00199 void read_keyinput() 00200 { 00201 if(pc.readable() == 1) { 00202 pc.printf("\nDu skriver: "); 00203 string read; 00204 char c; 00205 for(int i = 0; i < 6; i++) { 00206 c = pc.getc(); 00207 pc.printf("%c ", c); 00208 read += c; 00209 if( read == ("1, 1")) request_status_sone_dor(1, 1); 00210 if( read == ("1, 2")) request_status_sone_dor(1, 2); 00211 if( read == ("2, 1")) request_status_sone_dor(2, 1); 00212 if( read == ("2, 2")) request_status_sone_dor(2, 2); 00213 if( read == ("3, 1")) request_status_sone_dor(3, 1); 00214 if( read == ("3, 2")) request_status_sone_dor(3, 2); 00215 if( read == ("4, 1")) request_status_sone_dor(4, 1); 00216 if( read == ("4, 2")) request_status_sone_dor(4, 2); 00217 if( read == ("Status")) request_status(); 00218 if( read == ("Stop")) while(1){ fclose(fp); } 00219 if( read == ("Reset")) { 00220 fclose(fp); 00221 mbed_reset(); 00222 } 00223 } 00224 } 00225 } 00226 00227 00228 void request_status_sone_dor(int sone, int dor) 00229 { 00230 int n = 2; 00231 for(int i = 0; i <= 16;) { 00232 if(i == 0) i = 1; 00233 else i = i * n; 00234 if(sone == i) { 00235 if(dor == 1) { 00236 if(AlarmUtganger1 == sone) pc.printf("Dor: %d i sone: %d er apnet \n", dor, sone); 00237 else pc.printf("Dor: %d i sone: %d er lukket \n", dor, sone); 00238 } 00239 if(dor == 2) { 00240 if(AlarmUtganger2 == sone) pc.printf("Dor: %d i sone: %d er apnet \n", dor, sone); 00241 else pc.printf("Dor: %d i sone: %d er lukket \n", dor, sone); 00242 } 00243 } 00244 } 00245 } 00246 00247 void request_status() 00248 { 00249 int sone = 0; 00250 int n = 2; 00251 for(int i = 0; i <= 8;) { 00252 sone = sone + sone; 00253 if(i == 0) i = 1; 00254 else i = i*n; 00255 if(AlarmUtganger1 == i) pc.printf("Dor: 1 i Sone: %d er apent \n", sone); 00256 else pc.printf("Dor: 1 i Sone: %d er lukket \n", i); 00257 if(AlarmUtganger2 == i) pc.printf("Dor: 2 i Sone: %d er apent \n", sone); 00258 else pc.printf("Dor: 2 i Sone: %d er lukket \n", i); 00259 } 00260 }
Generated on Fri Aug 5 2022 05:01:34 by
1.7.2
