Skocz do zawartości

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


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.

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

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.

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!

  • 5 tygodnie później...

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.

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 🙁

  • 1 miesiąc później...

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

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 🙂

  • 1 miesiąc później...

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

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 🙂

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?

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++;".

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