Skocz do zawartości

Stan pinów po wyjściu z pętli / wydzielone z Kurs Arduino - #2


Pomocna odpowiedź

Napisano

Cześć, właśnie zaczynam przygodę z arduino i natrafiłem na pewny problem. W części o pętli while, w pierwszym programie nie rozumiem dlaczego po odpuszczeniu palca z przycisku świeci się ciągle czerwone światło gdy na początku po wgraniu nic się nie świeci. Na logikę to po wyjściu z pętli ( palec odpuszczony z przycisku) program powinien wrócić do momentu przed pętlą a przecież tam nic nie ma o włączeniu diody!

(edytowany)

Jeśli mówisz o tym fragmencie programu (wklejaj kod programu z którym masz kłopoty- to lepsze niż zgadywanie o co Ci chodzi)

void loop() {
 
 while (digitalRead(7) == LOW) { //Jeśli przycisk jest wciśnięty 
 digitalWrite(10, LOW); //Czerwona wyłącz
 delay(1000);
 digitalWrite(10, HIGH); //Czerwona włącz
 delay(1000);
 }
}

to po puszczeniu przycisku dioda nie powinna się świecić, gdyż na końcu pętli wykonywane jest digitalWrite(10,HIGH), które gasi LED, a warunek while() sprawdzany jest każdorazowo na początku pętli, przed jej wykonaniem. Sprawdź czy nie masz literówek w swoim programie. W tym przykładzie wykonuje się cały kod zawarty w pętli while(){} nie ma możliwości by LED pozostawał włączony.

32 minuty temu, Karliko napisał:

po wyjściu z pętli ( palec odpuszczony z przycisku) program powinien wrócić do momentu przed pętlą

Po wyjściu z pętli program nie wraca na początek lecz kontynuuje swoją pracę dalej, realizując kolejne polecenia. Tu tych poleceń nie ma, a jest koniec głównej pętli programu loop(), więc loop() się powtarza.

Edytowano przez Belferek

A to zależy jak ją podłaczyłeś do portu Arduino:

- jeśli szeregowo z rezystorem, katodą do Arduino, a anodą do +Vcc to LED włączy digitalWrite(port,LOW)

- jeśli szeregowo z rezystorem, anodą do Arduino, a katodą do GND to LED włączy digitalWrite(port,HIGH)

(edytowany)

No to nie ma opcji stanem LOW włączysz, a stanem HIGH wyłączysz taką diodę. Sprawdź swój program i połączenia na płytce, a najlepiej pokaż cały swój program.

Edytowano przez Belferek
(edytowany)

Na HIGH się włącza.

Chodzi o to dlaczego po wyjściu z pętli program zapamiętuje stan pinów (LOW, HIGH) chociaż na logikę je powinien odwołać do stanu macierzystego takiego jaki był przy uruchomieniu  programu (dioda się nie świeciła).  Oczywiście mówię tu o przypadku gdzie jest tylko pętla while i poza jej zawartością nic nie ma.

Program jest taki sam jak w kursie...

Edytowano przez Karliko

Piszesz program, a go nie pokazujesz - pokaż. Przykładowy program niczego nie pamięta, co najwyżej procesor pamięta stan portu (pinu) jaki przed opuszczeniem pętli został ustawiony. To niemożliwe by LED podłączony katodą do pinu Arduino był włączany stanem HIGH. Sprawdź połączenia, LED zawsze możesz odwrócić.

(edytowany)

Jednak odwrotnie, anodą do arduino ale w sumie to mało zmienia

Program: 

void setup() {
  pinMode(10, OUTPUT); //Dioda czerwona
  pinMode(9, OUTPUT); //Dioda żółta
  pinMode(8, OUTPUT); //Dioda zielona
 
  pinMode(7, INPUT_PULLUP); //Przycisk
 
  digitalWrite(10, LOW); //Wyłączenie diod
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
}
 
void loop() {
 
 while (digitalRead(7) == LOW) { //Jeśli przycisk jest wciśnięty 
 digitalWrite(10, LOW); //Czerwona wyłącz
 delay(1000);
 digitalWrite(10, HIGH); //Czerwona włącz
 delay(1000);
 }
 
}

tak jak pisałem skopiowany z kursu 🙂

Edytowano przez Karliko

Chcesz by Ci pomóc, a nie bierzesz pod uwagę moich próśb.

2 minuty temu, troll5662 napisał:

Z tego co wiem dioda LED może być podłączona tylko w jeden sposób.

I tu się mylisz. Każda dioda może być podłączona na dwa sposoby - w kierunku przewodzenia i w kierunku zaporowym. Pytanie jak to jest u Ciebie bo piszesz różnie.

1 minutę temu, Karliko napisał:

Jednak odwrotnie, anodą do arduino ale w sumie to mało zmienia

A katodą gdzie?

To wszystko zmienia bo przykładowy program na końcu pętli wykonuje digitalWrite(10,HIGH) czyli tego LEDa zapala.

Sprawdź połączenia.

2 minuty temu, Belferek napisał:

A katodą gdzie?

To wszystko zmienia bo przykładowy program na końcu pętli wykonuje digitalWrite(10,HIGH) czyli tego LEDa zapala.

Sprawdź połączenia.

Katodą do GND. Czyli po wyjściu z pętli program zostawia stany pinów z ostatnich linijek?

Wszystko jest OK 🙂 troszeczkę Karliko zamieszał mówiąc o różnych połączeniach i ja też ale nie pokazałeś od początku swojego projektu. Jeśli masz układ taki jak tu https://forbot.pl/blog/kurs-arduino-podstawy-programowania-porty-io-id3648

to na końcu pętli LED jest włączany, a jak chcesz by LED się nie świecił to zamień odpowiednio LOW na HIGH i HIGH na LOW - będzie OK.

4 minuty temu, Karliko napisał:

Czyli po wyjściu z pętli program zostawia stany pinów z ostatnich linijek?

Raz wpisana wartość jest "pamiętana" przez procesor (nie program). Program może to oczywiście zmienić - dlatego LED np. miga.

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