Skocz do zawartości

Sygnał przerywany, odczyt jako ciągły


Pomocna odpowiedź

Napisano

Witam, nie bardzo wiem jak nazwać to co chcę zrobić, mianowicie potrzebuję napisać kod który na wejściu dostanie sygnał przerywany (taki jak np. z migacza samochodowego), i dopóki ten sygnał będzie się pojawiać to na innym pinie będzie stan wysoki. Przykładowo wrzucamy nasz migacz, i dopóki go nie wyłączymy na innym pinie jest stan wysoki, po wyłączeniu "migacza" ustawia się stan niski.

Gdyby był to sygnał ciągły to nie było by problemu, ale tak nie jest.

Można by to było zrobić na zasadzie takiej że jeśli np. na pinie 9 (przez 2 sek nie pojawi się napięcie, to zmień stan na pinie np.10).

Funkcja mogła by brzmieć "Jeżeli na pinie 9 w przeciągu 2 sek pojawił się stan wysoki, utrzymuj stan wysoki na pinie 10, przeciwnie ustaw stan niski na pinie 10"

Ewentualnie można by zrobić to na przerwaniu, wtedy każde pojawienie się stanu wysokiego powodowało by na przerwaniu "reset" licznika, a po wyłączeniu migania, napięcie było by do końca czasu odliczania.

Jakie są wasze rady na rozwiązanie takiego problemu?

Kolega z sąsiedniego wątku moim zdaniem nie rokuje.. Spróbuję pokazać jakiś pomysł, czy coś takiego rozumiesz?:

int
  poprzedni_stan,
  obecny_stan,
  licznik_czasu;

while(1)
{
  obecny_stan = digitalRead(wejscie);
  if (obecny_stan != poprzedni_stan)
  {
     licznik = 200;
     poprzedni_stan = obecny_stan;
     digitalWrite(wyjscie, 0);
  }
  else
  {
     if (licznik > 0)
        licznik--;
     else
        digital_Write(wyjscie, 1)
  }
  delay(10)
}

Pisałem z głowy na kolanie. Nie jest to kompletny kod, nie używa przerwań i blokuje pracę procesora zawłaszczając 100% jego mocy obliczeniowej na delay'e, ale idea chyba zadziała.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...