I conti tornano non tornando

Il tempo a disposizione è stato pochissimo , ma ......... indovinate ...... bastava che mettevo Homer (neon con reattore) per vedere la differenza

Stufo di leggere sul Pc ho modificato il codice il quale riporterà i rusultati sul display .
CODICE ARDUINO (Mega2560)<div class=spoiler align=center><div class=code_top align=left>
SPOILER (<a href=javascript:spoiler()>clicca per visualizzare)</div><div class=code align=left>#include <liquidcrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);//ASSEGNAZIONE PIN LCD
const int BACKLIGH_PIN = 10;
const int ProdottaPin = A11;
const int AssorbitaPin = A12;
const int TensionePin = A13;
const int TempoCampionatura = 40; //Scegli i ms da Campionare
const float Fattore_Conversione_Potenza = .11; //Fattore di conversione Potenze
const float Fattore_Conversione_Corrente = .055;
const float Fattore_Conversione_Tensione = 1.6;
long start ;
int i ;
long PotenzaPro;
long PotenzaAss;
float PotenzaAss_Float;
float AmperPro;
float AmperAss;
long OffsetPro;
long OffsetAss;
long OffsetTens;
int Tensionemin=1023;
int Tensionemax=0;
void setup() {
//lcd.begin(16, 2);
Serial.begin(9600) ;
pinMode(BACKLIGH_PIN, OUTPUT);
digitalWrite(BACKLIGH_PIN, HIGH);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PowerMeter");
lcd.setCursor(0,1);
lcd.print("Enhanced");
delay(2000);
//CALCOLO AUTOMATICO OFFSET SENSORI
for (i = 0 ; i <= 1000 ; i++){
OffsetPro+=analogRead(ProdottaPin);
OffsetAss+=analogRead(AssorbitaPin);
int Tensioneinst =analogRead(TensionePin);
if (Tensionemax<tensioneinst)Tensionemax=Tensioneinst;
if (Tensionemin>Tensioneinst)Tensionemin=Tensioneinst;
}
OffsetPro/=1000;
OffsetAss/=1000;
OffsetTens=(Tensionemax+Tensionemin)/2;
//--------------------------------
ADCSRA&=0X90+ 0b100; //Setta ADC prescaler a 16 quindi la velocita delle conversioni

}
void loop() {
PotenzaPro=0;
PotenzaAss=0;
AmperPro=0;
AmperAss=0;
int NumCampionamenti=0;
int Tensionepicco=0;
start = millis() ;
do
{
NumCampionamenti++;
int Tensioneinst = abs(analogRead(TensionePin)-OffsetTens);
int Prodottainst = abs(analogRead(ProdottaPin)-OffsetPro);
int Assorbitainst = abs(analogRead(AssorbitaPin)-OffsetAss);
PotenzaPro += Tensioneinst*Prodottainst;
PotenzaAss += Tensioneinst*Assorbitainst;
AmperPro+=Prodottainst;
AmperAss+=Assorbitainst;
if (Tensionepicco<tensioneinst)Tensionepicco=Tensioneinst;
}while((millis()-start)<tempocampionatura);
int Tempomisura=millis() - start;
PotenzaPro=(PotenzaPro/NumCampionamenti)*Fattore_Conversione_Potenza;
PotenzaAss_Float=(PotenzaAss/NumCampionamenti)*Fattore_Conversione_Potenza;//Cal
colo Potenza Somma medie V*I in Float
PotenzaAss=(PotenzaAss/NumCampionamenti)*Fattore_Conversione_Potenza;
AmperPro=(AmperPro/NumCampionamenti)*Fattore_Conversione_Corrente;
AmperAss=(AmperAss/NumCampionamenti)*Fattore_Conversione_Corrente;
int TensioneRMS=Tensionepicco*Fattore_Conversione_Tensione;
float TensioneRMS_Float=Tensionepicco*Fattore_Conversione_Tensione;//Calcolo Tensione in Float
int PotenzaProCalc=TensioneRMS*AmperPro;
int PotenzaAssCalc=TensioneRMS*AmperAss;
float PotenzaAssCalc_Float=TensioneRMS_Float*AmperAss;//Calcolo Potenza Vm*Im in Float
//Visualizza risultati su PC
if (Tensionemax>23 && Tensionemin<1000)
Serial.println ("Misurazioni Attendibili");
else
Serial.println ("ERROR");
Serial.print ("Numero Campionamenti = ");
Serial.println(NumCampionamenti);
Serial.print ("Tempo conversione = ");
Serial.print(Tempomisura) ;
Serial.println(" ms") ;
Serial.print ("ADCSRA = ");
Serial.println(ADCSRA) ;
Serial.print ("Tensione RMS = ");
Serial.print(TensioneRMS) ;
Serial.println(" Volt") ;
Serial.print ("Valore Sensore Tensione Max = ");
Serial.println(Tensionemax) ;
Serial.print ("Valore Sensore Tensione Min = ");
Serial.println(Tensionemin) ;
Serial.print ("Offset Sensore Tensione = ");
Serial.println(OffsetTens) ;
Serial.print ("Offset Sensore Produzione = ");
Serial.println(OffsetPro) ;
Serial.print ("Offset Sensore Assorbimento = ");
Serial.println(OffsetAss) ;
Serial.print ("Potenza Prodotta = ");
Serial.print(PotenzaPro) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Prodotta Calcolata= ");
Serial.print(PotenzaProCalc) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Assorbita = ");
Serial.print(PotenzaAss) ;
Serial.println(" Watt") ;
Serial.print ("Potenza Assorbita Calcolata = ");
Serial.print(PotenzaAssCalc) ;
Serial.println(" Watt") ;
Serial.print ("Corrente Prodotta = ");
Serial.print(AmperPro) ;
Serial.println(" Amper") ;
Serial.print ("Corrente Assorbita = ");
Serial.print(AmperAss) ;
Serial.println(" Amper") ;
Serial.println("") ;
Serial.println("") ;
//Visualizza risultati su LCD
lcd.setCursor(0, 0);
lcd.print("V*I=");
lcd.print(PotenzaAssCalc);
lcd.print("W ");
lcd.setCursor(10, 0);
lcd.print(PotenzaAssCalc_Float,1);
lcd.print("W ");
lcd.setCursor(0,1);
lcd.print("Spr=");
lcd.print(PotenzaAss);
lcd.print("W ");
lcd.setCursor(10, 1);
lcd.print(PotenzaAss_Float,1);
lcd.print("W ");
//delay(1000);
} [/quote]
Nella prima riga verrà visualzzata la potenza calcolata con il prodotto della tensione media per la corrente media , sia calcolandola con variabili intere sia con tutte le variabili float
Nella seconda riga invece ci sarà la somma dei prodotti di ogni singola campionatura , , anch'essa con variabili intere e con variabili float ..
Lampadina ad incandescenza (forma d'onda nelle prime pagine )

Valori uguali

(la mia tolleranza è circa 1...2w)
Lampadina Basso consumo con ballast elettronico

Valori uguali

Lampadina neon con reattore

Trapano alla massima velocità

E relativa forma d'onda

Trapano a circa metà potenza

E relativa forma d'onda

Trapano al minimo

E relativa forma d'onda

Le forme d'onda sono state misurate direttamente sui piedini dell'arduino