Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 0:9e26d3c8b2b1, committed 2015-02-12
- Comitter:
- nmlaastad
- Date:
- Thu Feb 12 13:49:58 2015 +0000
- Commit message:
- Ferdig greier (men stygt p? slutten)
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Alarm.h Thu Feb 12 13:49:58 2015 +0000
@@ -0,0 +1,72 @@
+#include "mbed.h"
+#include <vector>
+#include <string>
+#include <list>
+#include "Logger.h"
+
+extern Logger GlobalLogger;
+
+class Alarm {
+private:
+ std::string alarmNavn;
+ std::vector<float> AlarmSpenninger;
+ AnalogIn port;
+ DigitalOut led;
+ float feilmargin;
+ bool LEDInvertStatus;
+ bool alarmLogged;
+
+public:
+ Alarm(std::string alarmNavn, PinName portIn, PinName ledOut)
+ : alarmNavn(alarmNavn), port(portIn), led(ledOut), feilmargin(0.05), LEDInvertStatus(false), alarmLogged(false)
+ {
+ }
+ ~Alarm()
+ {
+ }
+ void AlarmVoltageAdd(float spenning) {
+ AlarmSpenninger.push_back(spenning);
+ }
+ void AddCurrentAlarmVoltage(void) {
+ AlarmVoltageAdd(AlarmVoltage());
+ }
+ void AlarmVoltageCLearAll() {
+ AlarmSpenninger.clear();
+ }
+ float AlarmVoltage (void) {
+ return port.read();
+ }
+ void LEDSet(bool value) {
+ if (LEDInvertStatus) led.write(!value);
+ else led.write(value);
+ }
+ void LEDInverted(bool value) {
+ LEDInvertStatus = value;
+ }
+ bool AlarmTest() {
+ return test();
+ }
+ void Reset() {
+ LEDSet(0);
+ alarmLogged = false;
+ }
+
+
+private:
+ bool test() {
+ bool resultat = false;
+ float portSpenning = port.read();
+ for (int i = 0; i < AlarmSpenninger.size(); i++) {
+ if (portSpenning + feilmargin > AlarmSpenninger[i] && portSpenning - feilmargin < AlarmSpenninger[i]) {
+ resultat = true;
+ }
+ }
+ if (resultat && !alarmLogged) {
+ alarmLogged = true;
+ std::string melding = alarmNavn + " ble aktivert!";
+ GlobalLogger.Logg(melding);
+ }
+ return resultat;
+ }
+
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Logger.h Thu Feb 12 13:49:58 2015 +0000
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "mbed.h"
+#include <string>
+#include <ctime>
+
+LocalFileSystem local("local");
+
+class Logger
+{
+public:
+ Logger()
+ {
+ oppstartstid = time(NULL);
+ logFile = fopen("/local/Logg.txt", "a");
+ if (logFile == NULL) { // vis en error
+ return;
+ }
+ fprintf(logFile, "\nStarting up system\n");
+ fflush(logFile);
+ wait(0.1);
+ fclose(logFile);
+ }
+ ~Logger() {
+ if (logFile)
+ fclose(logFile);
+ }
+
+ void Logg(const std::string &melding)
+ {
+ logFile = fopen("/local/Logg.txt", "a");
+ if (logFile == NULL) { // vis en error
+ return;
+ }
+ int tid = time(NULL) - oppstartstid;
+ fprintf(logFile, "Tid: %d\t\t", tid);
+ fputs(melding.c_str(),logFile);
+ fputs("\n", logFile);
+ fflush(logFile);
+ wait(0.1);
+ fclose(logFile);
+ return;
+ }
+
+
+private:
+ FILE * logFile;
+ time_t oppstartstid;
+};
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Feb 12 13:49:58 2015 +0000
@@ -0,0 +1,223 @@
+#include "mbed.h"
+#include <vector>
+#include <string>
+#include <list>
+#include "Logger.h"
+#include "Alarm.h"
+
+InterruptIn ServiceBryter(p15);
+
+Logger GlobalLogger;
+
+std::vector<Alarm*> alarmList;
+
+Serial pc(USBTX, USBRX);
+Ticker DriftLoopTicker;
+DigitalOut NORMAL(p25);
+void DriftLoop(void);
+bool gAlarmAktiv = false;
+
+void komandoTolker(char komando);
+void alarmOppsett();
+
+void NullstillAlarm()
+{
+ GlobalLogger.Logg("Alarmen ble deaktivert");
+ for (int i = 0; i < alarmList.size(); i++) {
+ alarmList[i]->Reset();
+ }
+ gAlarmAktiv = false;
+}
+void enkeltstatus(int alarmNummer);
+void totalstatus();
+void resetstatus();
+
+bool locked = true;
+
+char s[256];
+void readString() {
+ // Note: you need to actually read from the serial to clear the RX interrupt
+
+ int i = 0;
+ while(i < 255) {
+ s[i] = pc.getc();
+ if (s[i] == 0x0D) {
+ printf("\n\r");
+ s[i] = '\0';
+ break;
+ }
+ printf("%c", s[i]);
+ i++;
+ }
+
+ bool riktigPass = true;
+ char pass[8] = "passord";
+ for (int i = 0; i < 8; i++) {
+ if (pass[i] != s[i])
+ riktigPass = false;
+ }
+ //printf("%s\n\r", s);
+ if (!locked) {
+ komandoTolker(s[0]);
+ }
+ else if (riktigPass == true) {
+ locked = false;
+ printf("Alarm er naa ulaast\n\r");
+ }
+ else
+ printf("Ugyldig passord\n\r");
+
+}
+
+void komandoTolker(char komando)
+{
+ //char komando;
+ //pc.scanf("%s", &komando);
+ //Liste over komandoer:
+ //Totalstatus - skriver ut status på alle soner
+ //Sone# staus -skriver ut status på enkeltsone
+ if(komando == 't') {
+ printf("Totaloversikt:\n\r");
+ totalstatus();
+ }
+ else if (komando == '1')
+ enkeltstatus(1);
+ else if (komando == '2')
+ enkeltstatus(2);
+ else if (komando == '3')
+ enkeltstatus(3);
+ else if (komando == '4')
+ enkeltstatus(4);
+ else if (komando == '5')
+ enkeltstatus(5);
+ else if (komando == '6')
+ enkeltstatus(6);
+ else if (komando == '7')
+ enkeltstatus(7);
+ else if (komando == '8')
+ enkeltstatus(8);
+ else if (komando == 'r') {
+ NullstillAlarm();
+ printf("Alarm resatt\n\r");
+ resetstatus();
+ }
+ else if (komando == 'p') {
+ locked = true;
+ printf("Enheten er naa passordbeskyttet\n\r");
+ }
+ else if (komando == 'h') {
+ printf("Skriv \"t\" for totaloversikt\n\r");
+ printf("Skriv et tall mellom 1 og 8 for enkelt alarmer\n\r");
+ printf("Skriv \"r\" for aa resette alarm\n\r");
+ printf("Skriv \"p\" for aa aktivere passordbeskyttelse\n\r");
+ }
+ else
+ printf("Ugyldig komando: Trykk \"h\" for hjelp\n\r");
+
+}
+
+void enkeltstatus (int alarmNummer)
+{
+ printf("Alarm %d er: ", alarmNummer);
+ if (alarmList[alarmNummer - 1]->AlarmTest() == true) {
+ printf("Aktiv\n\r");
+ }
+ else {
+ printf("Inaktiv\n\r");
+ }
+}
+
+
+void totalstatus()
+{
+ for(int i = 0; i < alarmList.size(); i++) {
+ printf("Alarm %d er: ", i + 1);
+ if (alarmList[i]->AlarmTest() == true) {
+ printf("Aktiv\n\r");
+ }
+ else {
+ printf("Inaktiv\n\r");
+ }
+ }
+}
+
+void resetstatus()
+{
+ bool ingenAlarmerInaktiv = true;
+ for(int i = 0; i < alarmList.size(); i++) {
+ if (alarmList[i]->AlarmTest() == true) {
+ printf("Alarm %d er: Aktiv\n\r", i+1);
+ ingenAlarmerInaktiv = false;
+ }
+ }
+ if (ingenAlarmerInaktiv == true)
+ printf("Normal drift\n\r");
+}
+
+int main()
+{
+ alarmOppsett();
+
+ ServiceBryter.rise(&NullstillAlarm);
+ pc.attach(&readString);
+ DriftLoopTicker.attach(&DriftLoop, 0.05);
+
+ while(1) {
+ for (int i = 0; i < alarmList.size(); i++) {
+ if (alarmList[i]->AlarmTest()) {
+ alarmList[i]->LEDSet(1);
+ gAlarmAktiv = true;
+ }
+ //else
+ //alarmList[i]->LEDSet(0);
+ }
+ //printf("\n\r%f", alarmList[0]->AlarmVoltage());
+ wait(0.2);
+ }
+}
+
+void DriftLoop(void)
+{
+ if (gAlarmAktiv)
+ NORMAL = !NORMAL;
+ else
+ NORMAL = 0;
+}
+
+void alarmOppsett()
+{
+ Alarm * Sone1 = new Alarm("Sone1", p17, LED1);
+ alarmList.push_back(Sone1);
+ Alarm * Sone2 = new Alarm("Sone2", p17, LED2);
+ alarmList.push_back(Sone2);
+ Alarm * Sone3 = new Alarm("Sone3", p18, LED3);
+ alarmList.push_back(Sone3);
+ Alarm * Sone4 = new Alarm("Sone4", p18, LED4);
+ alarmList.push_back(Sone4);
+ Alarm * Sone5 = new Alarm("Sone5", p19, p21);
+ alarmList.push_back(Sone5);
+ Alarm * Sone6 = new Alarm("Sone6", p19, p22);
+ alarmList.push_back(Sone6);
+ Alarm * Sone7 = new Alarm("Sone7", p20, p23);
+ alarmList.push_back(Sone7);
+ Alarm * Sone8 = new Alarm("Sone8", p20, p24);
+ alarmList.push_back(Sone8);
+
+ for (int i = 4; i < alarmList.size(); i++) { alarmList[i]->LEDInverted(true); }
+
+ for (int i = 0; i < alarmList.size(); i++) {
+ if (i & 1)
+ alarmList[i]->AlarmVoltageAdd(0.6166);
+ else
+ alarmList[i]->AlarmVoltageAdd(0.5);
+ alarmList[i]->AlarmVoltageAdd(0.3815);
+ for (int j = 1; j < 8; j++) { //får ledene til å blinke (fancy oppstart)
+ alarmList[i]->LEDSet(j & 1);
+ wait(0.01);
+ }
+ wait(0.01);
+ }
+ for (int i = 0; i < alarmList.size(); i++) {
+ alarmList[i]->LEDSet(0);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Feb 12 13:49:58 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file