Skocz do zawartości
Komentator

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

Pomocna odpowiedź

Witam.

W przykładzie z migającą diodą jest zaznaczone, że koniecznie trzeba wpiąć rezystor  szeregowo, czemu akurat na "powrocie"?  I czemu akurat 330 R?

Pozdrawiam serdecznie.

Andrzej

Udostępnij ten post


Link to post
Share on other sites

@AndrzejWi na ten temat jest osobny artykuł o kolejności w połączeniu szeregowym. Nie ma to znaczenia 🙂 

Dnia 4.07.2020 o 19:52, AndrzejWi napisał:

I czemu akurat 330 R?

Przy zasilaniu z 5V i oporze 330R wychodzi prąd 5V/330R ~15mA, czyli tyle że nie spali diody.

 

@Tobitobiasz44 mógłbyś umieścić kod programu o którym piszesz?

Udostępnij ten post


Link to post
Share on other sites
11 godzin temu, Gieneq napisał:

@AndrzejWi na ten temat jest osobny artykuł o kolejności w połączeniu szeregowym. Nie ma to znaczenia 🙂 

Przy zasilaniu z 5V i oporze 330R wychodzi prąd 5V/330R ~15mA, czyli tyle że nie spali diody.

 

@Tobitobiasz44 mógłbyś umieścić kod programu o którym piszesz?

Dziękuję serdecznie za odpowiedź i artykuł.:)

A jak mógłbym prosić o jakiś namiar na teorię dotyczącą parametrów podzespołów, które dostałem z kursem, np. nie wiedziałem, że dioda wymaga akurat takiego natężenia.

Pozdrawiam serdecznie

Udostępnij ten post


Link to post
Share on other sites

@AndrzejWi pewnie, na ten temat jest osobny artykuł o połączeniu LED i zasilaniu. A tu masz coś o diodach z zestawu, np napięcie zasilania.

W przypadku LED zakłada się maksymalny prąd 20 mA, ale może to się różnić zależnie od producenta. Niestety w przypadku LED ciężko jest o konkretną dokumentację, chyba że sprzedawca taką załączy. W przypadku podzespołów z napisanym numerem, można latwo znaleźć dokumentacje pisząc w googlu: "nazwa datasheet" lub "nazwa pdf" np. NE555 datasheet 🙂 

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
12 godzin temu, Gieneq napisał:

@AndrzejWi pewnie, na ten temat jest osobny artykuł o połączeniu LED i zasilaniu. A tu masz coś o diodach z zestawu, np napięcie zasilania.

W przypadku LED zakłada się maksymalny prąd 20 mA, ale może to się różnić zależnie od producenta. Niestety w przypadku LED ciężko jest o konkretną dokumentację, chyba że sprzedawca taką załączy. W przypadku podzespołów z napisanym numerem, można latwo znaleźć dokumentacje pisząc w googlu: "nazwa datasheet" lub "nazwa pdf" np. NE555 datasheet 🙂 

 

Witam.

Dzięki serdeczne za podpowiedzi. Ja dopiero zaczynam przygodę z elektroniką i ciężko jest na początku połapać się, a na blogu jest tyle wszystkiego, że nie wiadomo od czego zacząć. Twoje wskazówki są bardzo cenne.

Pozdrawiam serdecznie.

Andrzej.

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Witam,

Mam jedno pytanie. Czym różni się while od if? Bo jak ja to czytam to mi się wydaje że to to samo.

Udostępnij ten post


Link to post
Share on other sites

A czym się różni "dopóki" od "jeśli"?

while (coś) - dopóki warunek jest spełniony wykonuj następną instrukcję (lub blok)

if (coś) - jeśli warunek jest spełniony, wykonaj następną instrukcję (lub blok)

 

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, ethanak napisał:

A czym się różni "dopóki" od "jeśli"?

while (coś) - dopóki warunek jest spełniony wykonuj następną instrukcję (lub blok)

if (coś) - jeśli warunek jest spełniony, wykonaj następną instrukcję (lub blok)

 

