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-FINAL1 by
system.cpp
00001 00002 #include "mbed.h" 00003 #include "loggforing.h" 00004 00005 Serial pc(USBTX, USBRX); 00006 00007 /* Disse arrayene er sammenhengende, hvor hvert element representerer hverandre. */ 00008 AnalogIn krets[4] = {p15, p16, p17, p19}; //(krets 1, krets 2, krets 3, krets 4) 00009 int inbrudd[4] = {0, 0, 0, 0}; //angir hvor mange brudd som har gått i kretsen. 00010 00011 /* Hvert element represnterer hverandre i disse arayene. led[] brukes for å varsle for hvilken bryter som er aktivert */ 00012 DigitalOut kr_status[8] = {p21, p22, p23, p24, p25, p26, p27, p28}; //(bryter 1 krets 1, bryter 2 krets 1, bryter 1 krets 2....) 00013 int led[8] = {1, 1, 1, 1, 1, 1, 1, 1}; //Brukes som kontrollbetingelse, og settes til 0 hvis en alarm skal gå. 00014 int led_pa[8] = {1, 1, 1, 1, 1, 1, 1, 1}; //Brukes i funksjonen led_status for å generere en blinke sekvens. 00015 00016 DigitalIn servicebr(p12); //servicebryter 00017 00018 int logg_kr[4] = {8, 9, 10, 11}; //sender over verdi til logg funksjon for å loggfore om begge brytere på en krets er aktivert. 00019 00020 /* Globale variabler som blir brukt i programmet */ 00021 int kr; //verdi som blir tastet inn i funksjonen natid_krets. 00022 int toggle = 0; //Inverterteres i led_status for å skape en blinkefunksjon. 00023 int tall; //variabel som brukes i systempaa. 00024 00025 Timer t; //Startes ved aktivering av systemet for å kunne logge tid på de ulike situasjonenen. 00026 Ticker kontroll; //kaller opp overvaking() 00027 Ticker led_aktiver; //kaller opp led_status() 00028 00029 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FUNKSJONSPROTOTYPER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ 00030 00031 /* Komplett funksjon for systempa, inkl, loggforing og varsling av krets. 00032 void systempaa(int aktiv); 00033 00034 /* Funksjonen blir kalt med 1Hz(1.0s) i en tikker, for overvåkning av kretser. 00035 void overvaking(void); 00036 00037 /* Nullstiller hele systemet ved aktivering av servicebryter 00038 void nullstilling(void); 00039 00040 /* Funksjon for å lese av nåværende status på valgt krets. 00041 void natid_status(int kr); 00042 00043 /* Blinke funksjon til baragraph. 00044 void led_status(void); 00045 /* 00046 00047 /* Funksjonen motar en verdi for variable akitv, timer t; blir startet, led_status og overvaking blir kalt opp i 2 ticker i while-løkka. 00048 Funksjonen vil bli i while løkka så lenge aktiv er sann, når det blir satt til 0 eller usann vil den bryte ut av while-løkka, stopper timer, 00049 loggføre ved hvilken tid systemet er avsluttet. Deretter vil systemet avslutte. */ 00050 void systempaa(int aktiv) 00051 { 00052 t.start(); 00053 led_aktiver.attach(&led_status, 0.1); 00054 kontroll.attach(&overvaking, 1.0); 00055 while(aktiv); 00056 t.stop(); 00057 logg_system_av(t.read()); 00058 t.reset(); 00059 00060 } 00061 00062 00063 /* Funksjonen kontrolerer de 4 kretsene i en for løkke fra 0-3 som er basert på elementene i arrayet krets[]. 00064 Spennings verdiene over bryteren testes i 3 tester, første er bryter 1, andre er bryter 2, og siste test er begge brytere. 00065 Hvis det er oppdaget en feil i en krets, vil den sett en 0 inn i arrayet led[] utifra hvilken bryter som er aktivert. 00066 I betingelsen, blir det kontrolert slik at det er en 1 på den gitte plass til gitt bryter, hvis dette stemmer har ingen alarm gått. Er det en 0 der 00067 er alarmen aktivert og det er ikke behov for å kontrollere bryteren på nytt. Dette forhindrer at logg_inbrudd loggfører bruddet mer enn en gang. 00068 Arrayet inbrudd[] på 4 elementer blir brukt for å registrere antall brudd i kretsen.*/ 00069 void overvaking() 00070 { 00071 for(int sloyfe = 0; sloyfe <=3 ; sloyfe++) { 00072 float v_test = krets[sloyfe]; 00073 if(v_test*3.3 > 1.2) { 00074 if(3.3*v_test > 1.4 && 3.3*v_test < 1.7 && led[2*sloyfe] == 1) { 00075 inbrudd[sloyfe]++; 00076 led[2*sloyfe] = 0; 00077 logg_inbrudd(2*sloyfe, t.read(), 3.3*v_test); 00078 } else if(3.3*v_test > 1.70 && 3.3*v_test < 2.0 && led[2*sloyfe +1] == 1) { 00079 inbrudd[sloyfe]++; 00080 led[2*sloyfe+1] = 0; 00081 logg_inbrudd(2*sloyfe +1, t.read(), 3.3*v_test); 00082 } else if(3.3*v_test > 3.0 && (led[2*sloyfe] == 1 || led[2*sloyfe +1] == 1)) { 00083 inbrudd[sloyfe]++; 00084 led[2*sloyfe] = led[2*sloyfe+1] = 0; 00085 logg_inbrudd(logg_kr[sloyfe], t.read(), 3.3*v_test); 00086 } 00087 } 00088 } 00089 } 00090 00091 00092 /* Funksjonen setter alle elementer fra 0-7 i array Led[] til 1 for å avslutte blinke sekvensen ettersom systemet blir satt til null. 00093 Funksjonen logg_servicebryter blir kalt opp hvis variabele servicebryter er sann for å loggføre tid det har blitt utført en reset av systemet ved brukt 00094 av servicebryter. Stemmer ikke dette så blir det loggført at systemet har blitt nullstilt av bruker. */ 00095 void nullstilling(int servicebryter) 00096 { 00097 pc.printf("Alle kretser blir nullstilt i lopet av 5 sek.\n\r "); 00098 wait(5.0); 00099 for(int i = 0; i < 8; i++) { 00100 led[i] = 1; 00101 } 00102 if(servicebryter) { 00103 logg_servicebryter(t.read()); 00104 } else { 00105 logg_brukernullstill(t.read()); 00106 } 00107 } 00108 00109 00110 /* Funksjonen oppgir totalt antall brudd i hele systemet tilsammen, du velger selv hvilken krets du vil lese av status på. 00111 Når du har valgt krets(et tall fra 1-4 får du oppgitt antall brudd i kretsen, hvor lenge den har hvert aktiv, spenning og om det er 00112 utløst en alarm eller ikke. Verdien kr som blir satt inn i array krets|], inbrudd[] og trekker ifra 1 slikat du får riktig element som representerer den 00113 kresten som du har valgt. Arrayet led[] kontrolleres senere for sjekke om det har blitt aktivert en alarm. */ 00114 void natid_status(int kr) 00115 { 00116 int brudd; 00117 for(int i = 0; i < 4; i++) { 00118 brudd = brudd + inbrudd[i]; 00119 } 00120 pc.printf("\n\rTotalt antall brudd i system: %d.\n\r", brudd); 00121 float spenning = krets[kr-1]; //gjør det mulig å lese av spenning. 00122 pc.printf("\n\rStatus for krets %d.\n\r", kr); 00123 pc.printf("Antall brudd: %d.\n\r", inbrudd[kr-1]); 00124 pc.printf("System aktivt: %.2f sekunder.\n\r", t.read()); 00125 pc.printf("Spenning: %.2fV.\n\r", 3.3*spenning); 00126 if(led[(kr-1)*2] == 0 || led[kr*2-1] == 0) pc.printf("Alarm aktiv.\n\r"); 00127 else pc.printf("Alarm ikke aktiv.\n\r"); 00128 } 00129 00130 00131 /* Funksjonen blir kalt opp i en ticker på 10hz. Funksjonen henter verdiene fra arrayet led[] og setter det til kr_status[], 00132 etter for-løkka har gått 8 ganger blir toggle som er satt til 0 invertert. Neste gang funksjonen blir kalt opp vil verdiene fra arrayet 00133 led_pa[] satt til kr_status[]. Dette vil skape en blinke funksjon på baragraphen, slik at den veksler mellom 0 og 1 utifra de ulike elementene. */ 00134 void led_status() 00135 { 00136 for(int i = 0; i < 8; i++) { 00137 if(toggle) { 00138 kr_status[i] = led[i]; 00139 } else if(!toggle) { 00140 kr_status[i] = led_pa[i]; 00141 } 00142 } 00143 toggle = !toggle; 00144 } 00145 00146 00147 /* Hvis det er tastet feil passord vil denne funksjonen sette alle elementene i led[] til 0 for å varsle om at 00148 alarmen har gått. */ 00149 void feil_passord() 00150 { 00151 for(int i = 0; i < 8; i++) { 00152 led[i] = 0; 00153 } 00154 logg_feilpass(); 00155 }
Generated on Thu Jul 14 2022 05:31:55 by
1.7.2
