10-12-2019, 21:38
A już skasowałem ten kod, ale coś wymyślimy.
Na początek zadeklarujemy zmienne jako volatile.
Myślę, że nie trzeba tu nic komentować.
Zdefiniujmy nazwę dla jakiegoś pinu z przerwaniem.
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.
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.
Po dziesięciu przerwaniach możemy już policzyć częstotliwość (jest to odwrotność czasu, jak by co).
Ogólnie mam wrażenie, że ten kod zadziała, ale pokusiłbym się na przeniesienie tego i++ chyba 8 linii w dół.
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;
}
}
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.