Skocz do zawartości

Kurs Arduino - #2 - podstawy programowania, porty I/O


Komentator

Pomocna odpowiedź

Cześć,
Dziś zacząłem przygodę z Arduino i niestety nie mogę rozwiązać jednego problemu: po skompilowaniu pierwszego programu , wykorzystującego przycisk i diodę oraz wgraniu go na płytkę, dioda zapala się sama i świeci na stałe (tak, jakby program wykonywał zadania niezależnie od warunków) lub kiedy jednak się nie zaświeci i zrobię to za pomocą wciśnięcia przycisku, to zapala się ona na stałe, po czym trzeba zresetować układ. Wychodzi na to, jakby funkcja "else" nie działała poprawnie. Kiedy zamiast else użyję delay, dioda normalnie gaśnie i jest okej - normalnie reaguje na przycisk. Bardzo proszę o pomoc, bo nie wiem czy z płytką jest coś nie tak, czy też ja jednak coś źle robię.. Próbowałem również tak i również nie działa:

void setup() {
 pinMode(10, OUTPUT); //Dioda czerwona

 pinMode(7, INPUT_PULLUP); //Przycisk

 digitalWrite(10, LOW); //Wyłączenie diod

}

void loop()
{

 while(digitalRead(7)==LOW)
 {
 digitalWrite(10, HIGH);
 }
 while(digitalRead(7)==HIGH){
 digitalWrite(10, LOW);
 }

}
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

Tak już próbowałem, teraz dla pewności też skopiowałem i nie działa. A kod, który wkleiłem, to po prostu chciałem zrobić to w inny sposób. Chodzi o to, że mój układ nie reaguje na puszczenie przycisku. Po wciśnięciu dioda się zapala, a po puszczeniu powinna zgasnąć, jednak tak się nie dzieje (kolejne programy z kursu działają, jednak nie ten pierwszy, który w czasie trzymania przycisku świeci diodą, a puszczenia ją gasi). Poza tym nawet po resecie czasem dioda sama się zapala i muszę zresetować kilka razy, aby zgasła.

Dodatkowo podczas wgrania pierwszego programu z lekcji UART nie wyświetla mi "Witaj na Forbocie!" 🙁 a kiedy najpierw włączam monitor szeregowy, przed startem programu, wyrzuca mi błąd. Coś tu nie gra, może mam coś wyłączone?

Link do komentarza
Share on other sites

Mam wszystko dobrze podłączone. Zresztą inaczej inne programy również by mi nie działały, jakby było źle. A co do drugiego, to wiem, że trzeba poczekać, aż przejdzie pasek 😋 tylko po włączeniu monitora szeregowego program jest już dalej, czyli nie wyświetla mi "Witaj na Forbocie", a jak włączę monitor wcześniej, to wyrzuca błąd. Po resecie na arduino nic się nie wyświetla, więc nie wiem, jak inaczej można odpalić program od nowa, nie wgrywając go ponownie na płytkę.

Link do komentarza
Share on other sites

Tak, jak pisałem już wcześniej, mam problemy z:

-przy wciśnięciu i puszczeniu przycisku dioda nie gaśnie(nie reaguje na puszczenie przycisku), tylko trzeba resetować arduino,
-czasem diody się świecą już od startu programu i trzeba kilka razy resetować (lub świecą bardzo słabo i wtedy pomaga poruszenie przewodami przy arduino)

-przy monitorze szeregowym, jak włączam, to program jest w trakcie działania i nie wyświetla mi tego, co jest w void setup (przy zliczaniu, kiedy włączę monitor liczy mi np. od 10, czyli program ruszył wcześniej i nie wyświetla mi wcześniejszych zadań), a kiedy włączę monitor przed wgraniem programu, to wyświetla mi się błąd (zdjęcie wyżej).

Wszystko inne mi działa, ustawione mam w programie genuino 101, przewody mam podłączone dobrze. Nie wiem czy trzeba w jakichś ustawieniach coś zmienić jeszcze (choć nic takiego nie widziałem), czy też z płytką jest coś niedobrego

