Arduino Polska Forum

Pełna wersja: Czujnik SCT013
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
Ostatnio zakupiłem czujnik natężenia prądu SCT013 . Udało mi się ogarnąć kod na zczytywanie wartości natężenia lecz chciałbym aby mikrokontroler  zaświecił diodą wówczas gdy pobór prądu osiągnie daną wartość i utknąłem w miejscu :/ Dodam, że nie jestem lotny w tych sprawach Tongue

Oto co napisałem:
Kod:
#include <EmonLib.h>

EnergyMonitor emon1;                   // Create an instance
 
void setup()
{  
  pinMode(8, OUTPUT);
  Serial.begin(9600);
  emon1.current(1, 30);             // Current: input pin, calibration.

}
 
void loop()
{
  
double Irms = emon1.calcIrms(1480);  // Calculate Irms only

  if (emon1.calcIrms(1480) == 0.01){
    digitalWrite(8,HIGH);
   }
  else if (emon1.calcIrms(1480) == 0.04){
  digitalWrite(8,LOW);
}
  
  
  Serial.println(emon1.calcIrms(1480));           // Irms
}
Być może zmienna Irms osiąga założoną wartość, ale moment w którym ją osiąga nie jest współbieżny czasowo z momentem, w którym program sprawdza ifa. Tak to można obrazowo przedstawić.
Lepiej jest zastosować widełki, (nie znam założeń programu więc improwizuję) coś w stylu:


Kod:
if (emon1.calcIrms(1480) >= 0.01) digitalWrite(8,HIGH);
else if (emon1.calcIrms(1480) >= 0.04) digitalWrite(8,LOW);
Przy ułamkach nigdy nie stosuj porównania (==), wartość liczby zmiennej takiej jak float i double jest w pewnym stopniu losowa, w szczególności jeśli wykonasz wielokrotnie nawet proste obliczenia użyciem float, to coś co powinno być zgodnie z wiedzą matematyczną 1.25 może być 1.25002 i już równość nie będzie spełniona nigdy. Dodatkowo dla takiego programu jak Twój dobrze jest dobrać histerezę, tak by na granicy działania ledy nie robiły stroboskopu.
Widzę, że Arduino libs, ponownie, NIEPOTRZEBNIE używa liczb zmiennoprzecinkowych. To jakaś choroba? Całe to Arduino to chory organizm. Delay, float, String pożerający RAM.
Wywal tą chora bibliotekę EmonLib.h i te kilka linijek napisz porządnie bez użycia float.
Witam,
Nigdy, przenigdy nie stosuj porównania dla licz innych od całkowitych.