Polls the voltage of an array of solar panels periodically user-defined times.
Solar.h
- Committer:
- yotammos
- Date:
- 2016-11-01
- Revision:
- 0:3cbc1a6e087c
File content as of revision 0:3cbc1a6e087c:
#ifndef SOLAR_H #define SOLAR_H #include "mbed.h" #include <string> #include <stdlib.h> #include <vector> class solarArray { private: AnalogIn* panels; unsigned* pins; vector<float>* data; // a data vector for each panel size_t size; // up to 6 solar panels private: void allocatePanels(); void samplingCycle(unsigned duration, float samplingPeriod); void sample(); public: solarArray(); // default ctor solarArray(solarArray&); // copy ctor solarArray(size_t numPanels, unsigned* pinNums); ~solarArray(); void gatherInfo_days(unsigned numDays, unsigned start, unsigned duration ,unsigned samplingPeriod); void gatherInfo_secs(unsigned start, unsigned duration, unsigned samplingPeriod); vector<float> getPanelData(unsigned panel); }; solarArray::solarArray() : panels(NULL), pins(NULL),size(0) { } void solarArray::allocatePanels() { for (int i = 0; i < size; i++) { if (pins[i] == 15) new (panels + i) AnalogIn(p15); else if (pins[i] == 16) new (panels + i) AnalogIn(p16); else if (pins[i] == 17) new (panels + i) AnalogIn(p17); else if (pins[i] == 18) new (panels + i) AnalogIn(p18); else if (pins[i] == 19) new (panels + i) AnalogIn(p19); else if (pins[i] == 20) new (panels + i) AnalogIn(p20); } } solarArray::solarArray(solarArray& rhs) : size(rhs.size) { panels = (AnalogIn*) malloc(sizeof(AnalogIn)*size); pins = (unsigned*) malloc(sizeof(unsigned)*size); for (int i = 0; i < size; i++) new (pins + i) unsigned(rhs.pins[i]); allocatePanels(); } solarArray::solarArray(size_t numPanels, unsigned* pinNums) : size(numPanels) { panels = (AnalogIn*) malloc(sizeof(AnalogIn)*size); pins = (unsigned*) malloc(sizeof(unsigned)*size); for (int i = 0; i < size; i++) new (pins + i) unsigned(pinNums[i]); allocatePanels(); } solarArray::~solarArray() { for (int i = 0; i < size; i++) (panels + i)->~AnalogIn(); if (panels != NULL && size > 0) free(panels); for (int i = 0; i < size; i++) (pins + i)->~unsigned(); if (pins != NULL && size > 0) free(pins); } vector<float> solarArray::getPanelData(unsigned panel) { return data[panel]; } void solarArray::sample() { for (int i = 0; i < size; i++) data[i].push_back(panels[i]); } void solarArray::samplingCycle(unsigned duration, float samplingPeriod) { //Ticker t; data = (vector<float>*) malloc(sizeof(vector<float>)*size); for (int i = 0; i < size; i++) new (data + i) vector<float>; //t.attach(this::sample, samplingPeriod); for (float i = 0; i < duration; i += samplingPeriod) { for (int j = 0; j < size; j++) data[j].push_back(panels[j]*3.3); wait(samplingPeriod); } //wait(duration); } void solarArray::gatherInfo_days(unsigned numDays, unsigned start, unsigned duration ,unsigned samplingPeriod) { Ticker t; for (int i = 0; i < numDays; i++) { wait(start); samplingCycle(duration, samplingPeriod); wait(3600*24 - start - duration); // wait until the next day } } void solarArray::gatherInfo_secs(unsigned start, unsigned duration,unsigned samplingPeriod) { wait(start); samplingCycle(duration, samplingPeriod); } #endif