maly145 Napisano Styczeń 19, 2019 Udostępnij Napisano Styczeń 19, 2019 (edytowany) Dzień dobry jestem tutaj nowy. Chciałem się przywitać jak również prosić o pomoc. To moje początki z Arduino po miganiu diodą chciałem przejść dalej mianowicie do instrukcji 'if". Z założenia według mnie proste po podaniu 5V na pin analogowy np. A5 następuje podanie stanu wysokiego na pinie 7 PWM gdzie podłączona jest dioda LED. Napisałem takie coś bo inaczej nie moge tego nazwać... lecz nie działa albo błąd odrazu podczas kompilacji typu nawiasy lub średnik. Jeżeli już nawet przejdzie kompilacje to nie działa w ogóle. Proszę was o pomoc ew. o podesłanie materiałów linków itp gdzie jest to w miare prosto opisane wszystkie podstawy void setup() { pinMode(A5, INPUT); pinMode(7, OUTPUT); } void loop() { if(analogRead(A5), HIGH){ pinMode(7, HIGH);} Przykłady tego typu jak poniżej moim zdaniem powinny lądować w koszu. Nie rorzumiem dlaczego nie może być zrobiony prosty przykład na diodzie LED PS. we wszystkich opisach instrukcji IF jest tylko napisane: "Warunki służą do podejmowania decyzji w programie. Tworzy się je za pomocą polecenia if [ang. czy?]. if () { } Jeśli warunek z nawiasu jest spełniony, to zostanie wykonany kod znajdujący się między klamerkami." Edytowano Styczeń 20, 2019 przez Treker Poprawiłem formatowanie.
Belferek Styczeń 19, 2019 Udostępnij Styczeń 19, 2019 (edytowany) 20 minut temu, maly145 napisał: if(analogRead(A5), HIGH) Instrukcja if oczekuje warunku do sprawdzenia, a ty umieszczasz dwa parametry rozdzielone przecinkiem. Składnia jest taka: if(warunek) wykonaj_jeśli_warunek_jest_spełniony; Jeśli warunek jest spełniony, jest prawdziwy to program wykona określony kod. Prawda to w programowaniu true, 1, HIGH. Prawda to także zanegowany fałsz. Twój warunek powinien więc wyglądać: if(digitalRead(A5)==HIGH) cos_tam lub np. if(digitalRead(A5)) cos_tam lub np. if(digitalRead(A5)!=LOW) cos_tam lub np. if(digitalRead(A5)==1) cos_tam itp. pinMode - nie ustawia portu w stanie HIGH lub LOW lecz ustawia tryb jego pracy (wejście, wyjście) Do ustawienia portu cyfrowego w odpowiednim stanie należy użyć digitalWrite(port, stan) np. digitalWrite(7,HIGH); Edytowano Styczeń 19, 2019 przez Belferek 1
Treker (Damian Szymański) Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 @maly145, witam na forum Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start: Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników. Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć? Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości. Dnia 19.01.2019 o 13:42, maly145 napisał: To moje początki z Arduino po miganiu diodą chciałem przejść dalej mianowicie do instrukcji 'if". Z założenia według mnie proste po podaniu 5V na pin analogowy np. A5 następuje podanie stanu wysokiego na pinie 7 PWM gdzie podłączona jest dioda LED. Mam wrażenie, że trochę mylisz (przynajmniej w programie) to czym są wejścia analogowe od cyfrowych i do tego masz jeszcze błędy w składni. Daj najpierw znać co dokładnie chcesz osiągnąć, czy chodzi Ci faktyczny o pomiar tych 5V na wejściu, czy po prostu chcesz sprawdzić czy przycisk został wciśnięty/zwarł wejście do 5V? Polecam również lekturę kursu Arduino, bo już 2 drugiej lekcji jest tam opisany przykład wykorzystania warunku do włączenia diody. Może to coś rozjaśni? Kurs Arduino – #2 – podstawy programowania, porty I/O
maly145 Styczeń 20, 2019 Autor tematu Udostępnij Styczeń 20, 2019 (edytowany) Witam na wstępie chciałem podziękować użytkownikom "Belferek" za odpowiedź jak i "Treker" za materiały i podpowiedzi. Odnośnie programu to tylko proste próby jakie chciałem wykonać. Tak na początku chciałbym podać 5V i sprawić aby program poszedł dalej później to samo tylko z przyciskiem. Na razie wygląda to tak jak poniżej: void setup() { pinMode(A5, INPUT); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(3, OUTPUT); pinMode(2, OUTPUT); } void loop() { if(digitalRead(A5)==HIGH) // Sprawdzenie warunku czy podano 5V lub wciśnięcie przycisku. { digitalWrite(7, HIGH); // Diody zapalające się jedna po drugiej od nr: 7 do 3. delay(2500); digitalWrite(6, HIGH); delay(2000); digitalWrite(5, HIGH); delay(1500); digitalWrite(4, HIGH); delay(1000); digitalWrite(3, HIGH); delay(500); digitalWrite(2, HIGH); // Dioda która sygnalizuje błąd w przypadku nie spełnienia warunku. delay(250);} } PS. Program startuje przy 5V ale również 3.3V sprawia że zaczyna działać. Chciałbym dodać też do tego warunek else. moja wizja jest taka jeżeli po 5 sek nie zostanie podane 5V na pin A5 to np zapali się dioda na pinie PWM 2 oznaczająca bląd. I mam jeszcze pytanie jak sprawić żeby program zawracał na początek po wykonaniu wszystkich lini kodu ?? tak na przyszłość... dziękuje za wyrozumiałość i przepraszam za wszystkie błędy jeżeli coś źle nazwałem. Edytowano Styczeń 20, 2019 przez maly145
Belferek Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 (edytowany) 1 godzinę temu, maly145 napisał: na początku chciałbym podać 5V To nie do końca jest tak, że HIGH czyli logiczna 1 jest równa 5 V. W zależności od standardu układu z tym jest różnie - zobacz poziomy TTL Źle się czyta Twój kod. W czasie redagowania postu do wklejenia kodu użyj znacznika Kod czyli <> 1 godzinę temu, maly145 napisał: digitalWrite(2, HIGH); // Dioda która sygnalizuje błąd w przypadku nie spełnienia warunku. Tyle, że ta dioda będzie się świecić (po czasie) gdy warunek jest spełniony. Instrukcja ta jest w bloku instrukcji if(warunek {} Twój programik może wyglądać tak: void setup() { pinMode(A5, INPUT); for(int k=2; k<=7; k++) pinMode(k, OUTPUT); } void loop() { if(digitalRead(A5)==HIGH) // Sprawdzenie warunku czy podano 5V lub wciśnięcie przycisku. { for(int k=7; k>2; k--) { digitalWrite(k,HIGH); delay(2500-(7-k)*500); } } else { digitalWrite(2, HIGH); // Dioda która sygnalizuje błąd w przypadku nie spełnienia warunku. delay(250); } } Sprawdź czy działa? Spróbuj go przeanalizować. Czy jest dla Ciebie czytelny - postaraj się go zrozumieć. 1 godzinę temu, maly145 napisał: mam jeszcze pytanie jak sprawić żeby program zawracał na początek po wykonaniu wszystkich lini kodu Praktycznie nic nie robisz. Twój program działa w obrębie funkcji loop(), a loop to po polsku właśnie pętla. To główna pętla programu. Instrukcje zawarte w tej funkcji są kolejno wykonywane, a po wykonani ostatniej automatycznie program wraca na początek tej pętli - to taka nie kończonca się pętla. Edytowano Styczeń 20, 2019 przez Belferek
Elvis Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 Używanie pętli przy konfiguracji pinów to paskudny nawyk. Ale nawet jeśli już ktoś takie gafy popełnia to może chociaż bez błędów: for(int k=2; k<7; k++) pinMode(k, OUTPUT); (podpowiedź: czy pin 7 działa poprawnie?)
Belferek Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 (edytowany) Elvis czujnie zauważył , że chcąc używać pinu 7-go pętla for przy ustawieniu trybu pracy portów powinna wyglądać np. tak: for(int k=2; k<=7; k++).... Liczyłem na to, że wyłapie to analizujący przykład maly145 (chyba, że jest reinkarnacją xirtt) , no ale wyłapał Elvis . 1 godzinę temu, Elvis napisał: Używanie pętli przy konfiguracji pinów to paskudny nawyk A to niby dlaczego - przecież pętle to naturalne narzędzie do tego typu zastosowań, do wykonywania powtarzających się "czynności" w/g jakiegoś tam indeksu pętli? Edytowano Styczeń 20, 2019 przez Belferek
Elvis Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 (edytowany) Używanie int do numeracji pinów oraz naiwne stosowanie pętli ma co najmniej trzy wady. Po pierwsze jest złe! Po drugie, jest to błąd logiczny. Pin nie jest integerem, co jeśli ktoś odwoła się do pinu -1, albo 1234. To powinien być typ wyliczeniowy, albo coś podobnego. W każdym razie używanie int to błąd popełniony w Arduino, aby uczynić życie początkujących łatwiejszym, ale to nadal błąd. Efektem jest możliwość inkrementacji, ale jaki jest sens pin++? Przecież prawdziwych pinów nie można zwiększać. Tak samo pin +=5, czy pin -=100 - to logicznie bez sensu. O mnożeniu i pierwiastkowaniu pinów nawet nie wspomnę. Po trzecie wreszcie, skąd pomysł, że diody będą zawsze podłączone do kolejnych pinów? Oczywiście w prostym przykładzie i na płytce stykowej możemy tak zrobić, ale w realnym świecie i prawdziwych projektach rzadko kiedy mamy luksus podłączenia w sposób wygodny dla programisty. Więc drobna zmiana w projekcie, podłączenie diodek do pinów 2,3, 5,6,7,8 i cała skomplikowana konstrukcja z for() jest w koszu. Co najgorsze to minimalna zmiana, a kod trzeba w wielu miejscach połatać. Tak więc używanie pętli w taki sposób jest jeszcze gorsze niż kopiuj-wklej. Można, nawet warto użyć pętli - ale lepiej, nie tak jak w tych przykładach. Edytowano Styczeń 20, 2019 przez Elvis 1
Belferek Styczeń 20, 2019 Udostępnij Styczeń 20, 2019 2 minuty temu, Elvis napisał: Więc drobna zmiana w projekcie, podłączenie diodek do pinów 2,3, 5,6,7,8 i cała skomplikowana konstrukcja z for() jest w koszu. Oczywiście i każdy prędzej czy później dochodzi do wniosku, że warto rozważyć co i gdzie podłączamy. Kolega maly145 jeszcze chwilę będzie potrzebował by zauważyć różnicę pomiędzy różnymi typami zmiennych więc nie chciałem komplikować.
krif38 Kwiecień 19, 2020 Udostępnij Kwiecień 19, 2020 Jestem początkujący i zaczynam od prostych rzeczy dziękuje za poradę prosił bym żebyś mi to napisał mam płytkę dopiero dwa dni dziękuje
krif38 Kwiecień 21, 2020 Udostępnij Kwiecień 21, 2020 Witam mam pytanie czy można dodać do programu listy obsługujących płytek arduino nowa której nie ma na liście np Seeeduino Xiao
Belferek Kwiecień 21, 2020 Udostępnij Kwiecień 21, 2020 (edytowany) krif38 zajrzyj do dokumentacji producenta. Oczywiście, że można wszystko masz tu napisane: zobacz Edytowano Kwiecień 21, 2020 przez Belferek 1
krif38 Kwiecień 22, 2020 Udostępnij Kwiecień 22, 2020 Witam jestem początkującym użytkownikiem arduino .Bardzo bym prosił o napisanie programu z dokładnym opisem gdzie copodlaczyc , na mostek H . L293D silnik ma się kręcić raz w lewo , raz w prawo z możliwością ustawiania czasu obrotów w lewo , i prawo Bardzo dziękuje
ethanak Kwiecień 22, 2020 Udostępnij Kwiecień 22, 2020 Ja tak w kwestii formalnej: co to ma wspólnego z instrukcją IF?
Pomocna odpowiedź
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ę »