Skocz do zawartości

Sygnał przerywany, odczyt jako ciągły


Rayu85

Pomocna odpowiedź

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?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.