From 7f804ca9cade8565ef2b51de4af5d3759c3f7d97 Mon Sep 17 00:00:00 2001 From: hg Date: Mon, 3 Feb 2014 23:04:57 +0100 Subject: [PATCH] calibration support --- .settings/org.eclipse.cdt.core.prefs | 2 +- MeterBusPowerMaster.cpp | 8 +-- meterBusMaster.cpp | 96 +++++++++++++++------------- meterBusMaster.h | 1 + 4 files changed, 56 insertions(+), 51 deletions(-) diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs index 52b321f..e78e64d 100644 --- a/.settings/org.eclipse.cdt.core.prefs +++ b/.settings/org.eclipse.cdt.core.prefs @@ -268,7 +268,7 @@ environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE. environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.BOARD_NAME/value=Arduino Micro environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfd1111 +environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfa131 environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/value= diff --git a/MeterBusPowerMaster.cpp b/MeterBusPowerMaster.cpp index b72fc32..5a4b9a8 100644 --- a/MeterBusPowerMaster.cpp +++ b/MeterBusPowerMaster.cpp @@ -1,17 +1,17 @@ // Do not remove the include below -#include +// #include #include "MeterBusPowerMaster.h" #include "cmd.h" -// #include "test.h" +#include "test.h" #include "uptime.h" #include "meterBusMaster.h" #include "overCurrentProt.h" static CmdServer cmdServer(&Serial); -// static TestCmd testCmd; +static TestCmd testCmd; static Uptime uptime; static MeterBusMaster meterBusMaster; static OverCurrentProt overCurrentProt; @@ -20,7 +20,7 @@ static OverCurrentProt overCurrentProt; void setup() { cmdServer.begin(); - // testCmd.registerYourself(&cmdServer); + testCmd.registerYourself(&cmdServer); overCurrentProt.begin(&cmdServer); uptime.begin(&cmdServer); meterBusMaster.begin(&cmdServer); diff --git a/meterBusMaster.cpp b/meterBusMaster.cpp index e34e391..936dd26 100644 --- a/meterBusMaster.cpp +++ b/meterBusMaster.cpp @@ -39,23 +39,25 @@ uint16_t stringToUInt8(String i, uint8_t index) { String CalibrationSupport::exec(String params) { - String res = "failed"; - - MeterBusMaster *mbm = (MeterBusMaster*)m_meterBusMaster; - if (params.equalsIgnoreCase("sample") && enable) { - mbm->sample(); - res = "done"; - } else if (params.equalsIgnoreCase("hold") && enable) { - mbm->hold(); - res = "done"; - } else if (params.equalsIgnoreCase("enable") && ! enable) { - enable = true; - res = "enabled"; - } else if (params.equalsIgnoreCase("disable") && enable) { - enable = false; - res = "disabled"; - } - return res; + String res = "failed"; + + MeterBusMaster *mbm = (MeterBusMaster*)m_meterBusMaster; + if (params.equalsIgnoreCase("sample") && enable) { + mbm->sample(); + res = "done"; + } else if (params.equalsIgnoreCase("hold") && enable) { + mbm->hold(); + res = "done"; + } else if (params.equalsIgnoreCase("enable") && ! enable) { + enable = true; + mbm->m_calibration = true; + res = "enabled"; + } else if (params.equalsIgnoreCase("disable") && enable) { + enable = false; + mbm->m_calibration = false; + res = "disabled"; + } + return res; } String MeasureCurrent::exec(String params) { @@ -136,7 +138,8 @@ void SendOctets::sendError(uint8_t code) { MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this), m_calibrationSupport(this), m_cmdReadyToSend(false), m_cmdReadyFromRecv(false), m_expectResponse(false), - m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_responseCallback(0) { + m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_responseCallback(0), + m_sampling(true), m_calibration(false) { pinMode(RX_EN_PIN, OUTPUT); digitalWrite(RX_EN_PIN, RX_DISABLE); Serial1.begin(2400, SERIAL_8E1); @@ -145,7 +148,7 @@ MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this), void MeterBusMaster::begin(CmdServer *cmdServer) { m_sendOctets.registerYourself(cmdServer); - m_measureCurrent.registerYourself(cmdServer); + m_measureCurrent.registerYourself(cmdServer); m_calibrationSupport.registerYourself(cmdServer); } @@ -230,38 +233,39 @@ void MeterBusMaster::hold() { } void MeterBusMaster::exec() { - static unsigned long cmdSendTime = 0; + if (! m_calibration) { + static unsigned long cmdSendTime = 0; - if (m_cmdReadyToSend) { - sample(); - Serial1.write(m_sendBuffer, m_sendBufLen); - Serial1.flush(); - hold(); - m_cmdReadyToSend = false; - m_expectResponse = true; - cmdSendTime = millis(); - } + if (m_cmdReadyToSend) { + sample(); + Serial1.write(m_sendBuffer, m_sendBufLen); + Serial1.flush(); + hold(); + m_cmdReadyToSend = false; + m_expectResponse = true; + cmdSendTime = millis(); + } - if (! m_expectResponse) { - sample(); - } + if (! m_expectResponse) { + sample(); + } - // timeout - if (m_expectResponse && ((millis() - cmdSendTime) > RESPONSE_TIMEOUT)) { - m_retransmitCount++; - if (m_retransmitCount > 2) { - m_expectResponse = false; - prepareResponse(true, 0); - } else { - m_cmdReadyToSend = true; + // timeout + if (m_expectResponse && ((millis() - cmdSendTime) > RESPONSE_TIMEOUT)) { + m_retransmitCount++; + if (m_retransmitCount > 2) { + m_expectResponse = false; + prepareResponse(true, 0); + } else { + m_cmdReadyToSend = true; + } + } + + int serialInChar = Serial1.read(); + if ((serialInChar != -1) && m_expectResponse) { + prepareResponse(false, (uint8_t)serialInChar); } } - - int serialInChar = Serial1.read(); - if ((serialInChar != -1) && m_expectResponse) { - prepareResponse(false, (uint8_t)serialInChar); - } - } diff --git a/meterBusMaster.h b/meterBusMaster.h index 63b7ea8..eddb74e 100644 --- a/meterBusMaster.h +++ b/meterBusMaster.h @@ -78,6 +78,7 @@ private: uint8_t m_sendBuffer[SEND_BUFFER_SIZE]; uint8_t m_recvBuffer[RECEIVE_BUFFER_SIZE]; bool m_sampling; + bool m_calibration; void prepareResponse(bool err, uint8_t in); void sample(); void hold();