Boa tarde.
Pode me dar uma ajuda com relação ao uso do sensor ZMPT101B?
Declarei duas instâncias de medição:
#include <EmonLib.h>
EnergyMonitor emon1, emon2;
void setup() {
lcd.begin(16, 2);
emon1.voltage(2, volt_cal_entrada1, 1.7);
emon2.voltage(3, volt_cal_entrada2, 1.7);
void loop() {
supplyVoltage_entrada1 = medidor_tensao_entrada1();
supplyVoltage_entrada2 = medidor_tensao_entrada2();
float medidor_tensao_entrada1(){
emon1.calcVI(20,2000);
float supplyVoltage_entrada1 = emon1.Vrms;
return supplyVoltage_entrada1;
}
float medidor_tensao_entrada2(){
emon2.calcVI(20,2000);
float supplyVoltage_entrada2 = emon2.Vrms;
return supplyVoltage_entrada2;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(supplyVoltage_entrada1, tensao_casa_dec);
lcd.println("V");
lcd.setCursor(5, 0);
lcd.print(supplyVoltage_entrada2, tensao_casa_dec);
lcd.println("V");
Ocorre que com a chamada da função "supplyVoltage_entrada2 = medidor_tensao_entrada2()" comentada o código funciona perfeito com a instância emon1 fazendo a medida certinho.
Quando descomento a instância emon2 as duas leituras são feitas mas o código fica dando umas travadas, como se tivesse com alguma função delay atravancando o processador.
Agradeço quem puder ajudar.
Leste a documentação acerca do método calcVI?
O 2000 que passas para dentro desse método são milisegundos e é o máximo tempo que o processador espera para ver a passagem por zero da tensão.
//-------------------------------------------------------------------------------------------------------------------------
// 1) Waits for the waveform to be close to 'zero' (mid-scale adc) part in sin curve.
//-------------------------------------------------------------------------------------------------------------------------
unsigned long start = millis(); //millis()-start makes sure it doesnt get stuck in the loop if there is an error.
while(1) //the while loop...
{
startV = analogRead(inPinV); //using the voltage waveform
if ((startV < (ADC_COUNTS*0.55)) && (startV > (ADC_COUNTS*0.45))) break; //check its within range
if ((millis()-start)>timeout) break;
}
Que tens ligado nesse pino? é uma tensão AC?
É um valor de tensão ac vinda do sensor ZMPT101B.
Por que será que com uma instância apenas o código não trava?
Já experimentaste comentar a primeira instância em vez da segunda como disseste?