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-FINAL by
system.cpp@6:c942caec6eb8, 2016-02-26 (annotated)
- Committer:
- bredeh
- Date:
- Fri Feb 26 11:59:49 2016 +0000
- Revision:
- 6:c942caec6eb8
- Parent:
- 2:285c66b24ae4
- Child:
- 8:39b77cfa1a1b
ok;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| bredeh | 0:c9f607286335 | 1 | |
| bredeh | 0:c9f607286335 | 2 | #include "mbed.h" |
| bredeh | 1:d678123d3117 | 3 | #include "system.h" |
| bredeh | 0:c9f607286335 | 4 | #include "loggforing.h" |
| bredeh | 0:c9f607286335 | 5 | |
| bredeh | 1:d678123d3117 | 6 | Serial pc2(USBTX,USBRX); |
| bredeh | 0:c9f607286335 | 7 | |
| bredeh | 0:c9f607286335 | 8 | /* Disse arrayene er sammenhengende, hvor hvert element representerer hverandre. */ |
| bredeh | 0:c9f607286335 | 9 | AnalogIn krets[4] = {p15, p16, p17, p19}; //(krets 1, krets 2, krets 3, krets 4) |
| bredeh | 0:c9f607286335 | 10 | int inbrudd[4] = {0, 0, 0, 0}; //angir hvor mange brudd som har gått i kretsen. |
| bredeh | 0:c9f607286335 | 11 | |
| bredeh | 0:c9f607286335 | 12 | /* Hvert element represnterer hverandre i disse arayene. led[] brukes for å varsle for hvilken bryter som er aktivert */ |
| bredeh | 0:c9f607286335 | 13 | DigitalOut kr_status[8] = {p21, p22, p23, p24, p25, p26, p27, p28}; //(bryter 1 krets 1, bryter 2 krets 1, bryter 1 krets 2....) |
| bredeh | 0:c9f607286335 | 14 | int led[8] = {1, 1, 1, 1, 1, 1, 1, 1}; //Brukes som kontrollbetingelse, og settes til 0 hvis en alarm skal gå. |
| bredeh | 0:c9f607286335 | 15 | int led_pa[8] = {1, 1, 1, 1, 1, 1, 1, 1}; //Brukes i funksjonen led_status for å generere en blinke sekvens. |
| bredeh | 0:c9f607286335 | 16 | |
| bredeh | 0:c9f607286335 | 17 | DigitalIn servicebr(p12); //servicebryter |
| bredeh | 0:c9f607286335 | 18 | |
| bredeh | 0:c9f607286335 | 19 | int logg_kr[4] = {8, 9, 10, 11}; //sender over verdi til logg funksjon for å loggfore om begge brytere på en krets er aktivert. |
| bredeh | 0:c9f607286335 | 20 | |
| bredeh | 0:c9f607286335 | 21 | /* Globale variabler som blir brukt i programmet */ |
| bredeh | 0:c9f607286335 | 22 | int kr; //verdi som blir tastet inn i funksjonen natid_krets. |
| bredeh | 0:c9f607286335 | 23 | int toggle = 0; //Inverterteres i led_status for å skape en blinkefunksjon. |
| bredeh | 0:c9f607286335 | 24 | int tall; //variabel som brukes i systempaa. |
| bredeh | 0:c9f607286335 | 25 | |
| bredeh | 1:d678123d3117 | 26 | Timer timer; //Startes ved aktivering av systemet for å kunne logge tid på de ulike situasjonenen. |
| bredeh | 0:c9f607286335 | 27 | Ticker kontroll; //kaller opp overvaking() |
| bredeh | 0:c9f607286335 | 28 | Ticker led_aktiver; //kaller opp led_status() |
| Bjorken | 2:285c66b24ae4 | 29 | Ticker pass_varsel; // |
| bredeh | 0:c9f607286335 | 30 | |
| bredeh | 0:c9f607286335 | 31 | /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FUNKSJONSPROTOTYPER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
| bredeh | 0:c9f607286335 | 32 | |
| bredeh | 1:d678123d3117 | 33 | //Komplett funksjon for systempa, inkl, loggforing og varsling av krets. |
| bredeh | 0:c9f607286335 | 34 | void systempaa(int aktiv); |
| bredeh | 0:c9f607286335 | 35 | |
| Bjorken | 2:285c66b24ae4 | 36 | //stopper og reseter timer, og loggfører at systemet er skrudd av. |
| Bjorken | 2:285c66b24ae4 | 37 | void systemav(); |
| Bjorken | 2:285c66b24ae4 | 38 | |
| bredeh | 1:d678123d3117 | 39 | // Funksjonen blir kalt med 1Hz(1.0s) i en tikker, for overvåkning av kretser. |
| bredeh | 0:c9f607286335 | 40 | void overvaking(void); |
| bredeh | 0:c9f607286335 | 41 | |
| bredeh | 1:d678123d3117 | 42 | //Nullstiller hele systemet ved aktivering av servicebryter |
| bredeh | 0:c9f607286335 | 43 | void nullstilling(void); |
| bredeh | 0:c9f607286335 | 44 | |
| bredeh | 1:d678123d3117 | 45 | // Funksjon for å lese av nåværende status på valgt krets. |
| bredeh | 0:c9f607286335 | 46 | void natid_status(int kr); |
| bredeh | 0:c9f607286335 | 47 | |
| bredeh | 1:d678123d3117 | 48 | // Blinke funksjon til baragraph. |
| bredeh | 0:c9f607286335 | 49 | void led_status(void); |
| bredeh | 1:d678123d3117 | 50 | |
| Bjorken | 2:285c66b24ae4 | 51 | void feil_pass(); |
| bredeh | 0:c9f607286335 | 52 | |
| bredeh | 1:d678123d3117 | 53 | /*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. |
| bredeh | 0:c9f607286335 | 54 | 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, |
| bredeh | 0:c9f607286335 | 55 | loggføre ved hvilken tid systemet er avsluttet. Deretter vil systemet avslutte. */ |
| bredeh | 0:c9f607286335 | 56 | void systempaa(int aktiv) |
| bredeh | 0:c9f607286335 | 57 | { |
| bredeh | 1:d678123d3117 | 58 | timer.start(); |
| bredeh | 0:c9f607286335 | 59 | led_aktiver.attach(&led_status, 0.1); |
| bredeh | 0:c9f607286335 | 60 | kontroll.attach(&overvaking, 1.0); |
| Bjorken | 2:285c66b24ae4 | 61 | //while(aktiv == 1); |
| Bjorken | 2:285c66b24ae4 | 62 | } |
| Bjorken | 2:285c66b24ae4 | 63 | |
| Bjorken | 2:285c66b24ae4 | 64 | |
| Bjorken | 2:285c66b24ae4 | 65 | void systemav() |
| Bjorken | 2:285c66b24ae4 | 66 | { |
| Bjorken | 2:285c66b24ae4 | 67 | led_aktiver.detach(); |
| Bjorken | 2:285c66b24ae4 | 68 | kontroll.detach(); |
| Bjorken | 2:285c66b24ae4 | 69 | for(int i = 0; i < 8; i++) kr_status[i] = 0; |
| bredeh | 1:d678123d3117 | 70 | timer.stop(); |
| bredeh | 1:d678123d3117 | 71 | logg_system_av(timer.read()); |
| Bjorken | 2:285c66b24ae4 | 72 | timer.reset(); |
| bredeh | 0:c9f607286335 | 73 | } |
| bredeh | 0:c9f607286335 | 74 | |
| bredeh | 0:c9f607286335 | 75 | /* Funksjonen kontrolerer de 4 kretsene i en for løkke fra 0-3 som er basert på elementene i arrayet krets[]. |
| bredeh | 0:c9f607286335 | 76 | Spennings verdiene over bryteren testes i 3 tester, første er bryter 1, andre er bryter 2, og siste test er begge brytere. |
| bredeh | 0:c9f607286335 | 77 | Hvis det er oppdaget en feil i en krets, vil den sett en 0 inn i arrayet led[] utifra hvilken bryter som er aktivert. |
| bredeh | 0:c9f607286335 | 78 | 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 |
| bredeh | 0:c9f607286335 | 79 | 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. |
| bredeh | 0:c9f607286335 | 80 | Arrayet inbrudd[] på 4 elementer blir brukt for å registrere antall brudd i kretsen.*/ |
| bredeh | 0:c9f607286335 | 81 | void overvaking() |
| bredeh | 0:c9f607286335 | 82 | { |
| bredeh | 0:c9f607286335 | 83 | for(int sloyfe = 0; sloyfe <=3 ; sloyfe++) { |
| bredeh | 0:c9f607286335 | 84 | float v_test = krets[sloyfe]; |
| bredeh | 0:c9f607286335 | 85 | if(v_test*3.3 > 1.2) { |
| bredeh | 0:c9f607286335 | 86 | if(3.3*v_test > 1.4 && 3.3*v_test < 1.7 && led[2*sloyfe] == 1) { |
| bredeh | 0:c9f607286335 | 87 | inbrudd[sloyfe]++; |
| bredeh | 0:c9f607286335 | 88 | led[2*sloyfe] = 0; |
| bredeh | 1:d678123d3117 | 89 | logg_inbrudd(2*sloyfe, timer.read(), 3.3*v_test); |
| bredeh | 0:c9f607286335 | 90 | } else if(3.3*v_test > 1.70 && 3.3*v_test < 2.0 && led[2*sloyfe +1] == 1) { |
| bredeh | 0:c9f607286335 | 91 | inbrudd[sloyfe]++; |
| bredeh | 0:c9f607286335 | 92 | led[2*sloyfe+1] = 0; |
| bredeh | 1:d678123d3117 | 93 | logg_inbrudd(2*sloyfe +1, timer.read(), 3.3*v_test); |
| bredeh | 0:c9f607286335 | 94 | } else if(3.3*v_test > 3.0 && (led[2*sloyfe] == 1 || led[2*sloyfe +1] == 1)) { |
| bredeh | 0:c9f607286335 | 95 | inbrudd[sloyfe]++; |
| bredeh | 0:c9f607286335 | 96 | led[2*sloyfe] = led[2*sloyfe+1] = 0; |
| bredeh | 1:d678123d3117 | 97 | logg_inbrudd(logg_kr[sloyfe], timer.read(), 3.3*v_test); |
| bredeh | 0:c9f607286335 | 98 | } |
| bredeh | 0:c9f607286335 | 99 | } |
| bredeh | 0:c9f607286335 | 100 | } |
| bredeh | 0:c9f607286335 | 101 | } |
| bredeh | 0:c9f607286335 | 102 | |
| bredeh | 0:c9f607286335 | 103 | |
| bredeh | 0:c9f607286335 | 104 | /* Funksjonen setter alle elementer fra 0-7 i array Led[] til 1 for å avslutte blinke sekvensen ettersom systemet blir satt til null. |
| bredeh | 0:c9f607286335 | 105 | 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 |
| bredeh | 0:c9f607286335 | 106 | av servicebryter. Stemmer ikke dette så blir det loggført at systemet har blitt nullstilt av bruker. */ |
| bredeh | 0:c9f607286335 | 107 | void nullstilling(int servicebryter) |
| bredeh | 0:c9f607286335 | 108 | { |
| bredeh | 1:d678123d3117 | 109 | pc2.printf("Alle kretser blir nullstilt i lopet av 5 sek.\n\r "); |
| bredeh | 0:c9f607286335 | 110 | wait(5.0); |
| bredeh | 0:c9f607286335 | 111 | for(int i = 0; i < 8; i++) { |
| bredeh | 0:c9f607286335 | 112 | led[i] = 1; |
| bredeh | 0:c9f607286335 | 113 | } |
| bredeh | 6:c942caec6eb8 | 114 | pass_varsel.detach(); |
| bredeh | 0:c9f607286335 | 115 | if(servicebryter) { |
| bredeh | 1:d678123d3117 | 116 | logg_servicebryter(timer.read()); |
| bredeh | 0:c9f607286335 | 117 | } else { |
| bredeh | 1:d678123d3117 | 118 | logg_brukernullstill(timer.read()); |
| bredeh | 0:c9f607286335 | 119 | } |
| bredeh | 0:c9f607286335 | 120 | } |
| bredeh | 0:c9f607286335 | 121 | |
| bredeh | 0:c9f607286335 | 122 | |
| bredeh | 0:c9f607286335 | 123 | /* Funksjonen oppgir totalt antall brudd i hele systemet tilsammen, du velger selv hvilken krets du vil lese av status på. |
| bredeh | 0:c9f607286335 | 124 | 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 |
| bredeh | 0:c9f607286335 | 125 | 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 |
| bredeh | 0:c9f607286335 | 126 | kresten som du har valgt. Arrayet led[] kontrolleres senere for sjekke om det har blitt aktivert en alarm. */ |
| bredeh | 0:c9f607286335 | 127 | void natid_status(int kr) |
| bredeh | 0:c9f607286335 | 128 | { |
| bredeh | 0:c9f607286335 | 129 | int brudd; |
| bredeh | 0:c9f607286335 | 130 | for(int i = 0; i < 4; i++) { |
| bredeh | 0:c9f607286335 | 131 | brudd = brudd + inbrudd[i]; |
| bredeh | 0:c9f607286335 | 132 | } |
| bredeh | 1:d678123d3117 | 133 | pc2.printf("\n\rTotalt antall brudd i system: %d.\n\r", brudd); |
| bredeh | 0:c9f607286335 | 134 | float spenning = krets[kr-1]; //gjør det mulig å lese av spenning. |
| bredeh | 1:d678123d3117 | 135 | pc2.printf("\n\rStatus for krets %d.\n\r", kr); |
| bredeh | 1:d678123d3117 | 136 | pc2.printf("Antall brudd: %d.\n\r", inbrudd[kr-1]); |
| bredeh | 1:d678123d3117 | 137 | pc2.printf("System aktivt: %.2f sekunder.\n\r", timer.read()); |
| bredeh | 1:d678123d3117 | 138 | pc2.printf("Spenning: %.2fV.\n\r", 3.3*spenning); |
| bredeh | 1:d678123d3117 | 139 | if(led[(kr-1)*2] == 0 || led[kr*2-1] == 0) pc2.printf("Alarm aktiv.\n\r"); |
| bredeh | 1:d678123d3117 | 140 | else pc2.printf("Alarm ikke aktiv.\n\r"); |
| bredeh | 0:c9f607286335 | 141 | } |
| bredeh | 0:c9f607286335 | 142 | |
| bredeh | 0:c9f607286335 | 143 | |
| bredeh | 0:c9f607286335 | 144 | /* Funksjonen blir kalt opp i en ticker på 10hz. Funksjonen henter verdiene fra arrayet led[] og setter det til kr_status[], |
| bredeh | 0:c9f607286335 | 145 | 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 |
| bredeh | 0:c9f607286335 | 146 | 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. */ |
| bredeh | 0:c9f607286335 | 147 | void led_status() |
| bredeh | 0:c9f607286335 | 148 | { |
| bredeh | 0:c9f607286335 | 149 | for(int i = 0; i < 8; i++) { |
| bredeh | 0:c9f607286335 | 150 | if(toggle) { |
| bredeh | 0:c9f607286335 | 151 | kr_status[i] = led[i]; |
| bredeh | 0:c9f607286335 | 152 | } else if(!toggle) { |
| bredeh | 0:c9f607286335 | 153 | kr_status[i] = led_pa[i]; |
| bredeh | 0:c9f607286335 | 154 | } |
| bredeh | 0:c9f607286335 | 155 | } |
| bredeh | 0:c9f607286335 | 156 | toggle = !toggle; |
| bredeh | 0:c9f607286335 | 157 | } |
| bredeh | 0:c9f607286335 | 158 | |
| bredeh | 0:c9f607286335 | 159 | /* Hvis det er tastet feil passord vil denne funksjonen sette alle elementene i led[] til 0 for å varsle om at |
| bredeh | 0:c9f607286335 | 160 | alarmen har gått. */ |
| bredeh | 0:c9f607286335 | 161 | void feil_passord() |
| bredeh | 0:c9f607286335 | 162 | { |
| bredeh | 0:c9f607286335 | 163 | for(int i = 0; i < 8; i++) { |
| bredeh | 0:c9f607286335 | 164 | led[i] = 0; |
| bredeh | 0:c9f607286335 | 165 | } |
| bredeh | 0:c9f607286335 | 166 | logg_feilpass(); |
| Bjorken | 2:285c66b24ae4 | 167 | } |
| Bjorken | 2:285c66b24ae4 | 168 | |
| Bjorken | 2:285c66b24ae4 | 169 | void feil_pass() |
| Bjorken | 2:285c66b24ae4 | 170 | { |
| Bjorken | 2:285c66b24ae4 | 171 | feil_passord(); |
| Bjorken | 2:285c66b24ae4 | 172 | pass_varsel.attach(&led_status, 0.1); |
| bredeh | 0:c9f607286335 | 173 | } |
