Brede Hesvik / Mbed 2 deprecated Alarmsystem-FINAL1

Dependencies:   mbed

Fork of Alarmsystem-FINAL by Brede Hesvik

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?

UserRevisionLine numberNew 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 }