knut kristensen / Mbed 2 deprecated prosjektoppgave_alarm

Dependencies:   mbed

Fork of prosjektoppgave_alarm by PnM_spring17

main.cpp

Committer:
mathimat
Date:
2017-01-25
Revision:
7:1fbdaef9052a
Parent:
6:5607f07a3863
Child:
9:7fff168507fa

File content as of revision 7:1fbdaef9052a:

#include "mbed.h"

AnalogIn ain1(p17), ain2(p18), ain3(p19), ain4(p20);
DigitalIn nullut(p16);
BusOut ledStatus(p21,p22,p23,p24,p25,p26,p27,p28);
DigitalOut ledMaster(LED1);
Serial pc(USBTX, USBRX);
LocalFileSystem local("local");

Ticker tick;
Timer systemTid;

int brytere[8]; //en for hver bryter, 1 = alarm

int status = 0; //1 = alarm


//todo: få dette i en konfigurasjons tekstfil
#define passord         "qwerty"
#define bryterAhigh     0.285f
#define bryterAlow      0.200f
#define bryterBhigh     0.200f
#define bryterBlow      0.150f
#define bryterABhigh    0.150f
#define bryterABlow     0.050f
#define bryter0         0.97f


void getFromFile(){
    
}

void log(int status = 0, int tall = 0) {
    FILE *fp = fopen("/local/log.txt", "a");
    fprintf(fp, "\r\n TIME: %f |", systemTid.read());
    switch(status){
        case 1:
            fprintf(fp,"ALARM, bryter: %d", tall);
            break;
        case 2:
            fprintf(fp,"ALARM, nullstillt ved servisbryter");
            break;
        case 3:
            fprintf(fp,"ALARM, nullstillt ved terminal");
            break;
        default:
            break;
    }
    fclose(fp);
}


int alarmSjekk(AnalogIn& krets, int kretsn){ 
    //TODO: oppdater tabell med hvilken alarm som har gått
    /* Sjekker kretsen etter spenningsendring og returnerer hvilke bryter som er åpen
        -1  error
        0   alle lukket
        1   bryter A
        2   bryter B
        3   bryter AB
        ---  
    */
    int bryter = -1;
    float volt = krets.read();
    if(volt <= bryter0){
        status = 1;
        if(volt < bryterAhigh){
            if(volt < bryterBhigh){
                if(volt < bryterABhigh){
                    bryter = 3;
                    
                } else {
                    bryter = 2;
                }
            } else {
                bryter = 1;
            }
        } else {
            bryter = -2;
        }
        log(1,bryter);
    } else(bryter = 0);
    return bryter;
}

void sjekkAlleKretser(){
    //sjekker alle kretser skvensielt for aktivering
    int a = alarmSjekk(ain1, 0);
    int b = alarmSjekk(ain2, 1);
    int c = alarmSjekk(ain3, 2);
    int d = alarmSjekk(ain4, 3);
    pc.printf("krets 1: %d krets 2: %d krets 3: %d krets 4: %d ",a,b,c,d);
}

void statusLED(){
    //oppdatere statusLED til aktiverte alarmer
    for(int i=0; brytere[i]!=NULL;i++){
        if(brytere[i] == 1){
            ledStatus = ledStatus+i;
        }
    }
}



void resetSystem(){
    //reseter alarmsystemet
    for(int i=0; brytere[i]!=NULL;i++){
        brytere[i] = 0;
    }
    status = 0;
    
}


void chron(){
    sjekkAlleKretser();
        statusLED();
}


int main() {
    systemTid.start();
    while(1){
        pc.printf("\r ");
        sjekkAlleKretser();
        pc.printf(" | Alarm Status: %d\r\n",status);
        wait(0.5);
    }
}