Skocz do zawartości

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


Pomocna odpowiedź

(edytowany)

Umieszczasz guzik na srodku i pasuje!...druga sprawa..teraz twoj guzik dziala jak wcisniety wiec kod powinien sie wykonywac...czemu led nie swieci? Bo w ukladzie nie ma masy albo jestem slepy...doloz trzeci kabel i obroc guzik, i bedzie dzialac..

Edytowano przez farmaceuta
  • Lubię! 1

Taka myśl, w ramach mojego rozkawałkowanego monologu - wśród kursów, w kursie elektroniki #1 chyba są takie elementarne obwody, gdzie LED zapala się przyciskiem bez obecności Arduino. I gdy już to ma się dobrze opanowane, wtedy łatwiej doprowadzić do działania z Arduino.

  • Lubię! 1
  • 1 miesiąc później...
(edytowany)

Zaliczony rozdział

Przydało by się info od bardziej doświadczonych czy jest sposób ochrony usb komputera przed pomyłką na płytce. Natrafiłem na takie urządzenie jak "izolator usb" nie wiem czy ludzie używają takich urzadzeń

Edytowano przez Pierunek
  • Lubię! 1
  • 2 tygodnie później...

@Pierunek niedawno zrobiłem zwarcie na porcie USB 3.1 w nowym lapku. Dostałem komunikat o przeciążeniu i po ponownym uruchomieniu wróciło do normy. Pewnie przeciążenie to 500mA, bo w tych inteligentnych USB to bez wstępnej komunikacji więcej nie pociągniesz. Myślę że sterowniki USB są na tyle inteligentne że mają więcej zabezpieczeń.

  • Lubię! 1
  • 2 miesiące później...

Witam 

mam pytanie odnośnie tych fragmentów w kursie:

Cytat

Kolorem ciemnozielonym (nr od 0 do 19) zaznaczono uniwersalne, cyfrowe piny wejścia/wyjścia (I/O).

Funkcja pinMode(Pin, Tryb) umożliwia wybranie, czy dany pin jest wejściem, czy wyjściem. Pin może być liczbą całkowitą z zakresu od 0 do 13.

Dlaczego do funkcji pinMode można wpisać liczby tylko od 0 do 13 a nie do 19 skoro wszystkich pinów jest 19?  W dalszej części kursu pisze, że  piny 14-19 mogą być wykorzystywane jako piny wejścia i wyjścia.

Cytat

Kolorem jasnozielonym zaznaczone zostały wejścia analogowe (A0-A5). Są to wyjątkowe piny, które pozwalają na pomiar napięcia (w zakresie 0-5V). Jak widać numeracja tych wejść pokrywa się z pinami uniwersalnymi (numery od 14 do 19).  Praca w trybie analogowym to dodatkowa funkcja tych pinów.

Zapamiętaj: piny analogowe A0-A5 mogą również pracować jako zwykłe piny I/O.

Czy to jakaś literówka? Z góry dziękuje za odpowiedź.

Chodzi o to że piny 0-13 to piny cyfrowe a piny A0-A5 to piny analogowe (które też można wykorzystać jako cyfrowe!) Czyli np. 

pinMode(A3, OUTPUT); 

jest jak najbardziej poprawne...

  • Lubię! 1
12 godzin temu, Wojtek777 napisał:

Czy to jakaś literówka? Z góry dziękuje za odpowiedź.

@Wojtek777 nie tyle literówka, co pewne świadome uproszczenie tematu, aby na początku nie było konieczności zagłębiania się w alternatywne funkcje pinów, wejścia analogowe itd.

W ramach ćwiczeń do pierwszej lekcji, zrobiłem światła, które migają cały czas na żółto, a po wciśnięciu przycisku wykonują sekwencję:
Czerwone - czerwone+żółte - zielone - żółte. 🙂

void setup() {
  pinMode(8, OUTPUT); //Dioda jako wyjście zielona
  pinMode(9, OUTPUT); //jw zolta
  pinMode(10, OUTPUT); //jw czerwona
  
  pinMode(7, INPUT_PULLUP); //Przycisk jako wejscie
  //Diody wylaczone na starcie//
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
}

void loop() {
  while (digitalRead(7) == LOW) {
    digitalWrite(8, LOW); //Zielona off
    digitalWrite(9, HIGH); //Zolta on
    digitalWrite(10, LOW); //Czerwona off
    delay(500);
    
     digitalWrite(8, LOW); //Zielona off
     digitalWrite(9, LOW); //Zolta off
     digitalWrite(10, HIGH); //czerwona on
     delay(2000);

     digitalWrite(8, LOW); //zielona off
     digitalWrite(9, HIGH); //zolta on
     digitalWrite(10, HIGH); //czerwona on
     delay(1500);

     digitalWrite(8, HIGH); //zielona on
     digitalWrite(9, LOW); //zolta off
     digitalWrite(10, LOW); //czerwona off
     delay(2500);

     digitalWrite(8, LOW); //zielona off
     digitalWrite(9, HIGH); //zolta on
     digitalWrite(10, LOW); //czerwona off
     delay(2500);
  }
  digitalWrite(8, LOW); //Zielona off
  digitalWrite(9, HIGH); //Zolta on
  digitalWrite(10, LOW); //Czerwona off
  delay(500); //Czek 0.5 s
  digitalWrite(8, LOW); //Zielona off
  digitalWrite(9, LOW); //Zolta off
  digitalWrite(10, LOW); //Czerwona off
  delay(500);
}

 

