13-03-2018, 14:46
Może się mylę, ale może mikrokontroler pracuje zbyt szybko i zbiera impulsy wielokrotnie, bo po prostu zdąży
Spróbuj dopisać do funkcji Odleglosc() blokadę, która zatrzymuje działanie programu tak długo, jak wartość z enkodera się nie zmienia. Możesz to zrobić za pomocą while:
Wtedy taka funcja miałaby postać:
W takim wypadku program wyjdzie z tej pętli tylko w przypadku, kiedy sygnał na pinie 1 przestanie mieć wartość 1.
Spróbuj dopisać do funkcji Odleglosc() blokadę, która zatrzymuje działanie programu tak długo, jak wartość z enkodera się nie zmienia. Możesz to zrobić za pomocą while:
Kod:
while(digitalRead(1)==HIGH){}
Kod:
void Odleglosc ()
{
impulsy++;
while(digitalRead(1)==HIGH){}
}