• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujnik SCT013
#1
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
}
 
Odpowiedź
#2
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);
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
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.
 
Odpowiedź
#4
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.
Pomagam (nie prowadzę kursów), tylko, gdy w poście załączone są niezbędne materiały (kod, schemat) a pytający zna podstawy.

Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!




 
Odpowiedź
#5
Witam,
Nigdy, przenigdy nie stosuj porównania dla licz innych od całkowitych.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości