Skocz do zawartości
thequeash

Przerzutnik bistabilny na arduino

Pomocna odpowiedź

Serwus!

Mam problem z napisaniem programu do bardzo prostej rzeczy. Otóż chcę zrobić coś w rodzaju przerzutnika bistabilnego (nie wiem czy ta nazwa jest adekwatna akurat do tego zagadnienia). Przejdźny do rzeczy:

Bardzo prosty układ składający się z diody LED oraz JEDNEGO przycisku.

Zasada działania:

Naciskam przycisk -> dioda świeci

Naciskam przycisk -> dioda gaśnie

Naciskam przycisk -> dioda świeci

... i tak w kółko

Problem polega na tym, że mam do dyspozycji tylko jeden przycisk. Jak to rozwiązać w kwestii napisania programu? Nie umiem się za to zabrać.

Udostępnij ten post


Link to post
Share on other sites

thequeash, temat jest dość prosty i można go rozwiązać na kilka sposób. Możesz np. stworzyć zmienną, która będzie zapamiętywała jaka akcja była wykonywana poprzednio (czy włączałeś, czy wyłączałeś diodę). Wtedy przy wciśnięciu przycisku wykonywaną akcję uzależniasz od stanu zapisanego w tej zmiennej pomocniczej.

Udostępnij ten post


Link to post
Share on other sites

Jakoś w końcu rozwiązałem ten problem, poradziłem sobie tak:

int zmienna = 0;
void setup () {
 pinMode(8, OUTPUT);
 pinMode(7, INPUT_PULLUP);
}

void loop () {
 if (digitalRead(7) == LOW && zmienna == 0) {
   delay(100);
   zmienna = 1;

 }
 if (digitalRead(7) == LOW && zmienna == 1) {
   delay(100);
   zmienna = 0;
 }

 if (zmienna == 0) {
   digitalWrite(8, HIGH);
 }
 if (zmienna == 1) {
   digitalWrite(8, LOW);
 }
}

Później obejrzałem odcinek o przyciskach u elektroprzewodnika i znalazłem coś takiego:

boolean zmienna = 0;
void setup() {
 pinMode(8, OUTPUT);
 pinMode(7, INPUT_PULLUP);

}

void loop() {
 if (digitalRead(7) == LOW) {
   delay(20);
   zmienna = !zmienna;
   digitalWrite(8, zmienna);
   while (digitalRead(7) == LOW) {
     delay(20);
   }
 }

Nie rozumiem tylko zapisu

zmienna =!zmienna;

Co dokładnie on robi? W ogóle są jakieś strony, gdzie są wyjaśnione wszystkie komendy?

Udostępnij ten post


Link to post
Share on other sites
zmienna =!zmienna;

Znak wykrzyknika, to negacja. Czyli dzięki tej linijce do "zmienna" zapisywany jest zanegowana wartość tej zmiennej.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...