Skocz do zawartości
Komentator

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

Pomocna odpowiedź

Dobrze, że dopytujesz. Nie pisałem o żadnych niestabilnościach zestyku - to sprawa późniejsza. Zapomnij o automatyce, telematikach itp rzeczach. Miałeś się zastanowić co zmienia stan wyjścia - proste pytanie. Z punktu widzenia programu masz pin wejściowy na który dostajesz, powiedzmy, stan 0 gdy przycisk jest wciśnięty i stan 1 gdy puszczony. To jeszcze raz: co (jakie wydarzenie) powinno zmieniać stan wyjścia (na przeciwny) żebyś dostał takie działanie jak opisałeś? Jeśli to wymyślisz, będziesz wiedział jakie zdarzenie musisz w programie wykrywać i zaraz też wpadniesz na to jak to zrobić. Bez tego dalej nie pójdziesz.

Udostępnij ten post


Link to post
Share on other sites

Domyślam się, że chodzi o zbocze. Narastające lub opadające.

Tylko, że jego wykrycie to jedno. Drugie to fakt, że ono zawsze będzie takie samo - wyjście będzie musiało reagować odwrotnie na co drugie zbocze na wejściu

Udostępnij ten post


Link to post
Share on other sites

Na razie się tym nie przejmuj. Programowanie Arduino jest wbrew pozorom dużo większym wyzwaniem niż programowanie sterowników przemysłowych. One z definicji mogę robić wiele rzeczy na raz. Skupiasz się na jednej a reszta wykonuje się równolegle: liczą się czasy, wyzwalają się i gasną wyjścia monostabilne uzależnione od jakichś wejść lub innych sygnałów itd. Z resztą na pewno wiesz lepiej.

Tutaj tak nie ma. Masz jeden procesor i jeden program robiący jedną rzecz, ciągnący jeden wątek. Jeśli sam nie zadbasz o to by móc robić kilka rzeczy na raz, utkniesz jak większość początkujących w programach opartych o niezliczone wywołania delay() marnujące potencjał procesora i uniemożliwiające robienie ciekawych rzeczy.

A wracając do początku: jak wykryć zbocze? Wyobraź sobie, że masz napisać funkcję którą wołasz dość często, a ona ma oddać true gdy nastąpiła zmiana stanu przycisku (gdzieś między kolejnymi jej wywołaniami) z puszczonego na wciśnięty. Umiesz to zrobić?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam

jestem nowy w Arduino, dopiero co kupiłem starter kit i mam pytanie:

1. jak podłącze arduino po usb do komputera następnie załaduje jakiś program wyjme usb i potem znowu podłącze pod usb to w pamięci mikrokontrolera będzie ostatnio załadowany program tak? jeśli tak to jak najbezbieczniej wyzerować program w mikrokontrolerze tak żeby po złożeniu nowego układu elektronicznego i podłączeniu pod usb nie wystartował stary program bo może coś pomieszać w nowym układzie, czy najlepiej wgrywać przed odłączeniem usb po prostu program "blink" czy jest inny sposób?

2. co robi przycisk RESET na płytce arduino? czy on uruchamia załadowany program od nowa czy resetuje do zera mikrokontroler?

3. teraz pytanie ktore niejako jest związane bezpośrednio z tym tematem do artykułu, a mianowicie chciałbym się zapytać o światła drogowe:

jak zrobić żeby po wciśnieciu przycisku (i puszczeniu go) uruchamiała się sekwencja świateł drogowych a przy następnym wciśnieciu tego samego przycisku wszystkie diody zgasły (czyli wyłączamy układ)

jestem na początku kursu i pewnie brakuje mi tu jakiejś opcji/funkcji warunkowej jakby ktoś mógł podać kod jak to zrobić to będę wdzięczny, a może prościej prosiłbym o kod który działa tak:

wciskam przycisk raz (puszczam) i miga sobie jedna dioda co sekunde -> wciskam przycisk drugi raz (puszczam) i przestaje migać dioda -> wciskam przycisk trzeci raz i znowu miga i tak dalej

