Mappeoppgave 1. / Mbed 2 deprecated AlarmProg_cpp

Dependencies:   mbed

Committer:
nmlaastad
Date:
Thu Feb 12 13:49:58 2015 +0000
Revision:
0:9e26d3c8b2b1
Ferdig greier (men stygt p? slutten)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nmlaastad 0:9e26d3c8b2b1 1 #include "mbed.h"
nmlaastad 0:9e26d3c8b2b1 2 #include <vector>
nmlaastad 0:9e26d3c8b2b1 3 #include <string>
nmlaastad 0:9e26d3c8b2b1 4 #include <list>
nmlaastad 0:9e26d3c8b2b1 5 #include "Logger.h"
nmlaastad 0:9e26d3c8b2b1 6 #include "Alarm.h"
nmlaastad 0:9e26d3c8b2b1 7
nmlaastad 0:9e26d3c8b2b1 8 InterruptIn ServiceBryter(p15);
nmlaastad 0:9e26d3c8b2b1 9
nmlaastad 0:9e26d3c8b2b1 10 Logger GlobalLogger;
nmlaastad 0:9e26d3c8b2b1 11
nmlaastad 0:9e26d3c8b2b1 12 std::vector<Alarm*> alarmList;
nmlaastad 0:9e26d3c8b2b1 13
nmlaastad 0:9e26d3c8b2b1 14 Serial pc(USBTX, USBRX);
nmlaastad 0:9e26d3c8b2b1 15 Ticker DriftLoopTicker;
nmlaastad 0:9e26d3c8b2b1 16 DigitalOut NORMAL(p25);
nmlaastad 0:9e26d3c8b2b1 17 void DriftLoop(void);
nmlaastad 0:9e26d3c8b2b1 18 bool gAlarmAktiv = false;
nmlaastad 0:9e26d3c8b2b1 19
nmlaastad 0:9e26d3c8b2b1 20 void komandoTolker(char komando);
nmlaastad 0:9e26d3c8b2b1 21 void alarmOppsett();
nmlaastad 0:9e26d3c8b2b1 22
nmlaastad 0:9e26d3c8b2b1 23 void NullstillAlarm()
nmlaastad 0:9e26d3c8b2b1 24 {
nmlaastad 0:9e26d3c8b2b1 25 GlobalLogger.Logg("Alarmen ble deaktivert");
nmlaastad 0:9e26d3c8b2b1 26 for (int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 27 alarmList[i]->Reset();
nmlaastad 0:9e26d3c8b2b1 28 }
nmlaastad 0:9e26d3c8b2b1 29 gAlarmAktiv = false;
nmlaastad 0:9e26d3c8b2b1 30 }
nmlaastad 0:9e26d3c8b2b1 31 void enkeltstatus(int alarmNummer);
nmlaastad 0:9e26d3c8b2b1 32 void totalstatus();
nmlaastad 0:9e26d3c8b2b1 33 void resetstatus();
nmlaastad 0:9e26d3c8b2b1 34
nmlaastad 0:9e26d3c8b2b1 35 bool locked = true;
nmlaastad 0:9e26d3c8b2b1 36
nmlaastad 0:9e26d3c8b2b1 37 char s[256];
nmlaastad 0:9e26d3c8b2b1 38 void readString() {
nmlaastad 0:9e26d3c8b2b1 39 // Note: you need to actually read from the serial to clear the RX interrupt
nmlaastad 0:9e26d3c8b2b1 40
nmlaastad 0:9e26d3c8b2b1 41 int i = 0;
nmlaastad 0:9e26d3c8b2b1 42 while(i < 255) {
nmlaastad 0:9e26d3c8b2b1 43 s[i] = pc.getc();
nmlaastad 0:9e26d3c8b2b1 44 if (s[i] == 0x0D) {
nmlaastad 0:9e26d3c8b2b1 45 printf("\n\r");
nmlaastad 0:9e26d3c8b2b1 46 s[i] = '\0';
nmlaastad 0:9e26d3c8b2b1 47 break;
nmlaastad 0:9e26d3c8b2b1 48 }
nmlaastad 0:9e26d3c8b2b1 49 printf("%c", s[i]);
nmlaastad 0:9e26d3c8b2b1 50 i++;
nmlaastad 0:9e26d3c8b2b1 51 }
nmlaastad 0:9e26d3c8b2b1 52
nmlaastad 0:9e26d3c8b2b1 53 bool riktigPass = true;
nmlaastad 0:9e26d3c8b2b1 54 char pass[8] = "passord";
nmlaastad 0:9e26d3c8b2b1 55 for (int i = 0; i < 8; i++) {
nmlaastad 0:9e26d3c8b2b1 56 if (pass[i] != s[i])
nmlaastad 0:9e26d3c8b2b1 57 riktigPass = false;
nmlaastad 0:9e26d3c8b2b1 58 }
nmlaastad 0:9e26d3c8b2b1 59 //printf("%s\n\r", s);
nmlaastad 0:9e26d3c8b2b1 60 if (!locked) {
nmlaastad 0:9e26d3c8b2b1 61 komandoTolker(s[0]);
nmlaastad 0:9e26d3c8b2b1 62 }
nmlaastad 0:9e26d3c8b2b1 63 else if (riktigPass == true) {
nmlaastad 0:9e26d3c8b2b1 64 locked = false;
nmlaastad 0:9e26d3c8b2b1 65 printf("Alarm er naa ulaast\n\r");
nmlaastad 0:9e26d3c8b2b1 66 }
nmlaastad 0:9e26d3c8b2b1 67 else
nmlaastad 0:9e26d3c8b2b1 68 printf("Ugyldig passord\n\r");
nmlaastad 0:9e26d3c8b2b1 69
nmlaastad 0:9e26d3c8b2b1 70 }
nmlaastad 0:9e26d3c8b2b1 71
nmlaastad 0:9e26d3c8b2b1 72 void komandoTolker(char komando)
nmlaastad 0:9e26d3c8b2b1 73 {
nmlaastad 0:9e26d3c8b2b1 74 //char komando;
nmlaastad 0:9e26d3c8b2b1 75 //pc.scanf("%s", &komando);
nmlaastad 0:9e26d3c8b2b1 76 //Liste over komandoer:
nmlaastad 0:9e26d3c8b2b1 77 //Totalstatus - skriver ut status på alle soner
nmlaastad 0:9e26d3c8b2b1 78 //Sone# staus -skriver ut status på enkeltsone
nmlaastad 0:9e26d3c8b2b1 79 if(komando == 't') {
nmlaastad 0:9e26d3c8b2b1 80 printf("Totaloversikt:\n\r");
nmlaastad 0:9e26d3c8b2b1 81 totalstatus();
nmlaastad 0:9e26d3c8b2b1 82 }
nmlaastad 0:9e26d3c8b2b1 83 else if (komando == '1')
nmlaastad 0:9e26d3c8b2b1 84 enkeltstatus(1);
nmlaastad 0:9e26d3c8b2b1 85 else if (komando == '2')
nmlaastad 0:9e26d3c8b2b1 86 enkeltstatus(2);
nmlaastad 0:9e26d3c8b2b1 87 else if (komando == '3')
nmlaastad 0:9e26d3c8b2b1 88 enkeltstatus(3);
nmlaastad 0:9e26d3c8b2b1 89 else if (komando == '4')
nmlaastad 0:9e26d3c8b2b1 90 enkeltstatus(4);
nmlaastad 0:9e26d3c8b2b1 91 else if (komando == '5')
nmlaastad 0:9e26d3c8b2b1 92 enkeltstatus(5);
nmlaastad 0:9e26d3c8b2b1 93 else if (komando == '6')
nmlaastad 0:9e26d3c8b2b1 94 enkeltstatus(6);
nmlaastad 0:9e26d3c8b2b1 95 else if (komando == '7')
nmlaastad 0:9e26d3c8b2b1 96 enkeltstatus(7);
nmlaastad 0:9e26d3c8b2b1 97 else if (komando == '8')
nmlaastad 0:9e26d3c8b2b1 98 enkeltstatus(8);
nmlaastad 0:9e26d3c8b2b1 99 else if (komando == 'r') {
nmlaastad 0:9e26d3c8b2b1 100 NullstillAlarm();
nmlaastad 0:9e26d3c8b2b1 101 printf("Alarm resatt\n\r");
nmlaastad 0:9e26d3c8b2b1 102 resetstatus();
nmlaastad 0:9e26d3c8b2b1 103 }
nmlaastad 0:9e26d3c8b2b1 104 else if (komando == 'p') {
nmlaastad 0:9e26d3c8b2b1 105 locked = true;
nmlaastad 0:9e26d3c8b2b1 106 printf("Enheten er naa passordbeskyttet\n\r");
nmlaastad 0:9e26d3c8b2b1 107 }
nmlaastad 0:9e26d3c8b2b1 108 else if (komando == 'h') {
nmlaastad 0:9e26d3c8b2b1 109 printf("Skriv \"t\" for totaloversikt\n\r");
nmlaastad 0:9e26d3c8b2b1 110 printf("Skriv et tall mellom 1 og 8 for enkelt alarmer\n\r");
nmlaastad 0:9e26d3c8b2b1 111 printf("Skriv \"r\" for aa resette alarm\n\r");
nmlaastad 0:9e26d3c8b2b1 112 printf("Skriv \"p\" for aa aktivere passordbeskyttelse\n\r");
nmlaastad 0:9e26d3c8b2b1 113 }
nmlaastad 0:9e26d3c8b2b1 114 else
nmlaastad 0:9e26d3c8b2b1 115 printf("Ugyldig komando: Trykk \"h\" for hjelp\n\r");
nmlaastad 0:9e26d3c8b2b1 116
nmlaastad 0:9e26d3c8b2b1 117 }
nmlaastad 0:9e26d3c8b2b1 118
nmlaastad 0:9e26d3c8b2b1 119 void enkeltstatus (int alarmNummer)
nmlaastad 0:9e26d3c8b2b1 120 {
nmlaastad 0:9e26d3c8b2b1 121 printf("Alarm %d er: ", alarmNummer);
nmlaastad 0:9e26d3c8b2b1 122 if (alarmList[alarmNummer - 1]->AlarmTest() == true) {
nmlaastad 0:9e26d3c8b2b1 123 printf("Aktiv\n\r");
nmlaastad 0:9e26d3c8b2b1 124 }
nmlaastad 0:9e26d3c8b2b1 125 else {
nmlaastad 0:9e26d3c8b2b1 126 printf("Inaktiv\n\r");
nmlaastad 0:9e26d3c8b2b1 127 }
nmlaastad 0:9e26d3c8b2b1 128 }
nmlaastad 0:9e26d3c8b2b1 129
nmlaastad 0:9e26d3c8b2b1 130
nmlaastad 0:9e26d3c8b2b1 131 void totalstatus()
nmlaastad 0:9e26d3c8b2b1 132 {
nmlaastad 0:9e26d3c8b2b1 133 for(int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 134 printf("Alarm %d er: ", i + 1);
nmlaastad 0:9e26d3c8b2b1 135 if (alarmList[i]->AlarmTest() == true) {
nmlaastad 0:9e26d3c8b2b1 136 printf("Aktiv\n\r");
nmlaastad 0:9e26d3c8b2b1 137 }
nmlaastad 0:9e26d3c8b2b1 138 else {
nmlaastad 0:9e26d3c8b2b1 139 printf("Inaktiv\n\r");
nmlaastad 0:9e26d3c8b2b1 140 }
nmlaastad 0:9e26d3c8b2b1 141 }
nmlaastad 0:9e26d3c8b2b1 142 }
nmlaastad 0:9e26d3c8b2b1 143
nmlaastad 0:9e26d3c8b2b1 144 void resetstatus()
nmlaastad 0:9e26d3c8b2b1 145 {
nmlaastad 0:9e26d3c8b2b1 146 bool ingenAlarmerInaktiv = true;
nmlaastad 0:9e26d3c8b2b1 147 for(int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 148 if (alarmList[i]->AlarmTest() == true) {
nmlaastad 0:9e26d3c8b2b1 149 printf("Alarm %d er: Aktiv\n\r", i+1);
nmlaastad 0:9e26d3c8b2b1 150 ingenAlarmerInaktiv = false;
nmlaastad 0:9e26d3c8b2b1 151 }
nmlaastad 0:9e26d3c8b2b1 152 }
nmlaastad 0:9e26d3c8b2b1 153 if (ingenAlarmerInaktiv == true)
nmlaastad 0:9e26d3c8b2b1 154 printf("Normal drift\n\r");
nmlaastad 0:9e26d3c8b2b1 155 }
nmlaastad 0:9e26d3c8b2b1 156
nmlaastad 0:9e26d3c8b2b1 157 int main()
nmlaastad 0:9e26d3c8b2b1 158 {
nmlaastad 0:9e26d3c8b2b1 159 alarmOppsett();
nmlaastad 0:9e26d3c8b2b1 160
nmlaastad 0:9e26d3c8b2b1 161 ServiceBryter.rise(&NullstillAlarm);
nmlaastad 0:9e26d3c8b2b1 162 pc.attach(&readString);
nmlaastad 0:9e26d3c8b2b1 163 DriftLoopTicker.attach(&DriftLoop, 0.05);
nmlaastad 0:9e26d3c8b2b1 164
nmlaastad 0:9e26d3c8b2b1 165 while(1) {
nmlaastad 0:9e26d3c8b2b1 166 for (int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 167 if (alarmList[i]->AlarmTest()) {
nmlaastad 0:9e26d3c8b2b1 168 alarmList[i]->LEDSet(1);
nmlaastad 0:9e26d3c8b2b1 169 gAlarmAktiv = true;
nmlaastad 0:9e26d3c8b2b1 170 }
nmlaastad 0:9e26d3c8b2b1 171 //else
nmlaastad 0:9e26d3c8b2b1 172 //alarmList[i]->LEDSet(0);
nmlaastad 0:9e26d3c8b2b1 173 }
nmlaastad 0:9e26d3c8b2b1 174 //printf("\n\r%f", alarmList[0]->AlarmVoltage());
nmlaastad 0:9e26d3c8b2b1 175 wait(0.2);
nmlaastad 0:9e26d3c8b2b1 176 }
nmlaastad 0:9e26d3c8b2b1 177 }
nmlaastad 0:9e26d3c8b2b1 178
nmlaastad 0:9e26d3c8b2b1 179 void DriftLoop(void)
nmlaastad 0:9e26d3c8b2b1 180 {
nmlaastad 0:9e26d3c8b2b1 181 if (gAlarmAktiv)
nmlaastad 0:9e26d3c8b2b1 182 NORMAL = !NORMAL;
nmlaastad 0:9e26d3c8b2b1 183 else
nmlaastad 0:9e26d3c8b2b1 184 NORMAL = 0;
nmlaastad 0:9e26d3c8b2b1 185 }
nmlaastad 0:9e26d3c8b2b1 186
nmlaastad 0:9e26d3c8b2b1 187 void alarmOppsett()
nmlaastad 0:9e26d3c8b2b1 188 {
nmlaastad 0:9e26d3c8b2b1 189 Alarm * Sone1 = new Alarm("Sone1", p17, LED1);
nmlaastad 0:9e26d3c8b2b1 190 alarmList.push_back(Sone1);
nmlaastad 0:9e26d3c8b2b1 191 Alarm * Sone2 = new Alarm("Sone2", p17, LED2);
nmlaastad 0:9e26d3c8b2b1 192 alarmList.push_back(Sone2);
nmlaastad 0:9e26d3c8b2b1 193 Alarm * Sone3 = new Alarm("Sone3", p18, LED3);
nmlaastad 0:9e26d3c8b2b1 194 alarmList.push_back(Sone3);
nmlaastad 0:9e26d3c8b2b1 195 Alarm * Sone4 = new Alarm("Sone4", p18, LED4);
nmlaastad 0:9e26d3c8b2b1 196 alarmList.push_back(Sone4);
nmlaastad 0:9e26d3c8b2b1 197 Alarm * Sone5 = new Alarm("Sone5", p19, p21);
nmlaastad 0:9e26d3c8b2b1 198 alarmList.push_back(Sone5);
nmlaastad 0:9e26d3c8b2b1 199 Alarm * Sone6 = new Alarm("Sone6", p19, p22);
nmlaastad 0:9e26d3c8b2b1 200 alarmList.push_back(Sone6);
nmlaastad 0:9e26d3c8b2b1 201 Alarm * Sone7 = new Alarm("Sone7", p20, p23);
nmlaastad 0:9e26d3c8b2b1 202 alarmList.push_back(Sone7);
nmlaastad 0:9e26d3c8b2b1 203 Alarm * Sone8 = new Alarm("Sone8", p20, p24);
nmlaastad 0:9e26d3c8b2b1 204 alarmList.push_back(Sone8);
nmlaastad 0:9e26d3c8b2b1 205
nmlaastad 0:9e26d3c8b2b1 206 for (int i = 4; i < alarmList.size(); i++) { alarmList[i]->LEDInverted(true); }
nmlaastad 0:9e26d3c8b2b1 207
nmlaastad 0:9e26d3c8b2b1 208 for (int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 209 if (i & 1)
nmlaastad 0:9e26d3c8b2b1 210 alarmList[i]->AlarmVoltageAdd(0.6166);
nmlaastad 0:9e26d3c8b2b1 211 else
nmlaastad 0:9e26d3c8b2b1 212 alarmList[i]->AlarmVoltageAdd(0.5);
nmlaastad 0:9e26d3c8b2b1 213 alarmList[i]->AlarmVoltageAdd(0.3815);
nmlaastad 0:9e26d3c8b2b1 214 for (int j = 1; j < 8; j++) { //får ledene til å blinke (fancy oppstart)
nmlaastad 0:9e26d3c8b2b1 215 alarmList[i]->LEDSet(j & 1);
nmlaastad 0:9e26d3c8b2b1 216 wait(0.01);
nmlaastad 0:9e26d3c8b2b1 217 }
nmlaastad 0:9e26d3c8b2b1 218 wait(0.01);
nmlaastad 0:9e26d3c8b2b1 219 }
nmlaastad 0:9e26d3c8b2b1 220 for (int i = 0; i < alarmList.size(); i++) {
nmlaastad 0:9e26d3c8b2b1 221 alarmList[i]->LEDSet(0);
nmlaastad 0:9e26d3c8b2b1 222 }
nmlaastad 0:9e26d3c8b2b1 223 }