No to zrobiłbym to tak:
Kod działa w taki sposób:
Kiedy na pinie 2 wykryte jest zbocze opadające, to wykonuje się funkcja "zbocze", czyli zmienna liczba_impulsow się zwiększa o 1. Częstotliwość to liczba okresów w sekundzie, więc co sekundę liczba_impulsow staje się częstotliwością[Hz], a sama jest zerowana i zaczyna się liczenie od nowa, można by, np ten czas zwiększyć do 2 sekund, a wynik podzielić przez 2 (zwiększyć dokładność) lub zmniejszyć czas, a wynik pomnożyć (zwiększyć częstość odświeżania , ale zmniejszyć dokładność)
Widzę, że tam napięcie nie waha się między 0 a 5V, więc wypadałoby zastosować dzielniki napięcia czy diody, dla pewności, żeby sobie procka nie uszkodzić
Kod:
float liczba_impulsow;
float czestotliwosc;
unsigned long CZAS=1000;
unsigned long CZAS1;
void setup()
{
pinMode(2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), zbocze, FALLING);
Serial.begin(250000);
}
void loop()
{
CZAS1=millis();
if(CZAS1==CZAS)
{
CZAS = CZAS + 1000;
czestotliwosc = liczba_impulsow;
liczba_impulsow=0;
}
if(czestotliwosc==0)
{
//kod dla braku sygnalu
}
if(czestotliwosc>0 && czestotliwosc<4)
{
//kod dla 2.22Hz
}
if(czestotliwosc>=4)
{
//kod dla 13 Hz
}
}
void zbocze()
{
liczba_impulsow++;
}
Kiedy na pinie 2 wykryte jest zbocze opadające, to wykonuje się funkcja "zbocze", czyli zmienna liczba_impulsow się zwiększa o 1. Częstotliwość to liczba okresów w sekundzie, więc co sekundę liczba_impulsow staje się częstotliwością[Hz], a sama jest zerowana i zaczyna się liczenie od nowa, można by, np ten czas zwiększyć do 2 sekund, a wynik podzielić przez 2 (zwiększyć dokładność) lub zmniejszyć czas, a wynik pomnożyć (zwiększyć częstość odświeżania , ale zmniejszyć dokładność)
Widzę, że tam napięcie nie waha się między 0 a 5V, więc wypadałoby zastosować dzielniki napięcia czy diody, dla pewności, żeby sobie procka nie uszkodzić