to już bym sobie dopasował do przykładu ze światłami drogowymi

z góry dzięki za pomoc i prosze o wybaczenie pytań laika 🙂

Udostępnij ten post


Link to post
Share on other sites

AmatorArduino, witam na forum 🙂

1) Z tego, co wiem, to Arduino IDE nie ma opcji kasowania programu wgranego do Arduino. Najprościej wgrywać więc ręcznie "pusty" program (taki jak niżej) lub wspomnianego "blinka".

void setup() {
 // put your setup code here, to run once:

}

void loop() {
 // put your main code here, to run repeatedly:

}

2) Przycisk Reset odpowiada za zresetowania mikrokontorolera, czyli uruchomienie programu od nowa. Jego wciśnięciu nie powoduje usunięcia programu. Zachęcam do testów w praktyce 🙂

3) Do rozwiązania opisanego przez Ciebie problemu najlepiej wykorzystać zmienną, która pozwoli zliczać wciśnięcia przycisku. Informacje na ten temat są opisane w dalszej części kursu. Proponuję więc iść spokojnie dalej - wszystko powinno się rozjaśnić 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam,

Mam banalne pytanie. Dopiero zaczynam równolegle kursy arduino i elektroniki i zastanawia mnie kwestia zasilania płytki stykowej przez arduino.

Z tego co się dowiedziałem to prąd musi przepłynąć z plusa do minusa tak? A na schematach z podłączeniem diody wychodzi na to że GND arduino podłączone jest do minusa i rezystorem z minusa idzie do diody. A anoda jest połączona do PORTU arduino.

Tak, więc z której strony wpływa prąd do diody? Na moje rozumowanie skoro GND idzie do minusa to prąd powinien wpływać z portu arduino do anody diody i przepływa do minusa. Ale skoro tak to dlaczego rezystor znajduje się w minusie? Myślałem, że rezystor powinien być w miejscu gdzie prąd wpływa do elementu?

Z góry dziękuję za wyjaśnienie.

Udostępnij ten post


Link to post
Share on other sites

dejmieno, witam na forum 🙂 Kolejność elementów w połączeniu szeregowym (tak jak tutaj dioda - rezystor) nie ma żadnego znaczenia. Niezależnie od kolejności elementów prąd musi przepłynąć i tak przez cały obwód. Najlepiej sprawdź to podłączając diodę do baterii przez rezystor (a następnie zamień kolejność elementów). W działaniu układu nie zobaczysz żadnej różnicy. Po drugie kierunek, z którym płynie prąd ("od plusa do minusa"), to tylko umownie przyjęty kierunek - nie ma to jednak żadnego wpływu na działanie tego układu.

Udostępnij ten post


Link to post
Share on other sites

Dziękuję za odpowiedź to już rozumiem ułożenie rezystora. To jeszcze kwestia zasilania w arduino. Nie bardzo rozumiem pojęcia samej masy GND, ale rozumiem, że pełni ona rolę zasilania i jest + lub -. Kabelkiem z wejścia GND arduino zasilam płytkę.

Więc:

1. Czy mogę podpiąć GND do plusa, czy musi to być minus?

2. Proszę mnie poprawić, jeśli źle rozumiem zasadę działania płytki.

- GND charakteryzuje się tym że może być + lub - tak? Więc jeśli dany port arduino jest ustawiony jako wyjście to prąd płynie kablem z danego portu do diody i wypływa do minusa tak? A jeśli port jest ustawiony na input to prąd płynie z GND tak?

3. Ciekawi mnie co się stanie gdy podłączę diodę bez resytora i bez podłączenia do GND a tylko kabelkiem do portu arduino.

Udostępnij ten post


Link to post
Share on other sites
1. Czy mogę podpiąć GND do plusa, czy musi to być minus?