Link do komentarza
Share on other sites

dawid_s, po pierwsze nie otwieraj monitora przed zaprogramowaniem. Rób to po. Zawsze układ jest wtedy resetowany i działa poprawnie. Piszesz, że masz ustawione w programie Genuino 101, ale nigdzie nie napisałeś, czy faktycznie używasz tej płytki. Wklej ostateczną wersją swojego programu, który nie działa i napisz na jakim układzie ją uruchamiasz. Mam pod ręką sprzęt - sprawdzę, czy po wgraniu wszystko działa poprawnie.

Link do komentarza
Share on other sites

Witam!

Wymyśliłem sobie aby napisać program, który będzie włączał diodę zieloną tylko wtedy kiedy zostaną spełnione 4 warunki. Jeżeli którykolwiek lub kilka warunków nie zostanie spełnione, ma się zapalać jedna lub kilka diod czerwonych. Problem jest taki, że nie wiem co robię źle. Używam tylko IFów, ELSEów oraz WHILE. A może nie da się tego napisać tylko przy pomocy tych komend?

Tak wygląda mój program:

#define error1 2

#define error2 3

#define error3 4

#define error4 5

// Diody sygnalizujace blad

#define start 6

// Dioda sygnalizujaca brak bledow i zezwalajaca na start

#define pierwszy 8

#define drugi 9

#define trzeci 10

#define czwarty 11

// Warunki do spelnienia (np. Wylaczniki krancowe)

void setup() {

pinMode (error1, OUTPUT);

pinMode (error2, OUTPUT);

pinMode (error3, OUTPUT);

pinMode (error4, OUTPUT);

pinMode (start, OUTPUT);

pinMode (pierwszy, INPUT);

pinMode (drugi, INPUT);

pinMode (trzeci, INPUT);

pinMode (czwarty, INPUT);

digitalWrite(error1, LOW);

digitalWrite(error2, LOW);

digitalWrite(error3, LOW);

digitalWrite(error4, LOW);

digitalWrite(start, LOW);

}

void loop() {

while

(digitalRead(pierwszy) == HIGH);

(digitalRead(drugi) == HIGH);

(digitalRead(trzeci) == HIGH);

(digitalRead(czwarty) == HIGH);

digitalWrite(start, HIGH);

if (digitalRead(pierwszy) == LOW) {

digitalWrite(error1, HIGH);

} else {}

if (digitalRead(drugi) == LOW) {

digitalWrite(error2, HIGH);

} else {}

if (digitalRead(trzeci) == LOW) {

digitalWrite(error3, HIGH);

} else {}

if (digitalRead(czwarty) == LOW) {

digitalWrite(error4, HIGH);

} else {}

}

Co robię źle?

Z góry dzięki za jakieś podpowiedzi

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Link do komentarza
Share on other sites

Po pierwsze nauczyć się czytać i rozumieć to co czytasz. Konkretniej chodzi o

Uwaga! Wszystkie kody programów muszą być umieszczane wewnątrz tagów (code] (/code]!

Jeśli chodzi o odpowiedź na pytanie to zastanów się jak wygląda struktura pętli while w C/C++, przeanalizuj swój program, może coś zauważysz.

Link do komentarza
Share on other sites

Podstawowy błąd jaki popełniłeś to próby programowania w C przed przeczytaniem tej książki:

http://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm

Przez pierwszy tydzień powinna to być Twoja lektura do poduszki a potem stać na półce w zasięgu ramienia. Przez pierwsze pół roku pisania programów będziesz po nią sięgał co najmniej raz dziennie. Alternatywą jest gubienie się w najprostszych rzeczach i nierozumienie działania tego co się napisało. Sam zakup płytki Arduino, instalacja jego IDE i próby używania jakichś przypadkowych struktur języka (nie komend!) wziętych z przykładów bez jakiegokolwiek przygotowania teoretycznego to strata czasu. Twojego i naszego.

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.