• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Arduino uno - działa na odwrót

Object Storage Arubacloud
0 głosów
364 wizyt
pytanie zadane 7 września 2020 w C i C++ przez delfinek3 Nowicjusz (170 p.)

Witam, zaczynam naukę z arduino i napotkałem się na mały problem. Mianowicie mam podpiętych 11 diod 5v i chcę zaprogramować kilka trybów świecenia na zmianę. Jeden z nich to spadające światło i dokładanie na dole, coś jak tetris. Napisałem taki kod, ale działa mi zupełnie na odwrót. Zamiast swiatła dokładać to go ubywa

 void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop() {
  delay(250);
digitalWrite(2, HIGH);
delay(250);
digitalWrite(3, HIGH);
delay(250);
digitalWrite(4, HIGH);
delay(250);
digitalWrite(5, HIGH);
delay(250);
digitalWrite(6, HIGH);
delay(250);
digitalWrite(7, HIGH);
delay(250);
digitalWrite(8, HIGH);
delay(250);
digitalWrite(9, HIGH);
delay(250);
digitalWrite(10, HIGH);
delay(250);
digitalWrite(11, HIGH);
delay(250);
digitalWrite(12, HIGH);
delay(250);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);
digitalWrite(3, LOW);
digitalWrite(2, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(100);


digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);

delay(100);


digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);

digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);


digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(100);

digitalWrite(12, HIGH);

}
2
komentarz 7 września 2020 przez tkz Nałogowiec (42,000 p.)
Doczytaj o pętlach... Jak rozumiesz, że światła ubywa? Zamiast się zapalać, to się gaszą?
komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
Próbuję rozgryźć pętle, ale na razie ręcznie chce to zrobić. A rozumiem to tak, że powinno to działać, że dioda "spada" w dół dokładając światło jak w grze tertis, a wyszło z tego kodu tak, że diody świecą i diody się gaszą, zamiast zaświecać. Cały czas są zaświecone. Wygląda to tak jak by tam gdzie HIGH było LOW
1
komentarz 7 września 2020 przez Nelson89 Dyskutant (7,720 p.)
Cześć,

jak masz układ połączony, mógłbyś to opisać/narysować?

Pozdrawiam,

Nelson
komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
Wszystkie diody ( tą dłuższą końcówką czyli plusem) są podłączone razem do napięcia 5v, a potem każda z diod minusem jest podpięta po kolei do portów od 2 do 12
komentarz 7 września 2020 przez tkz Nałogowiec (42,000 p.)

@delfinek3, Nie rozumiem kompletnie Twojego tłumaczenia. Zwróć uwagę, że 100ms to bardzo mało czasu. Kompletnie źle podłączyłeś diody. To piny sterują napięciem w tym przypadku. 

komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
Dodaję filmik jak to u mnie działa

https://www.youtube.com/watch?v=tzHhNd2Cv5I
komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)

 Dziękuję wszystkim za pomoc i taką szybką reakcję. Zaraz zabiorę się za przelutowanie całego układu gdyż jest on na stałe. Jeszcze przy okazji zapytam, czy jest to możliwe napisania w pętli, a jeśli tak to od czego zacząć naukę?

komentarz 7 września 2020 przez Nelson89 Dyskutant (7,720 p.)

Ten kod da się zapisać w pętli. Rzuć okiem na ten kurs

https://forbot.pl/blog/kurs-arduino-podstawy-programowania-porty-io-id3648

jest tam opisana instrukcja warunkowa if i pętla while. Na dobry początek wystarczy, jak ogarniesz o co chodzi i jak to działa to możesz poszukać informacji jak działa pętla for. Znając te rzeczy będziesz mógł kombinować jak zapisać ten kod krócej

pozdrawiam

Nelson

 

2 odpowiedzi

0 głosów
odpowiedź 7 września 2020 przez Nelson89 Dyskutant (7,720 p.)
wybrane 7 września 2020 przez delfinek3
 
Najlepsza

Cześć,

problem jest w połączeniu

Wszystkie diody ( tą dłuższą końcówką czyli plusem) są podłączone razem do napięcia 5v, a potem każda z diod minusem jest podpięta po kolei do portów od 2 do 12

Aby układ działał zgodnie z Twoimi oczekiwaniami musisz połączyć plusy (anody) do portów, a minusy (katody) do portu GND.

W aktualnym układzie, jak masz stan HIGH na pinie to na anodzie i katodzie masz 5V czyli nie ma różnicy napięć, czyli prąd nie przepłynie. Gdy na pinie masz stan LOW to na anodzie masz 5V, a na katodzie masz 0V czyli występuje różnica napięć, prąd przepłynie i dioda zaświeci.

Pozdrawiam,

Nelson

komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
Czyli na piniach mogę nadać napięcie 5v?
komentarz 7 września 2020 przez Nelson89 Dyskutant (7,720 p.)

Względem pinu GND napięcie na pinach stanie HIGH jest równe 5V, a w stanie LOW  jest równe 0V. . Względem pinu 5V, w stanie HIGH, napięcie jest równe zero, a w stanie LOW -5V.

Czyli jak połączysz tak jak wyżej napisałem i nadasz napięcie 5V na piny, to uzyskasz oczekiwany efekt.

Pozdrawiam,

Nelson

0 głosów
odpowiedź 7 września 2020 przez DawidK Nałogowiec (37,910 p.)
Ten kod, oprócz tego, że można go bardzo skrócić np. pętlą for działa chyba tak jak chcesz. Zbudowałem na szybko ten projekt i zapalają się kolejno diody od "najwyższej" do "najniższej" i za każdym razem "na dole" świeci się jedna więcej ("odkłada się"). Napewno masz je dobrze podłączone pierwsza - pin 2, druga pin 3...itd?
komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
Jestem tego pewny, ale nie jestem pewny czy arduino dobrze działa, bo po naciśnięciu resetu nic się nie resetuje, może to być przyczyna?
komentarz 7 września 2020 przez DawidK Nałogowiec (37,910 p.)

Czyli mniej więcej tak?

 

komentarz 7 września 2020 przez delfinek3 Nowicjusz (170 p.)
No właśnie teraz znlazłem swój błąd, powinienem podłączyć tak jak u Ciebie na zdjęciach, a ja mam podpięte plusy do 5v po drugiej stronie układu, a kazdy z minusów do pinu

Podobne pytania

–1 głos
1 odpowiedź 699 wizyt
0 głosów
1 odpowiedź 146 wizyt
pytanie zadane 31 października 2022 w Sprzęt komputerowy przez Lukasz1298 Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 230 wizyt
pytanie zadane 3 października 2018 w Sprzęt komputerowy przez piuro Nowicjusz (120 p.)

92,568 zapytań

141,420 odpowiedzi

319,617 komentarzy

61,953 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...