Programik bangla. 😄
Dla wielu banał, dla mnie duży krok i cieszę gębę.

 

Zauważyłem, jak ktoś wyżej, że muszę dłużej przytrzymać przycisk, żeby wykonała się pętla while.
Czy w dalszej części kursu jest coś w tej kwestii?
Na razie nie chcę wyprzedzać kursu, jak nie, to najwyżej wrócę do tego później. 😉

18 minut temu, Danyeru napisał:

Zauważyłem, jak ktoś wyżej, że muszę dłużej przytrzymać przycisk, żeby wykonała się pętla while.
Czy w dalszej części kursu jest coś w tej kwestii?

Te delay() są winne temu. Co do kursu to wygląda na to, że się on skończył.

(edytowany)
27 minut temu, Belferek napisał:

Te delay() są winne temu. Co do kursu to wygląda na to, że się on skończył.

Jestem na początku pierwszej części, nie przeglądałem dalszych części, stąd pytam, czy w istniejącym kursie o tym będzie. 😉
Jak nie, to wrócę pytać jeżeli się w międzyczasie czegoś nie dowiem. 😄

Edytowano przez Danyeru
15 godzin temu, Danyeru napisał:

Programik bangla. 😄
Dla wielu banał, dla mnie duży krok i cieszę gębę.

@Danyeru i o to chodzi, tak ma właśnie wyglądać nauka - dobra robota! Każdy powinien robić takie projekty, jakie aktualnie może i jakie sprawiają mu frajdę.

15 godzin temu, Danyeru napisał:

Zauważyłem, jak ktoś wyżej, że muszę dłużej przytrzymać przycisk, żeby wykonała się pętla while.
Czy w dalszej części kursu jest coś w tej kwestii?
Na razie nie chcę wyprzedzać kursu, jak nie, to najwyżej wrócę do tego później. 😉

To wynika z tego, że warunki w pętli nie jest sprawdzany ciągle, tylko tuż przed każdym wykonaniem pętli. Stąd, musisz trzymać przycisk aż nie skończy się sekwencja wewnątrz pętli while. Da się to rozwiązać na kilka sposobów - np. korzystając z milis lub za pomocą przerwań zewnętrznych. Oba te tematy są opisane w kursie Arduino, poziom II 🙂

  • Lubię! 1
  • 1 miesiąc później...

Ciekawa lekcja wprowadzająca 👍

Gdyby ktoś potrzebował pomocy, poniżej podrzucam własne spostrzeżenia oraz kody programów do zadań domowych 😉

1️⃣ Zadanie domowe nr 1.1

Osobiście byłem w stanie zauważyć migotanie diody przy wartości 12 milisekund. Warto wykorzystać w tym celu aparat w telefonie. Włączając funkcję zwolnionego tempa możemy obserwować podobne zjawisko nawet przy wyniku 3 milisekund!

2️⃣ Zadanie domowe nr 1.2

Włączenie oraz wyłączenie, w tym samym czasie, diody nr 1 oraz diody nr 2:

void setup() {
  pinMode(8, OUTPUT); //Konfiguracja pinu 8 jako wyjście diody nr 1
  pinMode(7, OUTPUT); //Konfiguracja pinu 7 jako wyjście diody nr 2
}
 
void loop() {
  digitalWrite(8, HIGH); //Włączenie diody nr 1
  digitalWrite(7, HIGH); //Włączenie diody nr 2
  delay(1000); //Odczekanie 1 sekundy
  digitalWrite(8, LOW); //Wyłączenie diody nr 1
  digitalWrite(7, LOW); //Wyłączenie diody nr 2
  delay(1000); //Odczekanie 1 sekundy
}

Włączenie oraz wyłączenie, na przemian, diody nr 1 oraz diody nr 2:

void setup() {
  pinMode(8, OUTPUT); //Konfiguracja pinu 8 jako wyjście diody nr 1
  pinMode(7, OUTPUT); //Konfiguracja pinu 7 jako wyjście diody nr 2
}
 
void loop() {
  digitalWrite(8, HIGH); //Włączenie diody nr 1
  digitalWrite(7, LOW); //Wyłączenie diody nr 2
  delay(1000); //Odczekanie 1 sekundy
  digitalWrite(8, LOW); //Wyłączenie diody nr 1
  digitalWrite(7, HIGH); //Włączenie diody nr 2
  delay(1000); //Odczekanie 1 sekundy
}
  • Lubię! 1
  • Pomogłeś! 1
15 minut temu, Wejmon napisał:

Włączenie oraz wyłączenie, w tym samym czasie, diody nr 1 oraz diody nr 2:

Przyjrzyj się swojemu programowi. On nie wyłącza diod w tym samym czasie. Najpierw wyłącza diodę nr 1, a "za chwilę" diodę nr 2 :-).

  • Lubię! 1
  • Pomogłeś! 1

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