Skocz do zawartości

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


Komentator

Pomocna odpowiedź

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.

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

  • Lubię! 1
Link do komentarza
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.

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

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

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.

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

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

Kamil3D, witam na forum 🙂 Do rozwiązanie tego problemu najlepiej wykorzystać zmienne, które pozwolą zapamiętać stan diody. Informacje na ich temat znajdziesz w kolejnych częściach kursu 🙂

Link do komentarza
Share on other sites

Witam,
Posiadam 1 przycisk i 1 diode.

Naciskam przycisk = analogWrite(dioda, 40);

Naciskam drugi raz przycisk = analogWrite(dioda, 80);

Naciskam trzeci raz przycisk = digitalWrite(dioda, HIGH);

naciskam czwarty raz = dioda nie swieci.

Proszę o pomoc. Jak najprościej. Potem sobie użyje switch case.

Wiem że musi być zmienna która będzie zliczać, ale nie moge sobie z tym poradzić.

pozdrawiam

Link do komentarza
Share on other sites

neuneu, czy wykonałeś ćwiczenia związane ze zmiennymi (temat ten jest opisany w kursie dalej)? Wystarczy, że po każdym wciśnięciu przycisku będziesz zwiększa wartość zmiennej. Pokaż co już zrobiłeś i gdzie masz problem - łatwiej będzie znaleźć rozwiązanie 🙂

Link do komentarza
Share on other sites

const int przycisk = 4 ;
const int led = 10;
int state;
int lastState;
int buttonCounter = 0;

void setup() {
 pinMode(led, OUTPUT);
 pinMode(przycisk, INPUT_PULLUP);
}

void loop() {
 state = digitalRead(przycisk);
 if (state != lastState)
 {
   if (state == LOW) 
   {
     buttonCounter++;
   }
   lastState = state;
 }

 if (buttonCounter  == 1) 
 {
   analogWrite(led, 40);
 }
 else if (buttonCounter == 2)
 {
   analogWrite(led, 80);
 }
 else if (buttonCounter == 3)
 {
   analogWrite(led, 130);
 }
 else if (buttonCounter >= 4)
 {
   digitalWrite(led, LOW);
 }
}
/

Proszę bardzo.

Jak teraz dodać aby nie było styków? Da sie to jakoś jeszcze uproscic?

Link do komentarza
Share on other sites

neuneu, jeśli chodzi Ci o eliminację drgań styków, to najłatwiej będzie tutaj dodać jakieś opóźnienie np. "delay(80)" na końcu bloku funkcji, które są wykonywane po wciśnięciu przycisku, czyli po "buttonCounter++;".

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.