Dzięki wielkie za odpowiedź za odpowiedź. Mam jeszcze jedno odnośnie tych funkcji delay na końcu strony. Nie rozumiem jakim cudem one działają skoro program siedzi już w while, a delay był wcześniej.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Czego dokładnie nie rozumiesz, program idzie tu po kolei, najpierw czeka delay'em, potem wchodzi w pętlę czekajkę

Edytowano przez BananWszyscy

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Kochani, w 1 przykładzie z przyciskiem, mam wszystko podłączone jak trzeba, program skopiowałem, żeby wykluczyć błąd i niestety wciśnięcie guzika nie powoduje żadnej reakcji, zmieniałem też pin i nic, macie pomysł gdzie może być problem?.

Jeśli zamiast jak poniżej:

 pinMode(8, OUTPUT); //Dioda jako wyjście
  pinMode(7, INPUT_PULLUP);
  digitalWrite(8, LOW); //Wyłączenie diody

zrobię:

 pinMode(8, OUTPUT); //Dioda jako wyjście
  pinMode(7, INPUT_PULLUP);
  digitalWrite(8, HIGH); //Wyłączenie diody

To dioda po prostu świeci i już.

Andrzej

Ps '

Próbowałem też zrobić przykład ze strony arduino.cc, w którym miała się zapalić dioda koło pinu nr. 13. i też nie zadziałało, ponadto zamiast przycisku próbowałem za pomocą dwóch kabelków wpiętych w miejsca, gdzie były wtyki przycisku i zwierałem je na krótko, też nic ;/

Edytowano przez AndrzejWi

Udostępnij ten post


Link to post
Share on other sites

@ethanak, w przypadku kodu gdzie nie ma nic innego w void loop() poza ifem (tak jak na części przykładów z tej lekcji), wychodzi na to samo jakby był tam while więc nie masz co się dziwić @Kubaaa. Słusznie zauważył, że na przykład w kodzie spod "Program ten najlepiej zrealizować z użycie pętli while(), będzie to wyglądało następująco:" można użyć while lub if i będzie to to samo.

Udostępnij ten post


Link to post
Share on other sites

@AndrzejWi Wrzuć proszę cały kod programu bo z tego nic nie wynika 😞 

Udostępnij ten post


Link to post
Share on other sites

Dzięki za odpowiedzi. Dalej średnio to rozumiem. Jakby się komuś chciało to może napisać jakiś krótki program który pokazuje różnice. Z góry dzięki.

Udostępnij ten post


Link to post
Share on other sites

Krótki, mówisz... no to masz:

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(12,INPUT_PULLUP);
  digitalWrite(13,LOW);
  Serial.begin(9600);
}

void loop()
{
  if (digitalRead(12) == LOW) { // klawisz naciśnięty
    digitalWrite(13, HIGH); // zapalamy diodę
    delay(500); // czekamy
    digitalWrite(13, LOW); // gasimy diodę
    delay(500); // czekamy
  }
  Serial.println("Koniec instrukcji IF");
  delay(2000);
}

    
    
    
void setup()
{
  pinMode(13,OUTPUT);
  pinMode(12,INPUT_PULLUP);
  digitalWrite(13,LOW);
  Serial.begin(9600);
}

void loop()
{
  while (digitalRead(12) == LOW) { // klawisz naciśnięty
    digitalWrite(13, HIGH); // zapalamy diodę
    delay(500); // czekamy
    digitalWrite(13, LOW); // gasimy diodę
    delay(500); // czekamy
  }
  Serial.println("Koniec instrukcji WHILE");
  delay(2000);
}

    
    
    

Podłącz klawisz do pinu 12 i wciśnij go na dłużej niż sekundę (np. na 5 sekund) - zobaczysz różnicę.

Trzeba pamiętać, że w programie istnieje jeszcze jedna pętla while, której co prawda nie widać ale jak dobrze poszukasz to znajdziesz. W skrócie wygląda to tak:

int main(void)
{
  setup();
  while (1) loop();
}

Stąd może brać się wrażenie, że while i if robią to samo - w rzeczywistości zadziała tu instrukcja while z funkcji main.

Jeśli z podanych przeze mnie przykładów usuniesz dwie ostatnie linijki (czyli  Serial.println() i delay() ) - programy będą zachowywać się tak samo. Spróbuj sobie odpowiedzieć na pytanie "dlaczego".

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