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