![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ok
Fork of Alarmsystem-FINAL1 by
Diff: main.cpp
- Revision:
- 0:c9f607286335
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Feb 25 11:31:10 2016 +0000 @@ -0,0 +1,148 @@ + +#include "mbed.h" +#include <stdio.h> +Serial pc(USBTX,USBRX); +int valg=1; +int i,b=0,passforsok=0; +int antallbokstaver=0; +char passord[30]="NULL"; // array som vi lagrer det valgte passord +char pass[30]; // array som vi lagrer passordet vi tester mot valgte passord +void flushSerialBuffer(void); +int menyvalg,returnvalg,passriktig; +Timer t; + +int main() +{ + while(1) { + switch (valg) { //Vi har valgt å bruke switch cases fordi dette gjør det lettere + //å gå fram og tilbake avhengig av riktig eller galt passord. + + case 1: // i case 1 er meny valgene man får, man lagrer da valget i en variabel + pc.printf("\n 1. Sett alarm paa."); // som man setter i en annen switch case. + pc.printf("\n 2. Slaa av alarm. "); + pc.printf("\n 3. Skifte passord. "); + pc.printf("\n 4. Reset system "); + pc.printf("\n 5. Status "); + pc.printf("\n skriv inn ditt valg: "); + pc.scanf("%d",&menyvalg); // menyvalg er det vi setter som valg i vår andre switch løkke til + valg=2; + + break; + + case 2: + while(1) { + if(!strcmp(passord,"NULL")) { // her tester vi om vi har tidligere satt et valgfritt passord + pc.printf("\n Skriv inn nytt passord: "); // hvis ikke, vil vi gå inn her og lage et nytt passord. + //fflush(stdout); // dette gjør vi fordi hadde problemer med tera term og ville resette buffer. + antallbokstaver=0; + flushSerialBuffer(); // bruker denne void for å flushe buffer fordi enter er lagret i bufferen etter menyen. + // og da gikk den inn i if passord=\r hver gang og breaket ut. + while(1) { + + if(pc.readable()) { + passord[antallbokstaver]=pc.getc(); // I dette arrayet lagrer vi det valgte passordet. + + if(passord[antallbokstaver]=='\r') { // \r betyr carrage return og når vi trykker enter vil denne være aktiv + passord[antallbokstaver]='\0'; + break; + } + antallbokstaver++; + } + } + + } else { + t.start(); + b=0; + printf("\n Skriv inn passord: "); + flushSerialBuffer(); // bruker denne for å flushe input data fra tera term. Så vi + while( t < 31 && passforsok<3) { // ikke direkte hopper inn i if setningen og breaker. + + if(pc.readable()) { + + pass[b]=pc.getc(); + + if(pass[b]=='\r') { + pc.printf("\n breaker ut fra pw"); + valg=3; + + pass[b]='\0'; + b=0; + break; + + } + b++; + + } + + } + if(t>30) { + pc.printf("\n brukte for lang tid, alarm gatt \n"); + valg=1; // setter switch case tilbake til meny. + passriktig=2; // dette returnerer vi for å signalisere at alarmen er gått. + + } + } + break; + } + break; + + case 3: //testing av passord + pc.printf("\n testing av passord"); + if( !strcmp(passord, pass)) { // tester to array mot hverandre for å sjekke om disse er lik. + pass[0]='0'; + valg=1; + t.stop(); + t.reset(); + pc.printf("\n passord er riktig"); + passriktig=1; + passforsok=0; + } else { + pc.printf("\n passord er feil"); + valg=2; + passforsok++; + if(passforsok>3) { + casenummer=6; + break; + } + break; + } + } + + if(passriktig==1) { + passriktig=0; + menyvalg=casenummer; + } + } +} + +int tilstand() +{ + switch (casenummer) { + case 1: // alarm på + void systempaa(int aktiv);/* Komplett funksjon for systempa, inkl, loggforing og varsling av krets. */ + + + case 2: // alarm av + void logg_system_av(float timer); + case 3: // skifting av passord + passord[30]="NULL"; + + case 4: // reset + void nullstilling(int servicebryter);/* Nullstiller hele systemet ved aktivering av servicebryter */ + + case 5: + void natid_status(void);/* Funksjon for å lese av nåværende status på valgt krets. */ + case 6: // alarm gått + void logg_feilpass(); + void led_status(void); + + } +} +void flushSerialBuffer(void) +{ + while (pc.readable()) { + (void) pc.getc(); + } + return; +} +