programmering / Mbed 2 deprecated mbed_blinkyrfferfrdfrf

Dependencies:   mbed

Revision:
0:c1d82c87628a
Child:
1:499bd5b83b45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 06 10:13:16 2018 +0000
@@ -0,0 +1,318 @@
+#include "mbed.h"
+#include <time.h>
+
+AnalogIn sloyfe[4] = {p17, p18, p19, p20};                          // Analoge inngangene, *sløyfene*
+DigitalOut led[4] = {LED1, LED2, LED3, LED4};                       // Led til alarm blinking ved feil.
+DigitalOut b[8] = {p21, p22, p23, p24, p25, p26, p27, p28};         // Status ledbar på sensorene i sløyfene.
+DigitalIn sb(p16);                                                  // Service bryter.
+Serial pc(USBTX, USBRX);                                            //PC komunikasjon
+Ticker alarm, system_paa, servic;                                   // Tikkere, alarm er til å sjekke sløyfene, system på er til når alarmen er aktivert og service er for å sjekke servicebryter.
+int blink[4]= {0, 0, 0, 0};                                         // Global variabel med 4 elementer. Hvert element styrer sin egen led!
+int amount_faild = 0;                                        // En variabel for å telle antall ganger feil inntastet passord.
+void alarm_actived();                                        // Sjekker hva verdien på de analoge inngangene er og og utfører en case ut fra det for hver sløyfe.
+void service();                                              // Funksjon for resetting av anlegge. Anlegget blir satt i vedlikeholdsmodus med null feil.
+void alblink();                                             // Blinke funksjonen.
+char passord[5] = {'5','5', '5', '5', '5'};                             // Passordet.
+int check_password1();                                       // Funksjon for å sjekke om inntastet passord er riktig.
+void User_Of(int);                                               // Valg menyen der User_Of velger et ønske.
+void Dato_timer();                                          //Klokke funskjonen.
+LocalFileSystem local("local");                             // Fillogging
+
+int main()
+{
+   set_time(1519919737); // vasjon 27 feb
+    while(1)
+    {
+        pc.printf("Velkommen\n");                   // Velkomst beskjed.
+        Dato_timer();                               // Oppkaller klokke funksjonen for å sjekke om tiden er riktig.
+        int x = check_password1();                      // Dersom passord er riktig blir det returnet en ener og tilegnet til variabelen x.
+        User_Of(x);                                      // Valg funskjonen får verdien 1 fra varabelen x.
+    }
+}
+
+void Dato_timer()
+{
+    time_t seconds = time(NULL);                                                                                    // Returnerer tiden lagret i time_t i sekunder.
+    pc.printf("Mbed klokka er naa: %s", ctime(&seconds));                                                                       // Viser hva tiden er, ctime tolker det til leselig tid for oss.
+    pc.printf("\n\n\n");
+    pc.printf("Hvis det ikke stemmer tast 0 ellers tast noe annet\n", ctime(&seconds));                                 //Kun info.
+    if (pc.getc() == '0')                                                                                           // Sjekk om inntastet tegn er 0.
+    {
+        struct tm t;                                                                                                //Pakker all info inn og sender det til klokkefunksjonen.
+        pc.printf("Tast inn dato og klokkeslett:\n");
+        pc.printf("YYYY MM DD HH MM SS[enter]\n");
+        scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec);            // inhenter riktig rid fra User_Of.
+        
+        t.tm_year = t.tm_year - 2020;               // Gjør om til riktig år.
+        t.tm_mon = t.tm_mon - 1;                        //Gjør om til riktig måned.
+        set_time(mktime(&t));                       // Setter nye tiden til intastet tid.
+        
+    }
+    
+}
+
+void User_Of(int riktigpassord)                          // meny funksjonen.
+{   
+    servic.attach(&service, 60);                          // Tikker funksjon som service blir tilknyttet og utføres 2 ganger i sekundet.
+    while(riktigpassord == 1)                           // Hvis verdien fra x er 1 gå inn her.
+    {
+        time_t seconds = time(0); 
+        pc.printf("For start tast 5: \n\t");            // Valg meny.
+        pc.printf("For stopp tast 6:\n\t");
+        pc.printf("For reset tast 7:\n\t");
+        pc.printf("For status av hele anlegget eller sloyfer tast 4:\n\t");
+        pc.printf("For utlogging tast 8:\n\t");
+    
+        servic.attach(&service, 5);
+        switch(pc.getc())                       // Innhenter inntrykk fra User_Of.
+        {
+            case '5':                       // Dersom intastet tegn er 1, utfør dette.
+            {
+                FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
+                fprintf(fp, "\r\n Systemet paa: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                fclose(fp);                                             //Stenger filen fp.
+                pc.printf("System paa. \n\n");//Info til User_Of.
+                system_paa.attach(&alarm_actived, 2);// Tikker funksjon som alarm aktiv blir tilknyttet og skal utføres annen hvert sekund.
+                break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            case '6':
+            {
+                FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
+                fprintf(fp," Systemet stoppet: %s\r\n", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                fclose(fp);                                                             //Stenger filen fp.
+                pc.printf("System stoppet. \n\n");
+                system_paa.detach();                                                                //Fra kobler funskjonen system_paa fra tickeren.
+                for(int m=0; m < 4; m++){ blink[m]=0; led[m]=0;}
+                break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            case '7':
+            {
+                FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
+                fprintf(fp, "\r\n Systemet resatt: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                fclose(fp);//Stenger filen fp.
+                pc.printf("\n\n System resatt. \n\n");
+                int m=0;
+                while(m < 4) 
+                { // Dersom denne lokale variabelen er mindre enn 4 hold deg i denne løkka.
+                    blink[m]=0; // Dersom service bryter er 1 reset alarm.
+                    b[m+m]=b[m+m+1]=0;// Sett alle diodene fra b[0+0] og b[0+0+1] = 0. Og for hver gang m økes med en verdi blir det da m+m og m+m+1. Partall og oddetall.
+                    led[m]=0;// Sett alle led[] til 0.
+                    m++;// Inkrementer denne lokale variabelen og repeter.
+                }
+                break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            case '4':
+            {
+                pc.printf("\n For status paa hele anlegget tast 1: \n");
+                pc.printf("\n For status paa enkelt sloyfer tast 2: \n\n\t\t");
+                switch(getchar())//Ny switch case i case 4 for status valg.
+                {
+                    case '5':
+                    {
+                        for(int m=0; m<4; m++)
+                        {
+                            float a=sloyfe[m];// Lokal float variabel som får verdien fra sløyfene for hver verdi i har.
+                            if(a >= 0.30 && a <= 0.55){ pc.printf("\n Sloyfe %d alt ok. \n R1 i sloyfe %d operativ. \n R2 i sloyfe %d operativ \n\n", m+1, m+1, m+1); }// Tester og hvis sant, printer en beskjed til User_Of.
+                            else if(a >= 0.58 && a <= 0.62) { pc.printf("\n Brudd i sloyfe %d. \n Brudd i R1 sloyfe %d. \n", m+1, m+1); }// Tester og hvis sant, printer en beskjed til User_Of.
+                            else if(a >= 0.64 && a <= 0.80) { pc.printf("\n Brudd i sloyfe %d. \n \n Brudd i R2 sloyfe %d. \n\n", m+1, m+1); }// Tester og hvis sant, printer en beskjed til User_Of.
+                            else if(a < 0.25) { pc.printf("\n Brudd i hele sloyfe %d. \n", m+1); }// Tester og hvis sant, printer en beskjed til User_Of.
+                            else if(a >=0.88) { pc.printf("\n Brudd i R1 og R2 i sloyfe %d. \n", m+1); }// Tester og hvis sant, printer en beskjed til User_Of.
+                        }
+                        break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+                    }
+                    case '6':
+                    {
+                        pc.printf("\n For sloyfe 1 tast 1: \n For sloyfe 2 tast 2: \n For sloyfe 3 tast 3: \n For sloyfe 4 tast 4: \n\n\t\t");// Valg meny for status på sløye.
+                        int x = getchar();
+                        if(x<50 || x>60){pc.printf("\n Ugyldig valg! \n"); break;};
+                        float a=sloyfe[x-50];//x-49 er pga getchar gir en ASCII verdi som er forskjellig fra ønskelig verdi, med -49 får vi riktig verdi til sløyfe element nummer.
+                        if(a >= 0.30 && a <= 0.55){ pc.printf("\n R1 operativ. \n R2 operativ \n\n"); }// Tester og hvis sant, printer en beskjed til User_Of.
+                        else if(a >= 0.58 && a <= 0.62) { pc.printf("\n Brudd i R1 sloyfe %d. \n", x-49); }// Tester og hvis sant, printer en beskjed til User_Of, x-48 for å få riktig verdi på sløyfe nummer.
+                        else if(a >= 0.64 && a <= 0.80) { pc.printf("\n Brudd i R2 sloyfe %d. \n\n", x-49); }// Tester og hvis sant, printer en beskjed til User_Of, x-48 for å få riktig verdi på sløyfe nummer.
+                        else if(a < 0.25) { pc.printf("\n Brudd i hele sloyfe %d. \n", x-48); }// Tester og hvis sant, printer en beskjed til User_Of, x-48 for å få riktig verdi på sløyfe nummer.
+                        else if(a >=0.88) { pc.printf("\n Brudd i R1 og R2 i sloyfe %d. \n", x-48); }// Tester og hvis sant, printer en beskjed til User_Of, x-48 for å få riktig verdi på sløyfe nummer.
+                        break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+                    }
+                    default: //Dersom et annet tall enn hva som er spesifisert printes denne beskjeden ut.
+                    {
+                        printf("\n Ugyldig valg.\n");
+                        break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+                    }
+                } break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            case '8':
+            {
+                FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
+                fprintf(fp, "\r\n Logget av systemet: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                fclose(fp);//Stenger filen fp.
+                pc.printf("\n\n\n\n\n\n\n\n\t\t\t\t Farvel.\n\n\n\n\n\n\n\n\n");
+                riktigpassord=0;// Setter denne variabelen til 0 for at neste innlogging kun skjer hvis riktig passord er skrevet.
+                break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            case '0':
+            {
+                FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for lesing.
+                /*if (fp == NULL) // Dette er for å gi beskjed om at filen ikke klarte å åpne.
+                {
+                    pc.printf
+                    exit(1);
+                }*/// Dette har vi valgt å eksludere da ved testing er det tydelig at filen åpner å lukker seg på rikitg måte.
+                int c;
+                if (fp) //En test for å se om filen er åpen!
+                {
+                    while ((c = getc(fp)) != EOF)// Så fremt det er flere tegn i fila forbli i while løkka.
+                    {
+                        pc.putc(c);// Printer ut tegn for tegn fra filen til TeraTerm.
+                    }
+                }
+                fclose(fp);//Ferdig med lesing av filen og lukker filen.
+                break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
+            }
+            default: //Dersom et annet tall enn hva som er spesifisert printes denne beskjeden ut.
+            {
+                printf("\n Ugyldig valg.\n");
+                break;//Det er valgfritt å breake her da default blir utført og programmet fortsetter videre. Men vi tar det med for det.
+            }
+        }
+    }
+}   
+int check_password1()
+{
+    time_t seconds = time(NULL); // Henter tiden lagret i time_t i sekunder for videre bruk.
+    pc.printf("\n Skriv inn passord for adgang til alarmsystemet: ");
+    int riktigpass=0; int n=0; char sjekk[4];// Lokale varable blir opprettet for bruk i denne funksjonen.
+    while(1) 
+    {
+        if(pc.readable() && n < 4) // Dersom noe blir tastet på tastauret gå inn.
+            {
+                sjekk[n++] = pc.getc();// Lagre inntastet tegn i sjekk arrayet i element n og inkrementer n med 1.
+                if(n == 4) { break; }// Dersom n er lik 4 break ut av while løkken. 
+            }
+    }
+    for(n=0; n<4; n++) { if(sjekk[n]==passord[n]) { riktigpass++; } }// En for løkke for å sammenligne hvert intastet tegn med passord tegnene.
+    
+    if(riktigpass == 4) // Dersom passordet er riktig gå inn.
+    {
+        FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
+        fprintf(fp, "\r\n Riktig passord inntastet: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+        fclose(fp);//Stenger filen fp.
+        pc.printf("\n Riktig passord.\n\n");
+        amount_faild=0;
+        return 1;
+    }
+    else 
+    { // Dersom passordet er feil gå inn her.
+        amount_faild++;
+        FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
+        fprintf(fp, "\r\n Feil passord inntastet, %d ganger: %s", amount_faild, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+        fclose(fp);//Stenger filen fp.
+        pc.printf("\n\nFeil Passord, prov igjen!\n\n"); }
+    return 0;
+}
+
+void alblink()//Blinke funksjon for sløyfene.
+{
+    int n;// Lokal variabel
+    for(n=0; n < 5; n++) 
+    { // For løkke for å sjekke om feil er tilstedet eller ikke.
+        if(blink[n]==1) { led[n] = !led[n]; }  // Dersom feil på de forskjellige sløyfene blink med riktig led!
+    }
+}
+
+void service()// service bryter funksjon.
+{
+    time_t seconds = time(NULL); // Henter tiden lagret i time_t i sekunder for videre bruk.
+    if(sb ==1) 
+    { // Hvis service bryter aktiv gå inn.
+        FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");                          // File blir peket til fp og fp blir åpnet for skriving.
+        fprintf(fp, "\r\n Service bryter aktivert: %s", ctime(&seconds));           //Kun en beskjed som blir loggført med klokketid.
+        fclose(fp);                         //Stenger filen fp.
+    
+        pc.printf("\n\n Vedlikeholdsarbeid paa alegget. \n\n\n\n");// Fortell User_Of at anlegge er i vedlikeholdsmodus.
+        int m=0;            //Lokal variabel.
+        while(sb==1) 
+        {                                                           // Såfremt service bryteren er aktiv holdes programmet i denne while løkken.
+            while(m < 2) 
+            {                                                                   // Dersom denne lokale variabelen er mindre enn 4 hold deg i denne løkka.
+                blink[m] = 0;                                                   // Dersom service bryter er 1 reset alarm.
+                b[m+m]=b[m + m + 1] = 0;                // Sett alle diodene fra b[0+0] og b[0+0+1] = 0. Og for hver gang m økes med en verdi blir det da m+m og m+m+1. Partall og oddetall.
+                led[m] = 0;                         // Sett alle led[] til 0.
+                m++;                                                                // Inkrementer denne lokale variabelen og repeter.
+            }
+        }
+        system_paa.detach();                            // Frakobler system_paa fra ticker.
+        pc.printf("\n\n Tast 1 for igangsetting \n\n");
+    }
+}
+
+void alarm_actived()// .
+{
+    time_t seconds = time(NULL);                                                        // Henter tiden lagret i time_t i sekunder for videre bruk.
+    alarm.attach(&alblink, 0.1);                                                                // Tilkobler alblink funksjonen til ticker ved navnet alarm og denne funksjoenen kjøres 10 ganger i sekundet. 
+    int analog_verdi=0;                                                             // Lokal variabel.
+    for(int i = 0; i < 4; i++)                                          // En for løkke for å sjekke alle 4 sløyfene, og i for løkken er den en switch for å utføre riktig handling utfra hva analog_verdi er.
+    {
+        float a=sloyfe[i];                                              // Lokal float variabel som får verdien fra sløyfene for hver verdi i har.
+        if(a >= 0.30 && a <= 0.55) { analog_verdi = 1; }                            // Dersom alt i orden sett analog_verdi til 1.
+        else if(a >= 0.58 && a <= 0.62) { analog_verdi = 2; }        // Dersom R1 brutt sett analog_verdi til 2.
+        else if(a >= 0.64 && a <= 0.80) { analog_verdi = 3; }               // Dersom R2 brutt sett analog_verdi til 3.
+        else if(a < 0.25 || a >=0.88) { analog_verdi = 4; }                                             // Dersom brudd på leder eller begge motstandene sett analog_verdi til 4.
+ 
+        switch(analog_verdi) 
+        {
+            case 1: 
+            { // Dersom denne verdien er 1 gå inn her og utfør dette også gå ut av case 1 tilbake til for lokka.
+                
+                if(blink[i]==0 && led[i]==0) // Hvis det globale arrayet blink[i] og led[i] er av gå inn.
+                {
+                    if(i==0) { led[i]=1; }     // Dersom i=0 sett led[i] på. 
+                    else if(i==1) { led[i]=1; }// Dersom i=1 sett led[i] på.
+                    else if(i==2) { led[i]=1; }// Dersom i=2 sett led[i] på.
+                    else if(i==3) { led[i]=1; }// Dersom i=3 sett led[i] på.
+                }
+                break;// Ferdig med hva som er blitt bedt av den og avlutter case 1 går tilbake til for løkken.
+            }
+            case 2: 
+            {
+                // Dersom denne verdien er 2 gå inn her og utfør dette også gå ut av case 2 tilbake til for løkken.
+                blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
+                if(b[i+i]==0) 
+                {
+                    FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
+                    fprintf(fp, "\r\n Brudd i R1 i Sloyfe %d:  %s", i+1, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                    fclose(fp);//Stenger filen fp.
+                    b[i+i]=1;// Led på bargraf med element nr i+i blir satt til en for å indikere feil på R1 i denne sløyfen. Partall, altså b0, b2, b4 og b6.
+                }
+                break;//  Ferdig med hva som er blitt bedt av den og avlutter case 2 går tilbake til for løkken.
+            }
+            case 3: 
+            {
+                 // Dersom denne verdien er 3 gå inn her og utfør dette også gå ut av case 3 tilbake til for løkken.
+                blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
+                if(b[i+i+1]==0) 
+                {
+                    FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
+                    fprintf(fp, "\r\n Brudd i R2 i Sloyfe %d: %s", i+1, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
+                    fclose(fp);//Stenger filen fp.
+                    b[i+i+1]=1;// Led på bargraf med element nr i+i+1 blir satt til en for å indikere feil på R2 i denne sløyfen. Oddetall altså b1, b3, b5 og b7.
+                }
+                break;// Ferdig med hva som er blitt bedt av den og avlutter case 3 går tilbake til for løkken.
+            }
+            case 4: 
+            {
+               // Dersom denne verdien er 4 gå inn her og utfør dette også gå ut av case 4 tilbake til for løkken.
+                blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
+                if(b[i+i] == 0 || b[i+i+1] == 0) 
+                {
+                    FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
+                    if(a < 0.25){fprintf(fp, "\r\n Brudd i hele Sloyfe %d: %s", i+1, ctime(&seconds));}//Kun en beskjed som blir loggført med klokketid.
+                    else if(a >=0.88){fprintf(fp, "\r\n Brudd i R1 og R2 i Sloyfe %d: %s", i+1, ctime(&seconds));}//Kun en beskjed som blir loggført med klokketid.
+                    fclose(fp);//Stenger filen fp.
+                    b[i+i]=1;// Led på bargraf med element nr i+i blir satt til en for å indikere feil på R1 i denne sløyfen. Partall, altså b0, b2, b4 og b6.
+                    b[i+i+1]=1;// Led på bargraf med element nr i+i+1 blir satt til en for å indikere feil på R2 i denne sløyfen. Oddetall altså b1, b3, b5 og b7.
+                }
+                break;// Ferdig med hva som er blitt bedt av den og avlutter case 4 går tilbake til for løkken.
+            }
+        }
+    }
+}
\ No newline at end of file