current measurement

This commit is contained in:
hg
2014-01-18 15:51:27 +01:00
parent 6f9d7c6f9f
commit 2609f4c558
3 changed files with 36 additions and 12 deletions

View File

@ -4,13 +4,13 @@
#include "MeterBusPowerMaster.h" #include "MeterBusPowerMaster.h"
#include "cmd.h" #include "cmd.h"
#include "test.h" // #include "test.h"
#include "uptime.h" #include "uptime.h"
#include "meterBusMaster.h" #include "meterBusMaster.h"
static CmdServer cmdServer(&Serial); static CmdServer cmdServer(&Serial);
static TestCmd testCmd; // static TestCmd testCmd;
static Uptime uptime; static Uptime uptime;
static MeterBusMaster meterBusMaster; static MeterBusMaster meterBusMaster;
@ -18,7 +18,7 @@ static MeterBusMaster meterBusMaster;
void setup() { void setup() {
cmdServer.begin(); cmdServer.begin();
testCmd.registerYourself(&cmdServer); // testCmd.registerYourself(&cmdServer);
uptime.begin(&cmdServer); uptime.begin(&cmdServer);
meterBusMaster.begin(&cmdServer); meterBusMaster.begin(&cmdServer);

View File

@ -37,6 +37,16 @@ uint16_t stringToUInt8(String i, uint8_t index) {
// ===================================================================================================== // =====================================================================================================
String MeasureCurrent::exec(String params) {
int currentInVal = analogRead(CURRENT_IN);
int current = currentInVal;
return String() + current;
}
String SendOctets::exec(String params) { String SendOctets::exec(String params) {
bool err = false;; bool err = false;;
uint16_t sendBufLen = 0; uint16_t sendBufLen = 0;
@ -101,7 +111,7 @@ void SendOctets::sendError(uint8_t code) {
// ===================================================================================================== // =====================================================================================================
MeterBusMaster::MeterBusMaster() : m_sendOctets(this), MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this),
m_cmdReadyToSend(false), m_cmdReadyFromRecv(false), m_expectResponse(false), 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) {
pinMode(RX_EN_PIN, OUTPUT); pinMode(RX_EN_PIN, OUTPUT);
@ -110,6 +120,12 @@ MeterBusMaster::MeterBusMaster() : m_sendOctets(this),
} }
void MeterBusMaster::begin(CmdServer *cmdServer) {
m_sendOctets.registerYourself(cmdServer);
m_measureCurrent.registerYourself(cmdServer);
}
uint8_t *MeterBusMaster::getSendBuffer() { uint8_t *MeterBusMaster::getSendBuffer() {
return m_expectResponse ? 0 : m_sendBuffer; return m_expectResponse ? 0 : m_sendBuffer;
} }
@ -175,10 +191,6 @@ void MeterBusMaster::prepareResponse(bool err, uint8_t in) {
} }
} }
void MeterBusMaster::begin(CmdServer *cmdServer) {
m_sendOctets.registerYourself(cmdServer);
}
void MeterBusMaster::sample() { void MeterBusMaster::sample() {
if (! m_sampling) { if (! m_sampling) {
m_sampling = true; m_sampling = true;

View File

@ -9,17 +9,18 @@
const unsigned long RESPONSE_TIMEOUT = 2000; // millisecond const unsigned long RESPONSE_TIMEOUT = 2000; // millisecond
#define RX_EN_PIN 2 const uint8_t RX_EN_PIN = 2;
#define RX_ENABLE LOW const uint8_t RX_ENABLE = LOW;
#define RX_DISABLE HIGH const uint8_t RX_DISABLE = HIGH;
const uint8_t CURRENT_IN = A0;
class SendOctets : public Cmd, public ResponseCallback { class SendOctets : public Cmd, public ResponseCallback {
public: public:
SendOctets(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster) {} SendOctets(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster) {}
virtual String getCmdName() { return "SO"; } virtual String getCmdName() { return "SO"; }
virtual String getHelp() { return "Send octets, len first"; } virtual String getHelp() { return "Send octets"; }
virtual String exec(String params); virtual String exec(String params);
virtual void sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength); virtual void sendResponse(uint8_t *responseBuffer, uint16_t responseBufferLength);
virtual void sendError(uint8_t code); virtual void sendError(uint8_t code);
@ -27,6 +28,16 @@ private:
RequestSender *m_meterBusMaster; RequestSender *m_meterBusMaster;
}; };
class MeasureCurrent : public Cmd {
public:
MeasureCurrent(RequestSender *meterBusMaster) : m_meterBusMaster(meterBusMaster) {}
virtual String getCmdName() { return "MC"; }
virtual String getHelp() { return "Measure current"; }
virtual String exec(String params);
private:
RequestSender *m_meterBusMaster;
};
const uint8_t SEND_BUFFER_SIZE = 30; const uint8_t SEND_BUFFER_SIZE = 30;
const uint8_t RECEIVE_BUFFER_SIZE = 180; const uint8_t RECEIVE_BUFFER_SIZE = 180;
@ -40,6 +51,7 @@ public:
void sendBufferReady(uint16_t bufLen, ResponseCallback *responseCallback); void sendBufferReady(uint16_t bufLen, ResponseCallback *responseCallback);
private: private:
SendOctets m_sendOctets; SendOctets m_sendOctets;
MeasureCurrent m_measureCurrent;
bool m_cmdReadyToSend; bool m_cmdReadyToSend;
bool m_cmdReadyFromRecv; bool m_cmdReadyFromRecv;
bool m_expectResponse; bool m_expectResponse;