• 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
ESP8266EX + BL0397, czyli smart gniazdko i problem z pomiarem prądu
#12
A już skasowałem ten kod, ale coś wymyślimy.

Na początek zadeklarujemy zmienne jako volatile.

Kod:
volatile unsigned long currentTime = 0;
volatile unsigned long lastTime = 0;
volatile unsigned long periodTime = 0;
volatile uint_8t i = 0;

Myślę, że nie trzeba tu nic komentować.

Zdefiniujmy nazwę dla jakiegoś pinu z przerwaniem.

Kod:
#define jakis_pin 14

Definiujemy funkcję obsługi przerwania.
Z każdym narastającym impulsem inkrementowana  jest zmienna i. 
periodTime przechowuje czas między pierwszym a dziesiątym impulsem.
Kod:
ICACHE_RAM_ATTR void przerwanie() {
  i++;
  if (i==0) currentTime = millis;
  if (i==10)
  {
    lastTime = millis;
    periodTime = lastTime - currentTime;
    i = 0;
  }
}
Tak ze złośliwości nie napiszę co to za ustrojstwo ICACHE_RAM_ATTR, więc sobie poczytaj dla czego to makro jest niezbędne dla obsługi przerwań w ESP.

W setupie trzeba poustawiać wejścia i włączyć przerwanie od jakiegoś pinu.

Kod:
void setup() {

    pinMode(jakis_pin, INPUTP);
    attachInterrupt(digitalPinToInterrupt(jakis_pin), przerwanie, FALLING);
}


Po dziesięciu przerwaniach możemy już policzyć częstotliwość (jest to odwrotność czasu, jak by co).


Kod:
void loop() {
  int frequency = 10000/periodTime;
}

Ogólnie mam wrażenie, że ten kod zadziała, ale pokusiłbym się na przeniesienie tego i++ chyba 8 linii w dół.
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ź
  


Wiadomości w tym wątku
RE: ESP8266EX + BL0397, czyli smart gniazdko i problem z pomiarem prądu - przez Robson Kerman - 10-12-2019, 21:38

Skocz do:


Przeglądający: 1 gości