Bjørn André Nyrud
/
Alarmsystem_rev_innlevering_ferdig
fort test av mbed cli
Fork of Alarmsystem_rev_innlevering by
main.cpp@18:e06a42c5d2a4, 2018-03-09 (annotated)
- Committer:
- Banyrud
- Date:
- Fri Mar 09 10:49:36 2018 +0000
- Revision:
- 18:e06a42c5d2a4
- Parent:
- 17:f27485b6d16e
ferdig;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Banyrud | 18:e06a42c5d2a4 | 1 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 2 | /////////////////////////////////////////////////////////////////////////////////////////BIBLIOTEK////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 3 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 4 | |
Banyrud | 18:e06a42c5d2a4 | 5 | |
Banyrud | 18:e06a42c5d2a4 | 6 | #include "mbed.h" //Standard bibliotek for mbed |
Banyrud | 18:e06a42c5d2a4 | 7 | #include "rtos.h" //OS-5 embed bibliotek for og få benyttet thread - funksjonen. |
Banyrud | 18:e06a42c5d2a4 | 8 | #include <string> //Bibliotek for og kunne benytte strenger. |
Banyrud | 18:e06a42c5d2a4 | 9 | #include <stdio.h> //Bibliotek for og kunne logge til tekstfil i c++. |
Banyrud | 18:e06a42c5d2a4 | 10 | |
Banyrud | 18:e06a42c5d2a4 | 11 | |
Banyrud | 18:e06a42c5d2a4 | 12 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 13 | /////////////////////////////////////////////////////////////////////////////////////////DEFINISJONER/////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 14 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
andreped | 12:0193024eab13 | 15 | |
Banyrud | 18:e06a42c5d2a4 | 16 | |
Banyrud | 18:e06a42c5d2a4 | 17 | #define Inn 4 //Hensikt: Hvis vi skriver "Inn" skriver vi egentlig tallet 4. |
Banyrud | 18:e06a42c5d2a4 | 18 | Serial pc(USBTX, USBRX); //Hensikt: Lage en krets med datamaskinen igjennom USB porten, så vi kan utføre forskjellige ting igjennom f.eks tera-term. |
Banyrud | 18:e06a42c5d2a4 | 19 | LocalFileSystem local("local"); //Hensikt: Kunne skrive lokalt i en tekst fil i lagringssystemet til mbed. |
Banyrud | 18:e06a42c5d2a4 | 20 | |
andreped | 10:f0a6d74095d4 | 21 | |
Banyrud | 18:e06a42c5d2a4 | 22 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 23 | /////////////////////////////////////////////////////////////////////////////////////////INNGANGER////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 24 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 25 | |
Banyrud | 18:e06a42c5d2a4 | 26 | |
Banyrud | 18:e06a42c5d2a4 | 27 | DigitalIn Servicebryter(p20); //Hensikt: Deklarere en bryter, som skal virke som en "innelåst bryter". |
Banyrud | 18:e06a42c5d2a4 | 28 | AnalogIn _Sone1(p15); |
Banyrud | 18:e06a42c5d2a4 | 29 | AnalogIn _Sone2(p16); //Hensikt: Deklarasjon av soner, som fungerer ved at det er 2 dører som er koblet i parallell med motstander, |
Banyrud | 18:e06a42c5d2a4 | 30 | AnalogIn _Sone3(p17); // og får dermed inn en voltverdi i inngangen som videre sier noe om hvilken tilstand dørene er i. (åpen / lukket) |
andreped | 12:0193024eab13 | 31 | AnalogIn _Sone4(p19); |
Banyrud | 13:0622c228b67d | 32 | |
Banyrud | 18:e06a42c5d2a4 | 33 | |
Banyrud | 18:e06a42c5d2a4 | 34 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 35 | /////////////////////////////////////////////////////////////////////////////////////////UTGANGER/////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 36 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 37 | |
Banyrud | 18:e06a42c5d2a4 | 38 | |
Banyrud | 18:e06a42c5d2a4 | 39 | DigitalOut Driftslys(LED1); //Hensikt: Deklarere utgangen Driftslys som skal bli brukt som både alarm (10Hz blinking) og lyse konstant under normaldrift. |
Banyrud | 18:e06a42c5d2a4 | 40 | DigitalOut Utganger[8] = {p21, p22, p23, p24, p25,p26,p27,p28}; //Hensikt: Deklarere alle lys i en tabell, lysene skal lyse etter hvilket punkt det er alarm på. |
Banyrud | 18:e06a42c5d2a4 | 41 | |
Banyrud | 18:e06a42c5d2a4 | 42 | |
Banyrud | 18:e06a42c5d2a4 | 43 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 44 | /////////////////////////////////////////////////////////////////////////////////////////VARIABLER////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 45 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 46 | |
Banyrud | 13:0622c228b67d | 47 | |
Banyrud | 18:e06a42c5d2a4 | 48 | float Soner[Inn]; //Hensikt: Deklarere en tabell som vi senere skal legge alle verdiene til de forskjellige sonene inn i. |
Banyrud | 18:e06a42c5d2a4 | 49 | int tilstand[8]= {}; //Hensikt: Sette inn de forskjellige tilstandene til dørene inn i en tabell. |
Banyrud | 18:e06a42c5d2a4 | 50 | int minne[8] = {}; //Hensikt: Lagre tilstandene i en annen tabell etter en test, for og sjekke om det er en ny endring i tabellen. |
Banyrud | 18:e06a42c5d2a4 | 51 | volatile bool running = true; //Hensikt: Sette funksjonen alarmf i else setning; dvs få lyset (LED1) til og lyse konstant. |
Banyrud | 18:e06a42c5d2a4 | 52 | volatile bool admin = false; //Hensikt: Sjekker om vi har skrevet inn passord for og starte anlegget. |
Banyrud | 18:e06a42c5d2a4 | 53 | volatile bool start = false; //Hensikt: Sjekker om vi har skrevet inn "Start" på tasturet, for og starte alarmanlegget. |
Banyrud | 18:e06a42c5d2a4 | 54 | volatile bool stopp = true; //Hensikt: Sjekker om vi har skrevet inn "Stopp" på tasturet, for og stoppe alarmanlegget. |
Banyrud | 18:e06a42c5d2a4 | 55 | string passord = ("admin"); //Hensikt: Legge inn "admin" inn i en streng som er passordet til anlegget |
Banyrud | 18:e06a42c5d2a4 | 56 | string start_kommando = ("start"); //Hensikt: Legge inn "start" inn i en streng som er strengen for starte anlegget. |
Banyrud | 18:e06a42c5d2a4 | 57 | string stopp_kommando = ("stopp"); //Hensikt: Legge inn "stopp" inn i en streng som er strengen for og stoppe anlegget. |
Banyrud | 18:e06a42c5d2a4 | 58 | Timer t; //Hensikt: Deklarere en timer, som skal skal sjekke tiden som har gått etter oppstart. |
Banyrud | 18:e06a42c5d2a4 | 59 | int v = 0; //Hensikt: Printe til datamaskinen en gang, når man blir sendt inn i funksjonen password_check. ("Skriv Passord: ") |
andreped | 1:6917ec4f5e6d | 60 | |
Banyrud | 18:e06a42c5d2a4 | 61 | |
Banyrud | 18:e06a42c5d2a4 | 62 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 63 | ///////////////////////////////////////////////////////////////////////////////FUNKSJON DEKLARASJONER/////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 64 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 65 | |
Banyrud | 18:e06a42c5d2a4 | 66 | |
Banyrud | 18:e06a42c5d2a4 | 67 | void Alarmf(); // Hensikten til funksjonene er beskrevet nærmere ovenfor funksjonen, deklarasjoner skal bare vise compileren at funksjonene kommer |
Banyrud | 18:e06a42c5d2a4 | 68 | Thread Alarm; // senere i programmet vårt. |
Banyrud | 17:f27485b6d16e | 69 | Thread Read; |
andreped | 15:272fb4e610dc | 70 | void admin_access_granted(); |
andreped | 15:272fb4e610dc | 71 | void sone_monitor(); |
Banyrud | 17:f27485b6d16e | 72 | int log_to_file(int, int); |
andreped | 15:272fb4e610dc | 73 | void password_check(); |
Banyrud | 18:e06a42c5d2a4 | 74 | void compare_commands(); |
Banyrud | 17:f27485b6d16e | 75 | void start_sys(); |
Banyrud | 17:f27485b6d16e | 76 | void stopp_sys(); |
Banyrud | 17:f27485b6d16e | 77 | int logg_start(); |
Banyrud | 17:f27485b6d16e | 78 | int logg_stopp(); |
Banyrud | 17:f27485b6d16e | 79 | int request_status_sys(); |
Banyrud | 17:f27485b6d16e | 80 | int request_status_alarm(int); |
Banyrud | 17:f27485b6d16e | 81 | int TilstandSjekk(); |
Banyrud | 18:e06a42c5d2a4 | 82 | extern "C" void mbed_reset(); //Hensikt: Kunne resete alarmsystemet 100% igjennom tastaturet. Dette er en standard funksjon i mbed. |
Banyrud | 18:e06a42c5d2a4 | 83 | |
andreped | 12:0193024eab13 | 84 | |
Banyrud | 18:e06a42c5d2a4 | 85 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 86 | //////////////////////////////////////////////////////////////////////////////////////MAIN////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 87 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 88 | |
Banyrud | 18:e06a42c5d2a4 | 89 | |
Banyrud | 18:e06a42c5d2a4 | 90 | //Hensikt: Starte funksjoner kontinuerlig i en while løkke utifra de globale variablene våre. Vi sjekker også om servicebryteren er aktivert, og vi vil da sette |
Banyrud | 18:e06a42c5d2a4 | 91 | // programmet inn i "innelåst - modus" og resete alarmene. Man har da 10 sekunder på og komme seg ut, før alarmene reaktiverer seg. |
Banyrud | 18:e06a42c5d2a4 | 92 | |
andreped | 1:6917ec4f5e6d | 93 | int main() |
andreped | 1:6917ec4f5e6d | 94 | { |
Banyrud | 18:e06a42c5d2a4 | 95 | Read.start(password_check); |
andreped | 16:3d2e29aa5df5 | 96 | t.start(); |
andreped | 15:272fb4e610dc | 97 | while(1) { |
Banyrud | 18:e06a42c5d2a4 | 98 | if(Servicebryter == 1) { // "Innelåst - Modus" |
Banyrud | 18:e06a42c5d2a4 | 99 | TilstandSjekk(); |
andreped | 16:3d2e29aa5df5 | 100 | running = false; |
andreped | 16:3d2e29aa5df5 | 101 | pc.printf("NB! Alle alarmer er i innelast modus i 15 sek!! \n"); |
Banyrud | 18:e06a42c5d2a4 | 102 | wait(15); |
andreped | 16:3d2e29aa5df5 | 103 | } |
Banyrud | 18:e06a42c5d2a4 | 104 | while((admin) && (Servicebryter == 0)&&(start == true) && (stopp == false)) { // Sjekker globale variabler, for deretter og starte alarmsystemet. |
Banyrud | 18:e06a42c5d2a4 | 105 | Alarm.start(Alarmf);//Denne funksjonen starter Alarmf i en tråd, dvs at denne går kontinuerlig og ikke stopper opp programmet. |
Banyrud | 18:e06a42c5d2a4 | 106 | sone_monitor(); |
Banyrud | 18:e06a42c5d2a4 | 107 | wait(0.1); //Vi benytter en wait funksjon for og få programmet til og fungere, hvis denne ikke er tilstede vil ikke programmet fungere korrekt. |
Banyrud | 17:f27485b6d16e | 108 | TilstandSjekk(); |
andreped | 16:3d2e29aa5df5 | 109 | } |
andreped | 16:3d2e29aa5df5 | 110 | } |
andreped | 15:272fb4e610dc | 111 | } |
Banyrud | 14:8e7aaf0cf5d7 | 112 | |
Banyrud | 17:f27485b6d16e | 113 | |
Banyrud | 18:e06a42c5d2a4 | 114 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 115 | //////////////////////////////////////////////////////////////////////FUNKSJONER//////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 116 | //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Banyrud | 18:e06a42c5d2a4 | 117 | |
Banyrud | 18:e06a42c5d2a4 | 118 | |
Banyrud | 18:e06a42c5d2a4 | 119 | //Hensikt: Få et lys til og lyse når alarmanlegget er i normaldrift. |
Banyrud | 18:e06a42c5d2a4 | 120 | // Hvis alarmanlegget er i alarm-modus skal lyset blinke med en frekvens på 10 Hz. |
Banyrud | 18:e06a42c5d2a4 | 121 | // Denne funksjonen blir kalt opp av en thread, som betyr at den kjører kontinuerlig seperat av andre funksjoner. |
Banyrud | 18:e06a42c5d2a4 | 122 | |
Banyrud | 14:8e7aaf0cf5d7 | 123 | void Alarmf(void) |
Banyrud | 14:8e7aaf0cf5d7 | 124 | { |
andreped | 15:272fb4e610dc | 125 | while(1) { |
Banyrud | 18:e06a42c5d2a4 | 126 | if(running == true) { // Beskrivelse: Running er en global variabel som blir satt til false ved tilstand Normaldrift eller ved servicebryter lagt inn. |
andreped | 15:272fb4e610dc | 127 | Driftslys = !Driftslys; |
Banyrud | 18:e06a42c5d2a4 | 128 | Thread::wait(20); //Som vanlig wait funksjon, bare litt annen skrivemåte i thread biblioteket i OS5. |
Banyrud | 18:e06a42c5d2a4 | 129 | } else { // Hensikt: Hvis vi er i normaldrift driftlyset lyse kontinuerlig. |
andreped | 15:272fb4e610dc | 130 | Driftslys = 1; |
andreped | 15:272fb4e610dc | 131 | } |
andreped | 15:272fb4e610dc | 132 | } |
Banyrud | 13:0622c228b67d | 133 | } |
Banyrud | 13:0622c228b67d | 134 | |
Banyrud | 18:e06a42c5d2a4 | 135 | //Hensikt: Legge måleresultater over motstandene inn i en tabell som videre setter korrekte tilstander inn i en annen tabell. |
Banyrud | 18:e06a42c5d2a4 | 136 | |
Banyrud | 17:f27485b6d16e | 137 | void sone_monitor() |
andreped | 11:dad1798ed88f | 138 | { |
Banyrud | 18:e06a42c5d2a4 | 139 | //Legger først de forskjellige sonene inn i en tabell. |
Banyrud | 17:f27485b6d16e | 140 | Soner[0] = _Sone1; |
Banyrud | 17:f27485b6d16e | 141 | Soner[1] = _Sone2; |
Banyrud | 17:f27485b6d16e | 142 | Soner[2] = _Sone3; |
Banyrud | 17:f27485b6d16e | 143 | Soner[3] = _Sone4; |
Banyrud | 18:e06a42c5d2a4 | 144 | for(int i = 0, x = 0; i < 4; i++,x+=2) { //Hensikt: Sjekker en og en sone. |
Banyrud | 18:e06a42c5d2a4 | 145 | if( (Soner[i] > 0.35 ) && ( Soner[i] < 0.45) ) { //Normaldrift: Begge dører lukket. utregnedt verdi: 0.4. |
Banyrud | 18:e06a42c5d2a4 | 146 | tilstand[x] = 0; |
Banyrud | 17:f27485b6d16e | 147 | tilstand[x+1] = 0; |
Banyrud | 17:f27485b6d16e | 148 | } |
Banyrud | 18:e06a42c5d2a4 | 149 | if( (Soner[i] > 0.6 ) && ( Soner[i] < 0.7) ) { //Tilstand1: Dør 1 åpen. Utregnet verdi: 0.65 |
Banyrud | 17:f27485b6d16e | 150 | tilstand[x] = 1; |
Banyrud | 17:f27485b6d16e | 151 | tilstand[x+1] = 0; |
Banyrud | 17:f27485b6d16e | 152 | running = true; |
Banyrud | 17:f27485b6d16e | 153 | } |
Banyrud | 18:e06a42c5d2a4 | 154 | if( (Soner[i] > 0.46 ) && ( Soner[i] < 0.55) ) { //Tilstand2: Dør 2 åpen. Utregnet verdi: 0.5 |
Banyrud | 17:f27485b6d16e | 155 | tilstand[x] = 0; |
Banyrud | 17:f27485b6d16e | 156 | tilstand[x+1] = 1; |
Banyrud | 17:f27485b6d16e | 157 | running = true; |
Banyrud | 17:f27485b6d16e | 158 | } |
Banyrud | 18:e06a42c5d2a4 | 159 | if( (Soner[i] > 0.9) ) { //Tilstand 3: Begge dører er åpene. Utregnet verdi: 1. |
Banyrud | 17:f27485b6d16e | 160 | tilstand[x] = 1; |
Banyrud | 17:f27485b6d16e | 161 | tilstand[x+1] = 1; |
Banyrud | 17:f27485b6d16e | 162 | } |
andreped | 11:dad1798ed88f | 163 | } |
andreped | 10:f0a6d74095d4 | 164 | } |
andreped | 16:3d2e29aa5df5 | 165 | |
Banyrud | 18:e06a42c5d2a4 | 166 | //Hensikt: Sette utgangsalarmlysene på ettersom tabellen tilstand[i] endrer seg. Sjekker om tilstandene er ulike som minne, hvis det er tilfelle setter vi de ulike |
Banyrud | 18:e06a42c5d2a4 | 167 | // verdiene direkte til alarmutgangs tabellen. Etter dette starter vi log funksjonen for og logge endringen. Hvis den globale variabelen running |
Banyrud | 18:e06a42c5d2a4 | 168 | // ikke er true nullstiller vi alarmutgangene. |
Banyrud | 17:f27485b6d16e | 169 | |
Banyrud | 18:e06a42c5d2a4 | 170 | int TilstandSjekk() |
andreped | 16:3d2e29aa5df5 | 171 | { |
Banyrud | 18:e06a42c5d2a4 | 172 | if( running == true) { |
Banyrud | 18:e06a42c5d2a4 | 173 | for (int i = 0; i < 8; i++) { |
Banyrud | 18:e06a42c5d2a4 | 174 | if(minne[i] != tilstand[i]) { |
Banyrud | 18:e06a42c5d2a4 | 175 | Utganger[i] = 1; |
Banyrud | 18:e06a42c5d2a4 | 176 | minne[i] = tilstand[i]; |
Banyrud | 18:e06a42c5d2a4 | 177 | log_to_file(i,Utganger[i]); |
Banyrud | 18:e06a42c5d2a4 | 178 | } |
Banyrud | 18:e06a42c5d2a4 | 179 | } |
Banyrud | 18:e06a42c5d2a4 | 180 | } else { |
Banyrud | 18:e06a42c5d2a4 | 181 | for (int i = 0; i < 8; i++) { |
Banyrud | 18:e06a42c5d2a4 | 182 | Utganger[i] = 0; |
andreped | 16:3d2e29aa5df5 | 183 | } |
andreped | 16:3d2e29aa5df5 | 184 | } |
andreped | 16:3d2e29aa5df5 | 185 | return 0; |
andreped | 16:3d2e29aa5df5 | 186 | } |
andreped | 16:3d2e29aa5df5 | 187 | |
Banyrud | 17:f27485b6d16e | 188 | //////////////////////////////////////////////////////////// |
Banyrud | 17:f27485b6d16e | 189 | /////////////////Mulige logg innforinger//////////////////// |
Banyrud | 17:f27485b6d16e | 190 | // Tid: t sekunder // |
Banyrud | 17:f27485b6d16e | 191 | // Alarm 1 har blitt utloost // Dette betyr Sone 1 door 1 // |
Banyrud | 17:f27485b6d16e | 192 | // Alarm 2 har blitt utloost // Dette betyr Sone 1 door 2 // |
Banyrud | 17:f27485b6d16e | 193 | // Alarm 3 har blitt utloost // Dette betyr Sone 2 door 1 // |
Banyrud | 17:f27485b6d16e | 194 | // Alarm 4 har blitt utloost // Dette betyr Sone 2 door 2 // |
Banyrud | 17:f27485b6d16e | 195 | // Alarm 5 har blitt utloost // Dette betyr Sone 3 door 1 // |
Banyrud | 17:f27485b6d16e | 196 | // Alarm 6 har blitt utloost // Dette betyr Sone 3 door 2 // |
Banyrud | 17:f27485b6d16e | 197 | // Alarm 7 har blitt utloost // Dette betyr Sone 4 door 1 // |
Banyrud | 17:f27485b6d16e | 198 | // Alarm 8 har blitt utloost // Dette betyr Sone 4 door 2 // |
Banyrud | 17:f27485b6d16e | 199 | //////////////////////////////////////////////////////////// |
Banyrud | 17:f27485b6d16e | 200 | |
Banyrud | 18:e06a42c5d2a4 | 201 | //Hensikt: Skriver til en tekstfil når en alarm blir utløst. Samtidig som den skriver ned tiden siden anlegget startet. |
Banyrud | 18:e06a42c5d2a4 | 202 | |
Banyrud | 17:f27485b6d16e | 203 | int log_to_file(int c, int b) // c er sone, b er tilsand. |
Banyrud | 14:8e7aaf0cf5d7 | 204 | { |
Banyrud | 17:f27485b6d16e | 205 | FILE *fp ; |
Banyrud | 17:f27485b6d16e | 206 | fp = fopen( "/local/log.txt", "a" ) ; |
Banyrud | 17:f27485b6d16e | 207 | if(fp != NULL) { |
Banyrud | 17:f27485b6d16e | 208 | float tid = t.read(); |
Banyrud | 17:f27485b6d16e | 209 | fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \nAlarm %d: er utloost \n", tid, c+1); |
Banyrud | 14:8e7aaf0cf5d7 | 210 | } |
Banyrud | 17:f27485b6d16e | 211 | fclose(fp); |
Banyrud | 17:f27485b6d16e | 212 | return 0; |
Banyrud | 14:8e7aaf0cf5d7 | 213 | } |
Banyrud | 17:f27485b6d16e | 214 | |
Banyrud | 18:e06a42c5d2a4 | 215 | // Hensikt: Sette globale variabler, som har til hensikt å starte alarmanlegget. |
Banyrud | 18:e06a42c5d2a4 | 216 | // Minne tabellen som blir sammenlignet med utganger blir også nullstilt i denne funksjonen, for og vite |
Banyrud | 18:e06a42c5d2a4 | 217 | // om det har vært en alarm før funksjonen startet. |
Banyrud | 18:e06a42c5d2a4 | 218 | // Itillegg skriver den ut en rekke forskjellige kommandoer som kan bli benyttet |
Banyrud | 18:e06a42c5d2a4 | 219 | // til å kjøre forskjellige funksjoner i tera terma / annet program som skriver til pc. |
Banyrud | 18:e06a42c5d2a4 | 220 | |
andreped | 15:272fb4e610dc | 221 | void admin_access_granted() |
andreped | 15:272fb4e610dc | 222 | { |
andreped | 15:272fb4e610dc | 223 | admin = true; |
Banyrud | 17:f27485b6d16e | 224 | running = false; |
Banyrud | 18:e06a42c5d2a4 | 225 | for (int i=0; i<8; i++) { //Hensikt: Setter alle elementene i tabellen minne til 0, for og nullstille. |
Banyrud | 18:e06a42c5d2a4 | 226 | minne[i] = 0; |
Banyrud | 18:e06a42c5d2a4 | 227 | } |
Banyrud | 18:e06a42c5d2a4 | 228 | pc.printf("\nAdministrator tilgang innvilget\n"); //Hensikt: Gi info |
Banyrud | 18:e06a42c5d2a4 | 229 | pc.printf("Folgende kommandoer kan brukes: \n"); //Hensikt: Skrive ut en liste over alle funksjoner som er tilgjenglig. |
Banyrud | 18:e06a42c5d2a4 | 230 | pc.printf("Starte overvaaking av systemet. Kommando: 'start' + 'Enter'\n"); //Hensikt: Starter alarmanlegget. |
Banyrud | 18:e06a42c5d2a4 | 231 | pc.printf("Stoppe overvaaking av systemet. Kommando: 'stopp' + 'Enter'\n"); //Hensikt: Stopper alarmanlegget. |
Banyrud | 18:e06a42c5d2a4 | 232 | pc.printf("Status alarm for hver sone. Kommando: 'staa1' + 'Enter' \n"); //Hensikt: Sjekke om det er en alarm ved et spesifikk punkt. |
Banyrud | 18:e06a42c5d2a4 | 233 | pc.printf("Status alle soner og dorer. Kommando: 'status' + 'Enter' \n"); //Hensikt: Sjekke statusen til alle dører i alle sonere. |
Banyrud | 18:e06a42c5d2a4 | 234 | pc.printf("Reset hele systemet. Kommando: 'reset' + 'Enter' \n"); //Hensikt: Resete hele systemet. |
Banyrud | 18:e06a42c5d2a4 | 235 | compare_commands(); |
andreped | 15:272fb4e610dc | 236 | } |
andreped | 16:3d2e29aa5df5 | 237 | |
Banyrud | 18:e06a42c5d2a4 | 238 | //Hensikt: Passordbeskytter alarmsystemet ved hjelp av en string, funksjonen kjører i en thread, som vil si |
Banyrud | 18:e06a42c5d2a4 | 239 | // at denne går kontinuerlig sammen med resten av programmet. |
Banyrud | 18:e06a42c5d2a4 | 240 | // Når passord er riktig tastet inn, vil den alltid sørge for at compare_commands() kommandoen kjører. |
Banyrud | 18:e06a42c5d2a4 | 241 | |
andreped | 15:272fb4e610dc | 242 | void password_check() |
Banyrud | 14:8e7aaf0cf5d7 | 243 | { |
Banyrud | 17:f27485b6d16e | 244 | if(v == 0) { |
Banyrud | 17:f27485b6d16e | 245 | pc.printf("Skriv passord: "); |
Banyrud | 17:f27485b6d16e | 246 | v = 1; |
Banyrud | 17:f27485b6d16e | 247 | } |
Banyrud | 18:e06a42c5d2a4 | 248 | if(admin == false) { |
Banyrud | 18:e06a42c5d2a4 | 249 | char tastepassord[20]; |
Banyrud | 18:e06a42c5d2a4 | 250 | pc.scanf("%s",&tastepassord); |
Banyrud | 18:e06a42c5d2a4 | 251 | int k = strcmp(tastepassord, "passord\0"); |
Banyrud | 18:e06a42c5d2a4 | 252 | if(!k) { |
Banyrud | 18:e06a42c5d2a4 | 253 | admin_access_granted(); |
Banyrud | 18:e06a42c5d2a4 | 254 | } |
Banyrud | 18:e06a42c5d2a4 | 255 | } |
Banyrud | 18:e06a42c5d2a4 | 256 | while(admin == true) { |
Banyrud | 18:e06a42c5d2a4 | 257 | compare_commands(); |
andreped | 15:272fb4e610dc | 258 | } |
Banyrud | 14:8e7aaf0cf5d7 | 259 | } |
Banyrud | 14:8e7aaf0cf5d7 | 260 | |
Banyrud | 18:e06a42c5d2a4 | 261 | |
Banyrud | 18:e06a42c5d2a4 | 262 | //Hensikt: Sjekke inntastet verdi på tastatur oppimot våre funksjoner, for deretter og starte opp funksjoner som utfører |
Banyrud | 18:e06a42c5d2a4 | 263 | // riktige ting utifra inntastet verdi. Etter hver sjekk vil tabellen bli cleared. |
Banyrud | 18:e06a42c5d2a4 | 264 | |
Banyrud | 18:e06a42c5d2a4 | 265 | void compare_commands() |
andreped | 1:6917ec4f5e6d | 266 | { |
Banyrud | 17:f27485b6d16e | 267 | char read[20]; |
Banyrud | 17:f27485b6d16e | 268 | pc.scanf("%s",&read); |
Banyrud | 18:e06a42c5d2a4 | 269 | if(!strcmp(read, "start\0"))start_sys(); |
Banyrud | 18:e06a42c5d2a4 | 270 | if(!strcmp(read, "stopp\0")) stopp_sys(); |
Banyrud | 18:e06a42c5d2a4 | 271 | if(!strcmp(read, "reset\0")) mbed_reset(); |
Banyrud | 18:e06a42c5d2a4 | 272 | if(!strcmp(read, "reqa1\0")) request_status_alarm(1); |
Banyrud | 18:e06a42c5d2a4 | 273 | if(!strcmp(read, "reqa2\0")) request_status_alarm(2); |
Banyrud | 18:e06a42c5d2a4 | 274 | if(!strcmp(read, "reqa3\0")) request_status_alarm(3); |
Banyrud | 18:e06a42c5d2a4 | 275 | if(!strcmp(read, "reqa4\0")) request_status_alarm(4); |
Banyrud | 18:e06a42c5d2a4 | 276 | if(!strcmp(read, "reqa5\0")) request_status_alarm(5); |
Banyrud | 18:e06a42c5d2a4 | 277 | if(!strcmp(read, "reqa6\0")) request_status_alarm(6); |
Banyrud | 18:e06a42c5d2a4 | 278 | if(!strcmp(read, "reqa7\0")) request_status_alarm(7); |
Banyrud | 18:e06a42c5d2a4 | 279 | if(!strcmp(read, "reqa8\0")) request_status_alarm(8); |
Banyrud | 18:e06a42c5d2a4 | 280 | if(!strcmp(read, "status\0")) request_status_sys(); |
Banyrud | 18:e06a42c5d2a4 | 281 | for (int i=0; i<19; i++) { |
Banyrud | 18:e06a42c5d2a4 | 282 | read[i] = 0; |
andreped | 15:272fb4e610dc | 283 | } |
Banyrud | 17:f27485b6d16e | 284 | } |
Banyrud | 17:f27485b6d16e | 285 | |
Banyrud | 18:e06a42c5d2a4 | 286 | //Hensikt: Starte alarmanlegget og kalle opp logg funksjonen for og logge start. |
Banyrud | 18:e06a42c5d2a4 | 287 | |
Banyrud | 18:e06a42c5d2a4 | 288 | void start_sys() |
Banyrud | 17:f27485b6d16e | 289 | { |
Banyrud | 17:f27485b6d16e | 290 | start = true; |
Banyrud | 17:f27485b6d16e | 291 | stopp = false; |
Banyrud | 18:e06a42c5d2a4 | 292 | pc.printf("Systemet ble startet\n"); |
Banyrud | 17:f27485b6d16e | 293 | logg_start(); |
Banyrud | 17:f27485b6d16e | 294 | } |
Banyrud | 17:f27485b6d16e | 295 | |
Banyrud | 18:e06a42c5d2a4 | 296 | //Hensikt: Stopper alarmanlegget ved hjelp av globale variabler og kaller opp logg funksjonen for og logge stopp. |
Banyrud | 18:e06a42c5d2a4 | 297 | |
Banyrud | 18:e06a42c5d2a4 | 298 | void stopp_sys() |
Banyrud | 17:f27485b6d16e | 299 | { |
Banyrud | 17:f27485b6d16e | 300 | start = false; |
Banyrud | 17:f27485b6d16e | 301 | stopp = true; |
Banyrud | 18:e06a42c5d2a4 | 302 | pc.printf("Systemet ble stoppet\n"); |
Banyrud | 17:f27485b6d16e | 303 | logg_stopp(); |
andreped | 15:272fb4e610dc | 304 | } |
andreped | 15:272fb4e610dc | 305 | |
Banyrud | 18:e06a42c5d2a4 | 306 | //Hensikt: Skrive til en fil på pc, når alarmanlegget ble startet i tid fra spenningssetting. |
Banyrud | 18:e06a42c5d2a4 | 307 | |
Banyrud | 17:f27485b6d16e | 308 | int logg_start() |
Banyrud | 17:f27485b6d16e | 309 | { |
Banyrud | 17:f27485b6d16e | 310 | FILE *fp ; |
Banyrud | 17:f27485b6d16e | 311 | fp = fopen( "/local/log.txt", "a" ) ; |
Banyrud | 17:f27485b6d16e | 312 | if(fp != NULL) { |
Banyrud | 17:f27485b6d16e | 313 | float tid = t.read(); |
Banyrud | 17:f27485b6d16e | 314 | fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \n Overvaakingen ble startet \n", tid);//t er tid |
andreped | 16:3d2e29aa5df5 | 315 | |
Banyrud | 17:f27485b6d16e | 316 | fclose(fp); |
Banyrud | 17:f27485b6d16e | 317 | return 0; |
Banyrud | 17:f27485b6d16e | 318 | } else { |
Banyrud | 17:f27485b6d16e | 319 | return 1; |
Banyrud | 17:f27485b6d16e | 320 | } |
Banyrud | 17:f27485b6d16e | 321 | } |
Banyrud | 18:e06a42c5d2a4 | 322 | |
Banyrud | 18:e06a42c5d2a4 | 323 | //Hensikt: Skrive til en fil på pc, når alarmanlegget ble stoppet i tid fra spenningssetting. |
Banyrud | 18:e06a42c5d2a4 | 324 | |
Banyrud | 17:f27485b6d16e | 325 | int logg_stopp() |
Banyrud | 17:f27485b6d16e | 326 | { |
Banyrud | 17:f27485b6d16e | 327 | FILE *fp ; |
Banyrud | 17:f27485b6d16e | 328 | fp = fopen( "/local/log.txt", "a" ) ; |
Banyrud | 17:f27485b6d16e | 329 | if(fp != NULL) { |
Banyrud | 17:f27485b6d16e | 330 | float tid = t.read(); |
Banyrud | 17:f27485b6d16e | 331 | fprintf(fp, "Tid: %.2f i sekunder siden systemet blir spenningsatt \n Overvaakingen ble stoppet \n", tid);//t er tid |
Banyrud | 17:f27485b6d16e | 332 | fclose(fp); |
Banyrud | 17:f27485b6d16e | 333 | return 0; |
Banyrud | 17:f27485b6d16e | 334 | } else { |
Banyrud | 17:f27485b6d16e | 335 | return 1; |
Banyrud | 17:f27485b6d16e | 336 | } |
Banyrud | 17:f27485b6d16e | 337 | } |
Banyrud | 18:e06a42c5d2a4 | 338 | |
Banyrud | 18:e06a42c5d2a4 | 339 | //Hensikt: Skrive til status til alle dører til pc / tera term. |
Banyrud | 18:e06a42c5d2a4 | 340 | |
Banyrud | 17:f27485b6d16e | 341 | int request_status_alarm(int v) |
andreped | 15:272fb4e610dc | 342 | { |
Banyrud | 17:f27485b6d16e | 343 | switch(v) { |
Banyrud | 17:f27485b6d16e | 344 | case 1: |
Banyrud | 17:f27485b6d16e | 345 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 346 | pc.printf("Door 1 i sone 1 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 347 | } else { |
Banyrud | 17:f27485b6d16e | 348 | pc.printf("Door 1 i sone 1 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 349 | } |
Banyrud | 17:f27485b6d16e | 350 | break; |
Banyrud | 17:f27485b6d16e | 351 | case 2: |
Banyrud | 17:f27485b6d16e | 352 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 353 | pc.printf("Door 2 i sone 1 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 354 | } else { |
Banyrud | 17:f27485b6d16e | 355 | pc.printf("Door 2 i sone 1 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 356 | } |
Banyrud | 17:f27485b6d16e | 357 | break; |
Banyrud | 17:f27485b6d16e | 358 | case 3: |
Banyrud | 17:f27485b6d16e | 359 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 360 | pc.printf("Door 1 i sone 2 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 361 | } else { |
Banyrud | 17:f27485b6d16e | 362 | pc.printf("Door 1 i sone 2 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 363 | } |
Banyrud | 17:f27485b6d16e | 364 | break; |
Banyrud | 17:f27485b6d16e | 365 | case 4: |
Banyrud | 17:f27485b6d16e | 366 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 367 | pc.printf("Door 2 i sone 2 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 368 | } else { |
Banyrud | 17:f27485b6d16e | 369 | pc.printf("Door 2 i sone 2 er ikke utloost\n"); |
andreped | 16:3d2e29aa5df5 | 370 | } |
Banyrud | 17:f27485b6d16e | 371 | break; |
Banyrud | 17:f27485b6d16e | 372 | case 5: |
Banyrud | 17:f27485b6d16e | 373 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 374 | pc.printf("Door 1 i sone 3 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 375 | } else { |
Banyrud | 17:f27485b6d16e | 376 | pc.printf("Door 1 i sone 3 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 377 | } |
Banyrud | 17:f27485b6d16e | 378 | break; |
Banyrud | 17:f27485b6d16e | 379 | case 6: |
Banyrud | 17:f27485b6d16e | 380 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 381 | pc.printf("Door 2 i sone 3 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 382 | } else { |
Banyrud | 17:f27485b6d16e | 383 | pc.printf("Door 2 i sone 3 er ikke utloost\n"); |
andreped | 16:3d2e29aa5df5 | 384 | } |
Banyrud | 17:f27485b6d16e | 385 | break; |
Banyrud | 17:f27485b6d16e | 386 | case 7: |
Banyrud | 17:f27485b6d16e | 387 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 388 | pc.printf("Door 1 i sone 4 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 389 | } else { |
Banyrud | 17:f27485b6d16e | 390 | pc.printf("Door 1 i sone 4 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 391 | } |
Banyrud | 17:f27485b6d16e | 392 | break; |
Banyrud | 17:f27485b6d16e | 393 | case 8: |
Banyrud | 17:f27485b6d16e | 394 | if(Utganger[v] == 1) { |
Banyrud | 17:f27485b6d16e | 395 | pc.printf("Door 2 i sone 4 er utloost\n"); |
Banyrud | 17:f27485b6d16e | 396 | } else { |
Banyrud | 17:f27485b6d16e | 397 | pc.printf("Door 2 i sone 4 er ikke utloost\n"); |
Banyrud | 17:f27485b6d16e | 398 | } |
Banyrud | 17:f27485b6d16e | 399 | break; |
Banyrud | 17:f27485b6d16e | 400 | } |
Banyrud | 17:f27485b6d16e | 401 | return 0; |
Banyrud | 17:f27485b6d16e | 402 | } |
Banyrud | 18:e06a42c5d2a4 | 403 | |
Banyrud | 18:e06a42c5d2a4 | 404 | //Hensikt: Skrive status til alarmpunkt utifra inntastet valg på tastatur. |
Banyrud | 18:e06a42c5d2a4 | 405 | |
Banyrud | 17:f27485b6d16e | 406 | int request_status_sys() |
Banyrud | 17:f27485b6d16e | 407 | { |
Banyrud | 18:e06a42c5d2a4 | 408 | for(int u = 0; u <8; u++) { |
Banyrud | 17:f27485b6d16e | 409 | if(Utganger[u] == 1) { |
Banyrud | 18:e06a42c5d2a4 | 410 | pc.printf("Alarm %d er utloost\n", u+1); |
Banyrud | 17:f27485b6d16e | 411 | } else { |
Banyrud | 18:e06a42c5d2a4 | 412 | pc.printf("Alarm %d er ikke utloost\n", u+1); |
andreped | 16:3d2e29aa5df5 | 413 | } |
andreped | 15:272fb4e610dc | 414 | } |
Banyrud | 17:f27485b6d16e | 415 | return 0; |
andreped | 16:3d2e29aa5df5 | 416 | } |