Podłączając GND do "plusa" robisz zwarcie. Nie wiem czy dobrze rozumiem Twoje pytanie... Minus, masa i GND to określenie jednego z biegunów zasilania. Natomiast drugi biegun zasilania nazywamy jako plus, dodatnia szyna zasilania lub vcc. (Pisząc w dużym uproszczeniu.)

Na pytanie drugie nie odpowiadam, ponieważ Twoja teza jest całkowicie błędna. GND to masa zasilania (minus z baterii), więc nie może być równa vcc. Nie rozumiem co dokładnie miałeś więc na myśli.

3. Ciekawi mnie co się stanie gdy podłączę diodę bez resytora i bez podłączenia do GND a tylko kabelkiem do portu arduino.

Spalisz diodę i/lub Arduino.

Może zajmij się na początek samym kursem elektroniki?

Jeśli tutaj zrobisz jakiś błąd, to możesz uszkodzić Arduino 😉

Dla jasności jeszcze cytuję dwa fragmenty tego artykułu:

Układ należy podłączyć zgodnie z poniższym rysunkiem. Diodę łączymy szeregowo z rezystorem (330R). Następnie dłuższą nóżkę diody (anodę) łączymy z wyprowadzeniem nr 8. Drugą, przez rezystor z masą, którą znajdziemy w złączu zasilania (opisaną jako GND).

Brak rezystora możesz doprowadzić do USZKODZENIA podłączonych elementów, a nawet Arduino!

Udostępnij ten post


Link to post
Share on other sites

Ok, dzięki za odpowiedź.

Postaram się więcej czasu poświęcić na kurs elektroniki 🙂.

Udostępnij ten post


Link to post
Share on other sites

A w przypadku przycisku nie musimy korzystać z rezystorów?

Udostępnij ten post


Link to post
Share on other sites

Fajnie, że działa lub nie, ale moje pytanie brzmi, dlaczego muszę podawać stan pinu w SETUP-ie przy funkcji IF / WHILE, skoro w pierwszej części wyraźnie , iż stany podajemy dopiero w PĘTLI , a SETUP służy do określenia statusu pina. Jeżeli to nowa procedura, to brak jej omówionia.

Udostępnij ten post


Link to post
Share on other sites

smyk, witam na forum 🙂 Niestety nie rozumiem Twojego pytania - czy mógłbyś uszczegółowić, o jaki fragment kodu dokładnie pytasz? W tej części kursu w żadnym przykładnie nie korzystaliśmy z if/while wewnątrz setup. Bez szczegółowego kontekstu Twojego pytania nie mogę wyjaśnić sprawy 🙁

Udostępnij ten post


Link to post
Share on other sites

Cześć,

w ramach ćwiczeń do kursu natknąłem się na taki problem - chciałbym aby po naciśnięciu i puszczeniu przycisku dioda LED nieustannie się świeciła, natomiast ponowne przyciśnięcie i puszczenie tego samego przycisku spowodowałoby zgaszenie diody LED. Czyli zmiana stanu diody LED po wciśnięciu przycisku.

Kombinuje ale nie wychodzi mi taka operacja. Niżej przedstawiam moje dwie (moim zdaniem najsensowniejsze) próby rozwiązania tego problemu:

void setup() {

 pinMode(8, OUTPUT); 
 pinMode(7, INPUT_PULLUP); 
 digitalWrite(8, LOW);
}

void loop()
{
 if (digitalRead(7) == HIGH) 
 { 
 digitalWrite(8, HIGH); 
 delay(1000); 
 }

 else { 
 digitalWrite(8, LOW);
 delay(1000); 
 }

}

2. rozwiązanie

void setup() {

 pinMode(8, OUTPUT); 
 pinMode(7, INPUT_PULLUP); 
 digitalWrite(8, LOW);
}

void loop()
{

 while (digitalRead(7) == HIGH) {} //Jeśli przycisk jest wciśnięty 
 digitalWrite(8, HIGH); 
 delay(1000); 

 while (digitalRead(7) == LOW) {} //Jeśli przycisk jest wyciśnięty 
 digitalWrite(8, LOW);
 delay(2000); 
}

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!

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