2014-05-14 19:37:04 +02:00
|
|
|
#include <stdint.h>
|
|
|
|
#include "overCurrentProt.h"
|
2017-01-05 00:07:07 +01:00
|
|
|
#include <Streaming.h>
|
2014-05-14 19:37:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
volatile bool overCurrentMarker;
|
|
|
|
|
|
|
|
void overCurrentProtServiceRoutine() {
|
|
|
|
// switch off current
|
|
|
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_OFF);
|
|
|
|
|
|
|
|
// set marker
|
|
|
|
overCurrentMarker = true;
|
|
|
|
|
|
|
|
Serial.println("X");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OverCurrentProtCmd::OverCurrentProtCmd(OverCurrentProt *overCurrentProt) : m_overCurrentProt(overCurrentProt) {
|
|
|
|
}
|
|
|
|
|
|
|
|
String OverCurrentProtCmd::exec(String params) {
|
2017-01-05 00:07:07 +01:00
|
|
|
String res = "done";
|
|
|
|
|
|
|
|
Print *out = m_server;
|
|
|
|
if (params.equalsIgnoreCase("help")) {
|
|
|
|
*out << "help ..... this help page" << endl;
|
|
|
|
*out << "show ..... show statistics" << endl;
|
|
|
|
*out << "reset .... reset statistics" << endl;
|
|
|
|
*out << "disable .. disable loop" << endl;
|
|
|
|
*out << "enable ... enable loop" << endl;
|
|
|
|
*out << endl;
|
|
|
|
} else if (params.equalsIgnoreCase("enable")) {
|
|
|
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_ON);
|
|
|
|
*out << "Loop enabled" << endl;
|
|
|
|
} else if (params.equalsIgnoreCase("disable")) {
|
|
|
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_OFF);
|
|
|
|
*out << "Loop disabled" << endl;
|
|
|
|
} else if (params.equalsIgnoreCase("show")) {
|
|
|
|
*out << "Over current counter: " << m_overCurrentProt->getEventCnt() << endl;
|
|
|
|
} else if (params.equalsIgnoreCase("reset")) {
|
|
|
|
m_overCurrentProt->resetEventCnt();
|
|
|
|
*out << "Over current counter reseted" << endl;
|
|
|
|
} else {
|
|
|
|
*out << "unknown subcommand" << endl;
|
|
|
|
res = "failed";
|
|
|
|
}
|
|
|
|
return res;
|
2014-05-14 19:37:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-01-05 00:07:07 +01:00
|
|
|
OverCurrentProt::OverCurrentProt() : m_overCurrentProtCmd(this),
|
2014-05-14 19:37:04 +02:00
|
|
|
m_eventCnt(0), m_timestamp(0) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void OverCurrentProt::begin(CmdServer *cmdServer) {
|
|
|
|
m_overCurrentProtCmd.registerYourself(cmdServer);
|
|
|
|
pinMode(CURRENT_SHUTDOWN, OUTPUT);
|
|
|
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_ON);
|
|
|
|
overCurrentMarker = false;
|
|
|
|
pinMode(CURRENT_INTERRUPT, INPUT);
|
|
|
|
attachInterrupt(CURRENT_INTERRUPT, overCurrentProtServiceRoutine, FALLING);
|
|
|
|
Serial.println("OC ready");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void OverCurrentProt::exec() {
|
|
|
|
if ((m_timestamp == 0) && overCurrentMarker) {
|
|
|
|
m_eventCnt++;
|
|
|
|
m_timestamp = millis();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((m_timestamp != 0) && ((m_timestamp + TURN_ON_DELAY) < millis())) {
|
|
|
|
overCurrentMarker = false;
|
|
|
|
m_timestamp = 0;
|
|
|
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_ON);
|
|
|
|
}
|
|
|
|
}
|