Skocz do zawartości

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


Karliko

Pomocna odpowiedź

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!

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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)

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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.

Link do komentarza
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!

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

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.