Hi...i'm planning to display CSV serial out to LCD....but it only display 0 watt and 0 kwh...no change at all...please do reply....
Here is the code:
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(9,8,7,6,5,4);
const int lcdLed=13;
const int pulseLed=12;
char incomingByte;
int i;
const int rxPin=2;
const int txPin=3;
const int byteSize=53;
char * range;
char * watts;
char * va;
char * var;
char * pf;
char * volts;
char * amps;
char buffer[53];
bool startDataReceived=false;
bool dataAvailable=false;
SoftwareSerial mySerial(rxPin,txPin);
float wattHour,currentConsumption,currentwattHour;
float wattSecond=0;
float lastConsumption=0;
float KWHInterval=1000;
void setup(){
pinMode(lcdLed,OUTPUT);
digitalWrite(lcdLed,HIGH);
pinMode(pulseLed,OUTPUT);
digitalWrite(pulseLed,LOW);
lcd.begin(16,2);
Serial.begin(9600);
mySerial.begin(9600);}
void extractData(){
if(mySerial.available()>0){
incomingByte=mySerial.read();
if(incomingByte=='I'){
startDataReceived=true;
buffer[0]=incomingByte;}}
if((startDataReceived==true)&&(mySerial.available()>0)){
for(i=1;i<byteSize;i++){
while(mySerial.available()==0){}
buffer=mySerial.read();}
startDataReceived=false;
dataAvailable=true;}
if(dataAvailable==true){
range=strtok(buffer, ",");
watts=strtok(NULL, ",");
va=strtok(NULL, ",");
var=strtok(NULL, ",");
pf=strtok(NULL, ",");
volts=strtok(NULL, ",");
amps=strtok(NULL, ",");
Serial.print("Watts: "); Serial.println(watts);
Serial.print("Va: "); Serial.println(va);
Serial.print("Var: "); Serial.println(var);
Serial.print("Pf: "); Serial.println(pf);
Serial.print("Volts: "); Serial.println(volts);
Serial.print("Amps: "); Serial.println(amps);
memset(buffer,NULL,byteSize);
dataAvailable=false;}}
void pulseOn(){
digitalWrite(pulseLed,HIGH);
delay(5000);
digitalWrite(pulseLed,LOW);}
void displayData(){
lcd.setCursor(0,0);
lcd.print(wattSecond,0);
lcd.print("w ");
lcd.setCursor(0,1);
lcd.print(wattHour/1000, 4);
lcd.print("kwh ");}
void loop(){
extractData();
wattSecond+=atof(watts);
currentwattHour=wattSecond/3600;
wattHour=wattSecond/3600;
displayData();
currentConsumption=currentwattHour;
if((currentConsumption-lastConsumption)>(KWHInterval)){
lastConsumption+=KWHInterval;
pulseOn();}}