First publish Luci

Dependencies:   Adafruit_RTCLib SoftI2C SoftSerial mbed

Committer:
arsenalist
Date:
Tue May 23 11:15:38 2017 +0000
Revision:
0:99eede875063
Child:
1:6cbf32f31179
First commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arsenalist 0:99eede875063 1 #include "mbed.h"
arsenalist 0:99eede875063 2 #include "SoftSerial.h"
arsenalist 0:99eede875063 3 //#include "DS1307.h"
arsenalist 0:99eede875063 4
arsenalist 0:99eede875063 5 //Init debug port
arsenalist 0:99eede875063 6 Serial DBG(PA_9, PA_10); //tx, rx
arsenalist 0:99eede875063 7
arsenalist 0:99eede875063 8 //Init xbee
arsenalist 0:99eede875063 9 SoftSerial XB(PC_0, PC_1); //tx, rx
arsenalist 0:99eede875063 10
arsenalist 0:99eede875063 11 //Init rtc
arsenalist 0:99eede875063 12 //I2C luciI2C (PB_7,PB_6); //sda, scl
arsenalist 0:99eede875063 13 //RtcDs1307 luciRTC(luciI2C);
arsenalist 0:99eede875063 14
arsenalist 0:99eede875063 15 //Init adc
arsenalist 0:99eede875063 16 AnalogIn anVP(PA_1);
arsenalist 0:99eede875063 17 AnalogIn anIP(PA_0);
arsenalist 0:99eede875063 18 AnalogIn anVL(PA_2);
arsenalist 0:99eede875063 19 AnalogIn anIL(PA_3);
arsenalist 0:99eede875063 20 AnalogIn anVB(PB_1);
arsenalist 0:99eede875063 21 AnalogIn anIB(PB_0);
arsenalist 0:99eede875063 22 AnalogIn anTE(PC_2);
arsenalist 0:99eede875063 23
arsenalist 0:99eede875063 24 //Sensor value
arsenalist 0:99eede875063 25 float valVP,valIP;
arsenalist 0:99eede875063 26 float valVL,valIL;
arsenalist 0:99eede875063 27 float valVB,valIB;
arsenalist 0:99eede875063 28 float valTE;
arsenalist 0:99eede875063 29
arsenalist 0:99eede875063 30 //Date and Time
arsenalist 0:99eede875063 31 int year,month,date;
arsenalist 0:99eede875063 32 int day,hr,min,sec;
arsenalist 0:99eede875063 33 //DateTime dt;
arsenalist 0:99eede875063 34
arsenalist 0:99eede875063 35 //Variables
arsenalist 0:99eede875063 36 int i;
arsenalist 0:99eede875063 37
arsenalist 0:99eede875063 38 float adcRead(AnalogIn an) {
arsenalist 0:99eede875063 39 float s = 0;
arsenalist 0:99eede875063 40 float sTotal = 0;
arsenalist 0:99eede875063 41 int adcMax = 10;
arsenalist 0:99eede875063 42
arsenalist 0:99eede875063 43 for(int i=0; i<adcMax; i++) { //Do adcMax readings
arsenalist 0:99eede875063 44 s = an.read();
arsenalist 0:99eede875063 45 sTotal = sTotal + s;
arsenalist 0:99eede875063 46 wait_us(10);
arsenalist 0:99eede875063 47 }
arsenalist 0:99eede875063 48 return sTotal/adcMax;
arsenalist 0:99eede875063 49 }
arsenalist 0:99eede875063 50
arsenalist 0:99eede875063 51 float currentCalculate(float adcVal) {
arsenalist 0:99eede875063 52 float res = 0;
arsenalist 0:99eede875063 53
arsenalist 0:99eede875063 54 adcVal = adcVal - 0.510980; //Remove offset
arsenalist 0:99eede875063 55 if(-0.001 < adcVal && adcVal < 0.001) { //No current
arsenalist 0:99eede875063 56 res = 0;
arsenalist 0:99eede875063 57 } else {
arsenalist 0:99eede875063 58 res = (adcVal/13.2)*1000;
arsenalist 0:99eede875063 59 }
arsenalist 0:99eede875063 60 return res;
arsenalist 0:99eede875063 61 }
arsenalist 0:99eede875063 62
arsenalist 0:99eede875063 63 /*
arsenalist 0:99eede875063 64 bool rtcUpdate(RtcDs1307 &rtc, int32_t bias) // this must be signed
arsenalist 0:99eede875063 65 { bool bUpdated = false;
arsenalist 0:99eede875063 66
arsenalist 0:99eede875063 67 // Use the compiled date/time as a basis for setting the clock.
arsenalist 0:99eede875063 68 // We assign it to a signed integer so that negative biases work correctly
arsenalist 0:99eede875063 69 int64_t compiledTime = DateTime(__DATE__,__TIME__).unixtime();
arsenalist 0:99eede875063 70
arsenalist 0:99eede875063 71 // This assumes that the program is run VERY soon after the initial compile.
arsenalist 0:99eede875063 72 time_t localt = DateTime(compiledTime + bias).unixtime(); // offset by bias
arsenalist 0:99eede875063 73
arsenalist 0:99eede875063 74 // If the stored static time stamp does not equal the compiled time stamp,
arsenalist 0:99eede875063 75 // then we need to update the RTC clock and the stored time stamp
arsenalist 0:99eede875063 76 if(*((time_t *)&rtc[0]) != localt)
arsenalist 0:99eede875063 77 {
arsenalist 0:99eede875063 78 // Update the RTC time as local time, not GMT/UTC
arsenalist 0:99eede875063 79 rtc.adjust(localt);
arsenalist 0:99eede875063 80 // Store the new compiled time statically in the object ram image
arsenalist 0:99eede875063 81 *((time_t *)&rtc[0]) = localt;
arsenalist 0:99eede875063 82 // Push the object ram image to the RTC ram image
arsenalist 0:99eede875063 83 bUpdated = rtc.commit();
arsenalist 0:99eede875063 84 }
arsenalist 0:99eede875063 85 return bUpdated;
arsenalist 0:99eede875063 86 }
arsenalist 0:99eede875063 87 */
arsenalist 0:99eede875063 88
arsenalist 0:99eede875063 89 int main() {
arsenalist 0:99eede875063 90 DBG.baud(115200);
arsenalist 0:99eede875063 91 XB.baud(9600);
arsenalist 0:99eede875063 92
arsenalist 0:99eede875063 93 // Uncomment to update time
arsenalist 0:99eede875063 94 //if(rtcUpdate(luciRTC, (7*60*60) )) // GMT+7
arsenalist 0:99eede875063 95 // DBG.printf("Updated RTC to compiled time\r\n");
arsenalist 0:99eede875063 96 //DBG.printf("compiled %s %s\r\n",__DATE__,__TIME__);
arsenalist 0:99eede875063 97 //DBG.printf("rtc clock is %s\r\n", (luciRTC.isRunning() ? "running" : "halted"));
arsenalist 0:99eede875063 98
arsenalist 0:99eede875063 99 while(1){
arsenalist 0:99eede875063 100 //Read sensor
arsenalist 0:99eede875063 101 valVP = 0;
arsenalist 0:99eede875063 102 valVL = 0;
arsenalist 0:99eede875063 103 valVB = 0;
arsenalist 0:99eede875063 104 valIP = 0;
arsenalist 0:99eede875063 105 valIL = 0;
arsenalist 0:99eede875063 106 valIB = 0;
arsenalist 0:99eede875063 107 valTE = 0;
arsenalist 0:99eede875063 108
arsenalist 0:99eede875063 109 //Read sensor
arsenalist 0:99eede875063 110 valVP = adcRead(anVP)*52.8;
arsenalist 0:99eede875063 111 valVL = adcRead(anVL)*52.8;
arsenalist 0:99eede875063 112 valVB = adcRead(anVB)*52.8;
arsenalist 0:99eede875063 113 valIP = currentCalculate(adcRead(anIP));
arsenalist 0:99eede875063 114 valIL = currentCalculate(adcRead(anIL));
arsenalist 0:99eede875063 115 valIB = currentCalculate(adcRead(anIB));
arsenalist 0:99eede875063 116 valTE = adcRead(anTE);
arsenalist 0:99eede875063 117
arsenalist 0:99eede875063 118 //Read time
arsenalist 0:99eede875063 119 //dt = luciRTC.now();
arsenalist 0:99eede875063 120 //DBG.printf("%02u%02u%02u %02u:%02u:%02u\r\n"
arsenalist 0:99eede875063 121 //,dt.year(),dt.month(),dt.day(),dt.hour(),dt.minute(),dt.second());
arsenalist 0:99eede875063 122
arsenalist 0:99eede875063 123 //Contruct and senddata
arsenalist 0:99eede875063 124 //DBG.printf("[%d]{DT=\"%02u%02u%02u %02u:%02u:%02u\",VP=%.1f,IP=%.1f,VL=%.1f,IL=%.1f,VB=%.1f,IB=%.1f,TE=%.1f}\r\n"
arsenalist 0:99eede875063 125 //,i,dt.year(),dt.month(),dt.day(),dt.hour(),dt.minute(),dt.second(),valVP,valIP,valVL,valIL,valVB,valIB,valTE);
arsenalist 0:99eede875063 126 //XB.printf("{DT=\"%02u%02u%02u %02u:%02u:%02u\",VP=%.1f,IP=%.1f,VL=%.1f,IL=%.1f,VB=%.1f,IB=%.1f,TE=%.1f}"
arsenalist 0:99eede875063 127 //,dt.year(),dt.month(),dt.day(),dt.hour(),dt.minute(),dt.second(),valVP,valIP,valVL,valIL,valVB,valIB,valTE);
arsenalist 0:99eede875063 128 DBG.printf("[%d]{DT=\"YYYYMMDD HH:MM:SS\",VP=%.1f,IP=%.1f,VL=%.1f,IL=%.1f,VB=%.1f,IB=%.1f,TE=%.1f}\r\n"
arsenalist 0:99eede875063 129 ,i,valVP,valIP,valVL,valIL,valVB,valIB,valTE);
arsenalist 0:99eede875063 130 XB.printf("{DT=\"YYYYMMDD HH:MM:SS\",VP=%.1f,IP=%.1f,VL=%.1f,IL=%.1f,VB=%.1f,IB=%.1f,TE=%.1f}"
arsenalist 0:99eede875063 131 ,valVP,valIP,valVL,valIL,valVB,valIB,valTE);
arsenalist 0:99eede875063 132 wait(60);
arsenalist 0:99eede875063 133 i++;
arsenalist 0:99eede875063 134 }
arsenalist 0:99eede875063 135 }