#include <virtualwire.h>
#include <liquidcrystal.h>
//-----------------------------------------------------------
// VARIABILI
int ledPin = 13;
int ADR1=125;
int ADR2=250;
int Pro1;
int Pro2;
int Ass1;
int Ass2;
int ProdottaPin = 1;
int ProdottaValue = 0;
int AssorbitaPin = 2;
int AssorbitaValue = 0;
unsigned long ProdottaMedia = 0;
unsigned long AssorbitaMedia = 0;
float ProdottaMediaP = 0;
float AssorbitaMediaP = 0;
unsigned long time;
//ASSEGNAZIONE PIN LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define BACKLIGH_PIN 10
void setup() {
Serial.begin(9600);
vw_setup(2000);
pinMode(ledPin, OUTPUT);
lcd.begin(16, 2);
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PowerMeter By"

;
lcd.setCursor(0,1);
lcd.print("ElettroshockNow"

;
delay(2000);
}
void loop() {
// read the value from the sensor:
digitalWrite(BACKLIGH_PIN, HIGH);
for(int i = 0; i < 5000; i++) {
ProdottaValue = analogRead(ProdottaPin);
AssorbitaValue = analogRead(AssorbitaPin);
if (ProdottaValue > 515 ) ProdottaMedia = ProdottaMedia + (ProdottaValue-512);
if (AssorbitaValue > 515 ) AssorbitaMedia = AssorbitaMedia + (AssorbitaValue-512);
}
ProdottaMedia = ProdottaMedia/5000;
AssorbitaMedia = AssorbitaMedia/5000;
Pro1 = ProdottaMedia & 255;
Pro2=(ProdottaMedia&768)/256;
Ass1=AssorbitaMedia&255;
Ass2=(AssorbitaMedia&768)/256;
ProdottaMediaP = ProdottaMedia*0.175;
AssorbitaMediaP = AssorbitaMedia*0.175;
lcd.setCursor(0, 0);
lcd.print ("Prodotti = "

;
lcd.print(ProdottaMediaP);
lcd.print ("A "

;
lcd.setCursor(0,1);
lcd.print ("Assorbiti= "

;
lcd.print(AssorbitaMediaP);
lcd.print ("A "

;
Serial.write ("Amper RMS Prodotti= "

;
Serial.println(ProdottaMediaP);
Serial.write ("Amper RMS assorbiti= "

;
Serial.println(AssorbitaMediaP);
if (ProdottaMediaP != 0 && (ProdottaMediaP > (AssorbitaMediaP - 0.30)) || millis() > (time + 15000)){
time = millis();
int CKS = (ADR1+ADR2+Pro1+Pro2+Ass1+Ass2)/6;
char msg[7] = {ADR1,ADR2,Pro1,Pro2,Ass1,Ass2,CKS};
digitalWrite(13, true); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 7 );
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
Serial.write ("ATTENZIONE PERICOLO SOVRAPRODUZIONE"

;
Serial.println();
}
else {
Serial.write ("PRODUZIONE REGOLARE"

;
Serial.println();
}
}