fort test av mbed cli

Fork of Alarmsystem_rev_innlevering by Programmeringsgruppe 1

Committer:
Banyrud
Date:
Fri Mar 09 10:49:36 2018 +0000
Revision:
18:e06a42c5d2a4
Parent:
17:f27485b6d16e
ferdig;

Who changed what in which revision?

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