programmering / Mbed 2 deprecated mbed_blinkyrfferfrdfrf

Dependencies:   mbed

Committer:
datx98
Date:
Tue Mar 06 10:13:16 2018 +0000
Revision:
0:c1d82c87628a
Child:
1:499bd5b83b45
kk

Who changed what in which revision?

UserRevisionLine numberNew contents of line
datx98 0:c1d82c87628a 1 #include "mbed.h"
datx98 0:c1d82c87628a 2 #include <time.h>
datx98 0:c1d82c87628a 3
datx98 0:c1d82c87628a 4 AnalogIn sloyfe[4] = {p17, p18, p19, p20}; // Analoge inngangene, *sløyfene*
datx98 0:c1d82c87628a 5 DigitalOut led[4] = {LED1, LED2, LED3, LED4}; // Led til alarm blinking ved feil.
datx98 0:c1d82c87628a 6 DigitalOut b[8] = {p21, p22, p23, p24, p25, p26, p27, p28}; // Status ledbar på sensorene i sløyfene.
datx98 0:c1d82c87628a 7 DigitalIn sb(p16); // Service bryter.
datx98 0:c1d82c87628a 8 Serial pc(USBTX, USBRX); //PC komunikasjon
datx98 0:c1d82c87628a 9 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.
datx98 0:c1d82c87628a 10 int blink[4]= {0, 0, 0, 0}; // Global variabel med 4 elementer. Hvert element styrer sin egen led!
datx98 0:c1d82c87628a 11 int amount_faild = 0; // En variabel for å telle antall ganger feil inntastet passord.
datx98 0:c1d82c87628a 12 void alarm_actived(); // Sjekker hva verdien på de analoge inngangene er og og utfører en case ut fra det for hver sløyfe.
datx98 0:c1d82c87628a 13 void service(); // Funksjon for resetting av anlegge. Anlegget blir satt i vedlikeholdsmodus med null feil.
datx98 0:c1d82c87628a 14 void alblink(); // Blinke funksjonen.
datx98 0:c1d82c87628a 15 char passord[5] = {'5','5', '5', '5', '5'}; // Passordet.
datx98 0:c1d82c87628a 16 int check_password1(); // Funksjon for å sjekke om inntastet passord er riktig.
datx98 0:c1d82c87628a 17 void User_Of(int); // Valg menyen der User_Of velger et ønske.
datx98 0:c1d82c87628a 18 void Dato_timer(); //Klokke funskjonen.
datx98 0:c1d82c87628a 19 LocalFileSystem local("local"); // Fillogging
datx98 0:c1d82c87628a 20
datx98 0:c1d82c87628a 21 int main()
datx98 0:c1d82c87628a 22 {
datx98 0:c1d82c87628a 23 set_time(1519919737); // vasjon 27 feb
datx98 0:c1d82c87628a 24 while(1)
datx98 0:c1d82c87628a 25 {
datx98 0:c1d82c87628a 26 pc.printf("Velkommen\n"); // Velkomst beskjed.
datx98 0:c1d82c87628a 27 Dato_timer(); // Oppkaller klokke funksjonen for å sjekke om tiden er riktig.
datx98 0:c1d82c87628a 28 int x = check_password1(); // Dersom passord er riktig blir det returnet en ener og tilegnet til variabelen x.
datx98 0:c1d82c87628a 29 User_Of(x); // Valg funskjonen får verdien 1 fra varabelen x.
datx98 0:c1d82c87628a 30 }
datx98 0:c1d82c87628a 31 }
datx98 0:c1d82c87628a 32
datx98 0:c1d82c87628a 33 void Dato_timer()
datx98 0:c1d82c87628a 34 {
datx98 0:c1d82c87628a 35 time_t seconds = time(NULL); // Returnerer tiden lagret i time_t i sekunder.
datx98 0:c1d82c87628a 36 pc.printf("Mbed klokka er naa: %s", ctime(&seconds)); // Viser hva tiden er, ctime tolker det til leselig tid for oss.
datx98 0:c1d82c87628a 37 pc.printf("\n\n\n");
datx98 0:c1d82c87628a 38 pc.printf("Hvis det ikke stemmer tast 0 ellers tast noe annet\n", ctime(&seconds)); //Kun info.
datx98 0:c1d82c87628a 39 if (pc.getc() == '0') // Sjekk om inntastet tegn er 0.
datx98 0:c1d82c87628a 40 {
datx98 0:c1d82c87628a 41 struct tm t; //Pakker all info inn og sender det til klokkefunksjonen.
datx98 0:c1d82c87628a 42 pc.printf("Tast inn dato og klokkeslett:\n");
datx98 0:c1d82c87628a 43 pc.printf("YYYY MM DD HH MM SS[enter]\n");
datx98 0:c1d82c87628a 44 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.
datx98 0:c1d82c87628a 45
datx98 0:c1d82c87628a 46 t.tm_year = t.tm_year - 2020; // Gjør om til riktig år.
datx98 0:c1d82c87628a 47 t.tm_mon = t.tm_mon - 1; //Gjør om til riktig måned.
datx98 0:c1d82c87628a 48 set_time(mktime(&t)); // Setter nye tiden til intastet tid.
datx98 0:c1d82c87628a 49
datx98 0:c1d82c87628a 50 }
datx98 0:c1d82c87628a 51
datx98 0:c1d82c87628a 52 }
datx98 0:c1d82c87628a 53
datx98 0:c1d82c87628a 54 void User_Of(int riktigpassord) // meny funksjonen.
datx98 0:c1d82c87628a 55 {
datx98 0:c1d82c87628a 56 servic.attach(&service, 60); // Tikker funksjon som service blir tilknyttet og utføres 2 ganger i sekundet.
datx98 0:c1d82c87628a 57 while(riktigpassord == 1) // Hvis verdien fra x er 1 gå inn her.
datx98 0:c1d82c87628a 58 {
datx98 0:c1d82c87628a 59 time_t seconds = time(0);
datx98 0:c1d82c87628a 60 pc.printf("For start tast 5: \n\t"); // Valg meny.
datx98 0:c1d82c87628a 61 pc.printf("For stopp tast 6:\n\t");
datx98 0:c1d82c87628a 62 pc.printf("For reset tast 7:\n\t");
datx98 0:c1d82c87628a 63 pc.printf("For status av hele anlegget eller sloyfer tast 4:\n\t");
datx98 0:c1d82c87628a 64 pc.printf("For utlogging tast 8:\n\t");
datx98 0:c1d82c87628a 65
datx98 0:c1d82c87628a 66 servic.attach(&service, 5);
datx98 0:c1d82c87628a 67 switch(pc.getc()) // Innhenter inntrykk fra User_Of.
datx98 0:c1d82c87628a 68 {
datx98 0:c1d82c87628a 69 case '5': // Dersom intastet tegn er 1, utfør dette.
datx98 0:c1d82c87628a 70 {
datx98 0:c1d82c87628a 71 FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 72 fprintf(fp, "\r\n Systemet paa: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 73 fclose(fp); //Stenger filen fp.
datx98 0:c1d82c87628a 74 pc.printf("System paa. \n\n");//Info til User_Of.
datx98 0:c1d82c87628a 75 system_paa.attach(&alarm_actived, 2);// Tikker funksjon som alarm aktiv blir tilknyttet og skal utføres annen hvert sekund.
datx98 0:c1d82c87628a 76 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 77 }
datx98 0:c1d82c87628a 78 case '6':
datx98 0:c1d82c87628a 79 {
datx98 0:c1d82c87628a 80 FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 81 fprintf(fp," Systemet stoppet: %s\r\n", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 82 fclose(fp); //Stenger filen fp.
datx98 0:c1d82c87628a 83 pc.printf("System stoppet. \n\n");
datx98 0:c1d82c87628a 84 system_paa.detach(); //Fra kobler funskjonen system_paa fra tickeren.
datx98 0:c1d82c87628a 85 for(int m=0; m < 4; m++){ blink[m]=0; led[m]=0;}
datx98 0:c1d82c87628a 86 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 87 }
datx98 0:c1d82c87628a 88 case '7':
datx98 0:c1d82c87628a 89 {
datx98 0:c1d82c87628a 90 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 91 fprintf(fp, "\r\n Systemet resatt: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 92 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 93 pc.printf("\n\n System resatt. \n\n");
datx98 0:c1d82c87628a 94 int m=0;
datx98 0:c1d82c87628a 95 while(m < 4)
datx98 0:c1d82c87628a 96 { // Dersom denne lokale variabelen er mindre enn 4 hold deg i denne løkka.
datx98 0:c1d82c87628a 97 blink[m]=0; // Dersom service bryter er 1 reset alarm.
datx98 0:c1d82c87628a 98 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.
datx98 0:c1d82c87628a 99 led[m]=0;// Sett alle led[] til 0.
datx98 0:c1d82c87628a 100 m++;// Inkrementer denne lokale variabelen og repeter.
datx98 0:c1d82c87628a 101 }
datx98 0:c1d82c87628a 102 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 103 }
datx98 0:c1d82c87628a 104 case '4':
datx98 0:c1d82c87628a 105 {
datx98 0:c1d82c87628a 106 pc.printf("\n For status paa hele anlegget tast 1: \n");
datx98 0:c1d82c87628a 107 pc.printf("\n For status paa enkelt sloyfer tast 2: \n\n\t\t");
datx98 0:c1d82c87628a 108 switch(getchar())//Ny switch case i case 4 for status valg.
datx98 0:c1d82c87628a 109 {
datx98 0:c1d82c87628a 110 case '5':
datx98 0:c1d82c87628a 111 {
datx98 0:c1d82c87628a 112 for(int m=0; m<4; m++)
datx98 0:c1d82c87628a 113 {
datx98 0:c1d82c87628a 114 float a=sloyfe[m];// Lokal float variabel som får verdien fra sløyfene for hver verdi i har.
datx98 0:c1d82c87628a 115 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.
datx98 0:c1d82c87628a 116 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.
datx98 0:c1d82c87628a 117 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.
datx98 0:c1d82c87628a 118 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.
datx98 0:c1d82c87628a 119 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.
datx98 0:c1d82c87628a 120 }
datx98 0:c1d82c87628a 121 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 122 }
datx98 0:c1d82c87628a 123 case '6':
datx98 0:c1d82c87628a 124 {
datx98 0:c1d82c87628a 125 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.
datx98 0:c1d82c87628a 126 int x = getchar();
datx98 0:c1d82c87628a 127 if(x<50 || x>60){pc.printf("\n Ugyldig valg! \n"); break;};
datx98 0:c1d82c87628a 128 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.
datx98 0:c1d82c87628a 129 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.
datx98 0:c1d82c87628a 130 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.
datx98 0:c1d82c87628a 131 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.
datx98 0:c1d82c87628a 132 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.
datx98 0:c1d82c87628a 133 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.
datx98 0:c1d82c87628a 134 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 135 }
datx98 0:c1d82c87628a 136 default: //Dersom et annet tall enn hva som er spesifisert printes denne beskjeden ut.
datx98 0:c1d82c87628a 137 {
datx98 0:c1d82c87628a 138 printf("\n Ugyldig valg.\n");
datx98 0:c1d82c87628a 139 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 140 }
datx98 0:c1d82c87628a 141 } break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 142 }
datx98 0:c1d82c87628a 143 case '8':
datx98 0:c1d82c87628a 144 {
datx98 0:c1d82c87628a 145 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 146 fprintf(fp, "\r\n Logget av systemet: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 147 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 148 pc.printf("\n\n\n\n\n\n\n\n\t\t\t\t Farvel.\n\n\n\n\n\n\n\n\n");
datx98 0:c1d82c87628a 149 riktigpassord=0;// Setter denne variabelen til 0 for at neste innlogging kun skjer hvis riktig passord er skrevet.
datx98 0:c1d82c87628a 150 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 151 }
datx98 0:c1d82c87628a 152 case '0':
datx98 0:c1d82c87628a 153 {
datx98 0:c1d82c87628a 154 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for lesing.
datx98 0:c1d82c87628a 155 /*if (fp == NULL) // Dette er for å gi beskjed om at filen ikke klarte å åpne.
datx98 0:c1d82c87628a 156 {
datx98 0:c1d82c87628a 157 pc.printf
datx98 0:c1d82c87628a 158 exit(1);
datx98 0:c1d82c87628a 159 }*/// Dette har vi valgt å eksludere da ved testing er det tydelig at filen åpner å lukker seg på rikitg måte.
datx98 0:c1d82c87628a 160 int c;
datx98 0:c1d82c87628a 161 if (fp) //En test for å se om filen er åpen!
datx98 0:c1d82c87628a 162 {
datx98 0:c1d82c87628a 163 while ((c = getc(fp)) != EOF)// Så fremt det er flere tegn i fila forbli i while løkka.
datx98 0:c1d82c87628a 164 {
datx98 0:c1d82c87628a 165 pc.putc(c);// Printer ut tegn for tegn fra filen til TeraTerm.
datx98 0:c1d82c87628a 166 }
datx98 0:c1d82c87628a 167 }
datx98 0:c1d82c87628a 168 fclose(fp);//Ferdig med lesing av filen og lukker filen.
datx98 0:c1d82c87628a 169 break;//Breaker her for at casen skal avslutte og ingen caser videre blir utført uten at det er blidt bedt om det.
datx98 0:c1d82c87628a 170 }
datx98 0:c1d82c87628a 171 default: //Dersom et annet tall enn hva som er spesifisert printes denne beskjeden ut.
datx98 0:c1d82c87628a 172 {
datx98 0:c1d82c87628a 173 printf("\n Ugyldig valg.\n");
datx98 0:c1d82c87628a 174 break;//Det er valgfritt å breake her da default blir utført og programmet fortsetter videre. Men vi tar det med for det.
datx98 0:c1d82c87628a 175 }
datx98 0:c1d82c87628a 176 }
datx98 0:c1d82c87628a 177 }
datx98 0:c1d82c87628a 178 }
datx98 0:c1d82c87628a 179 int check_password1()
datx98 0:c1d82c87628a 180 {
datx98 0:c1d82c87628a 181 time_t seconds = time(NULL); // Henter tiden lagret i time_t i sekunder for videre bruk.
datx98 0:c1d82c87628a 182 pc.printf("\n Skriv inn passord for adgang til alarmsystemet: ");
datx98 0:c1d82c87628a 183 int riktigpass=0; int n=0; char sjekk[4];// Lokale varable blir opprettet for bruk i denne funksjonen.
datx98 0:c1d82c87628a 184 while(1)
datx98 0:c1d82c87628a 185 {
datx98 0:c1d82c87628a 186 if(pc.readable() && n < 4) // Dersom noe blir tastet på tastauret gå inn.
datx98 0:c1d82c87628a 187 {
datx98 0:c1d82c87628a 188 sjekk[n++] = pc.getc();// Lagre inntastet tegn i sjekk arrayet i element n og inkrementer n med 1.
datx98 0:c1d82c87628a 189 if(n == 4) { break; }// Dersom n er lik 4 break ut av while løkken.
datx98 0:c1d82c87628a 190 }
datx98 0:c1d82c87628a 191 }
datx98 0:c1d82c87628a 192 for(n=0; n<4; n++) { if(sjekk[n]==passord[n]) { riktigpass++; } }// En for løkke for å sammenligne hvert intastet tegn med passord tegnene.
datx98 0:c1d82c87628a 193
datx98 0:c1d82c87628a 194 if(riktigpass == 4) // Dersom passordet er riktig gå inn.
datx98 0:c1d82c87628a 195 {
datx98 0:c1d82c87628a 196 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 197 fprintf(fp, "\r\n Riktig passord inntastet: %s", ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 198 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 199 pc.printf("\n Riktig passord.\n\n");
datx98 0:c1d82c87628a 200 amount_faild=0;
datx98 0:c1d82c87628a 201 return 1;
datx98 0:c1d82c87628a 202 }
datx98 0:c1d82c87628a 203 else
datx98 0:c1d82c87628a 204 { // Dersom passordet er feil gå inn her.
datx98 0:c1d82c87628a 205 amount_faild++;
datx98 0:c1d82c87628a 206 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 207 fprintf(fp, "\r\n Feil passord inntastet, %d ganger: %s", amount_faild, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 208 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 209 pc.printf("\n\nFeil Passord, prov igjen!\n\n"); }
datx98 0:c1d82c87628a 210 return 0;
datx98 0:c1d82c87628a 211 }
datx98 0:c1d82c87628a 212
datx98 0:c1d82c87628a 213 void alblink()//Blinke funksjon for sløyfene.
datx98 0:c1d82c87628a 214 {
datx98 0:c1d82c87628a 215 int n;// Lokal variabel
datx98 0:c1d82c87628a 216 for(n=0; n < 5; n++)
datx98 0:c1d82c87628a 217 { // For løkke for å sjekke om feil er tilstedet eller ikke.
datx98 0:c1d82c87628a 218 if(blink[n]==1) { led[n] = !led[n]; } // Dersom feil på de forskjellige sløyfene blink med riktig led!
datx98 0:c1d82c87628a 219 }
datx98 0:c1d82c87628a 220 }
datx98 0:c1d82c87628a 221
datx98 0:c1d82c87628a 222 void service()// service bryter funksjon.
datx98 0:c1d82c87628a 223 {
datx98 0:c1d82c87628a 224 time_t seconds = time(NULL); // Henter tiden lagret i time_t i sekunder for videre bruk.
datx98 0:c1d82c87628a 225 if(sb ==1)
datx98 0:c1d82c87628a 226 { // Hvis service bryter aktiv gå inn.
datx98 0:c1d82c87628a 227 FILE *fp = fopen("/local/SYSTEMLOG.txt", "r"); // File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 228 fprintf(fp, "\r\n Service bryter aktivert: %s", ctime(&seconds)); //Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 229 fclose(fp); //Stenger filen fp.
datx98 0:c1d82c87628a 230
datx98 0:c1d82c87628a 231 pc.printf("\n\n Vedlikeholdsarbeid paa alegget. \n\n\n\n");// Fortell User_Of at anlegge er i vedlikeholdsmodus.
datx98 0:c1d82c87628a 232 int m=0; //Lokal variabel.
datx98 0:c1d82c87628a 233 while(sb==1)
datx98 0:c1d82c87628a 234 { // Såfremt service bryteren er aktiv holdes programmet i denne while løkken.
datx98 0:c1d82c87628a 235 while(m < 2)
datx98 0:c1d82c87628a 236 { // Dersom denne lokale variabelen er mindre enn 4 hold deg i denne løkka.
datx98 0:c1d82c87628a 237 blink[m] = 0; // Dersom service bryter er 1 reset alarm.
datx98 0:c1d82c87628a 238 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.
datx98 0:c1d82c87628a 239 led[m] = 0; // Sett alle led[] til 0.
datx98 0:c1d82c87628a 240 m++; // Inkrementer denne lokale variabelen og repeter.
datx98 0:c1d82c87628a 241 }
datx98 0:c1d82c87628a 242 }
datx98 0:c1d82c87628a 243 system_paa.detach(); // Frakobler system_paa fra ticker.
datx98 0:c1d82c87628a 244 pc.printf("\n\n Tast 1 for igangsetting \n\n");
datx98 0:c1d82c87628a 245 }
datx98 0:c1d82c87628a 246 }
datx98 0:c1d82c87628a 247
datx98 0:c1d82c87628a 248 void alarm_actived()// .
datx98 0:c1d82c87628a 249 {
datx98 0:c1d82c87628a 250 time_t seconds = time(NULL); // Henter tiden lagret i time_t i sekunder for videre bruk.
datx98 0:c1d82c87628a 251 alarm.attach(&alblink, 0.1); // Tilkobler alblink funksjonen til ticker ved navnet alarm og denne funksjoenen kjøres 10 ganger i sekundet.
datx98 0:c1d82c87628a 252 int analog_verdi=0; // Lokal variabel.
datx98 0:c1d82c87628a 253 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.
datx98 0:c1d82c87628a 254 {
datx98 0:c1d82c87628a 255 float a=sloyfe[i]; // Lokal float variabel som får verdien fra sløyfene for hver verdi i har.
datx98 0:c1d82c87628a 256 if(a >= 0.30 && a <= 0.55) { analog_verdi = 1; } // Dersom alt i orden sett analog_verdi til 1.
datx98 0:c1d82c87628a 257 else if(a >= 0.58 && a <= 0.62) { analog_verdi = 2; } // Dersom R1 brutt sett analog_verdi til 2.
datx98 0:c1d82c87628a 258 else if(a >= 0.64 && a <= 0.80) { analog_verdi = 3; } // Dersom R2 brutt sett analog_verdi til 3.
datx98 0:c1d82c87628a 259 else if(a < 0.25 || a >=0.88) { analog_verdi = 4; } // Dersom brudd på leder eller begge motstandene sett analog_verdi til 4.
datx98 0:c1d82c87628a 260
datx98 0:c1d82c87628a 261 switch(analog_verdi)
datx98 0:c1d82c87628a 262 {
datx98 0:c1d82c87628a 263 case 1:
datx98 0:c1d82c87628a 264 { // Dersom denne verdien er 1 gå inn her og utfør dette også gå ut av case 1 tilbake til for lokka.
datx98 0:c1d82c87628a 265
datx98 0:c1d82c87628a 266 if(blink[i]==0 && led[i]==0) // Hvis det globale arrayet blink[i] og led[i] er av gå inn.
datx98 0:c1d82c87628a 267 {
datx98 0:c1d82c87628a 268 if(i==0) { led[i]=1; } // Dersom i=0 sett led[i] på.
datx98 0:c1d82c87628a 269 else if(i==1) { led[i]=1; }// Dersom i=1 sett led[i] på.
datx98 0:c1d82c87628a 270 else if(i==2) { led[i]=1; }// Dersom i=2 sett led[i] på.
datx98 0:c1d82c87628a 271 else if(i==3) { led[i]=1; }// Dersom i=3 sett led[i] på.
datx98 0:c1d82c87628a 272 }
datx98 0:c1d82c87628a 273 break;// Ferdig med hva som er blitt bedt av den og avlutter case 1 går tilbake til for løkken.
datx98 0:c1d82c87628a 274 }
datx98 0:c1d82c87628a 275 case 2:
datx98 0:c1d82c87628a 276 {
datx98 0:c1d82c87628a 277 // Dersom denne verdien er 2 gå inn her og utfør dette også gå ut av case 2 tilbake til for løkken.
datx98 0:c1d82c87628a 278 blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
datx98 0:c1d82c87628a 279 if(b[i+i]==0)
datx98 0:c1d82c87628a 280 {
datx98 0:c1d82c87628a 281 FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 282 fprintf(fp, "\r\n Brudd i R1 i Sloyfe %d: %s", i+1, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 283 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 284 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.
datx98 0:c1d82c87628a 285 }
datx98 0:c1d82c87628a 286 break;// Ferdig med hva som er blitt bedt av den og avlutter case 2 går tilbake til for løkken.
datx98 0:c1d82c87628a 287 }
datx98 0:c1d82c87628a 288 case 3:
datx98 0:c1d82c87628a 289 {
datx98 0:c1d82c87628a 290 // Dersom denne verdien er 3 gå inn her og utfør dette også gå ut av case 3 tilbake til for løkken.
datx98 0:c1d82c87628a 291 blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
datx98 0:c1d82c87628a 292 if(b[i+i+1]==0)
datx98 0:c1d82c87628a 293 {
datx98 0:c1d82c87628a 294 FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 295 fprintf(fp, "\r\n Brudd i R2 i Sloyfe %d: %s", i+1, ctime(&seconds));//Kun en beskjed som blir loggført med klokketid.
datx98 0:c1d82c87628a 296 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 297 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.
datx98 0:c1d82c87628a 298 }
datx98 0:c1d82c87628a 299 break;// Ferdig med hva som er blitt bedt av den og avlutter case 3 går tilbake til for løkken.
datx98 0:c1d82c87628a 300 }
datx98 0:c1d82c87628a 301 case 4:
datx98 0:c1d82c87628a 302 {
datx98 0:c1d82c87628a 303 // Dersom denne verdien er 4 gå inn her og utfør dette også gå ut av case 4 tilbake til for løkken.
datx98 0:c1d82c87628a 304 blink[i]=1;// Blink[i] får verdien 1 og led[i] begynner å blinke.
datx98 0:c1d82c87628a 305 if(b[i+i] == 0 || b[i+i+1] == 0)
datx98 0:c1d82c87628a 306 {
datx98 0:c1d82c87628a 307 FILE *fp = fopen("/local/SYSTEMLOG.txt", "a");// File blir peket til fp og fp blir åpnet for skriving.
datx98 0:c1d82c87628a 308 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.
datx98 0:c1d82c87628a 309 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.
datx98 0:c1d82c87628a 310 fclose(fp);//Stenger filen fp.
datx98 0:c1d82c87628a 311 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.
datx98 0:c1d82c87628a 312 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.
datx98 0:c1d82c87628a 313 }
datx98 0:c1d82c87628a 314 break;// Ferdig med hva som er blitt bedt av den og avlutter case 4 går tilbake til for løkken.
datx98 0:c1d82c87628a 315 }
datx98 0:c1d82c87628a 316 }
datx98 0:c1d82c87628a 317 }
datx98 0:c1d82c87628a 318 }