Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję
Odbierz rabat na filament!

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

Autor Wiadomość
marek1707 



Posty: 4197
Pomógł: 450 razy
Otrzymał 595 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 18-01-2017, 23:47   

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.

Postaw piwo autorowi tego posta
 
 
ekspres 



Posty: 3
Skąd: Gliwice
Wysłany: 19-01-2017, 00:03   

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

Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 4197
Pomógł: 450 razy
Otrzymał 595 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 19-01-2017, 00:17   

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

Postaw piwo autorowi tego posta
 
 
AmatorArduino 



Posty: 2
Wysłany: 17-05-2017, 19:21   

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 :)

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 17-05-2017, 22:53   

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".
Kod programu: Zaznacz cały
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ć :)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 33
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 24-05-2017, 10:13   

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.

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 24-05-2017, 11:01   

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.


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 33
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 24-05-2017, 11:57   

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.

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 24-05-2017, 12:17   

dejmieno napisał/a:
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.

dejmieno napisał/a:
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!


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 33
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 24-05-2017, 13:07   

Ok, dzięki za odpowiedź.

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

Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 33
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 25-05-2017, 14:35   

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

Postaw piwo autorowi tego posta
 
 
AmatorArduino 



Posty: 2
Wysłany: 25-05-2017, 19:30   

dejmieno napisał/a:
A w przypadku przycisku nie musimy korzystać z rezystorów?


Nie

Postaw piwo autorowi tego posta
 
 
smyk 



Posty: 1
Wysłany: 25-06-2017, 11:07   

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.

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 26-06-2017, 12:22   

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 :(


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
Kamil3D 



Posty: 1
Skąd: Wroclaw
Wysłany: 18-08-2017, 20:06   

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:

Kod programu: Zaznacz cały

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
Kod programu: Zaznacz cały

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);
}

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs STM32 - #4 - St... Kurs STM32 - #2 - Po... Kurs Arduino - #9 - ... Kurs STM32 - #5 - Ko...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki