Skocz do zawartości

Dwa przyciski i 14 diod led


xirtt

Pomocna odpowiedź

Zaczynam zabawę z ARDUINO UNO. Potrzebuje odłączyć linijkę z 14 diod led i do tego dwa przyciski chwilowe.

Jeden przycisk po naciśnięciu i podania masy na wejście, przesuwa świecenie jednej diody led w linijce w prawo, a drugi przycisk w lewo.

Pozdrawiam

Link do komentarza
Share on other sites

Kurs arduino poziom 1, forbot.pl. I wszystko jasne. Zrobisz o wiele wiecej po tych kilku godzinach nauki. Tutaj nikt gotowego kodu ci nie wklei.

W sumie do odłączenia;-) linijki ledów, kurs Ci niepotrzebny...

Edytowano przez SOYER
Link do komentarza
Share on other sites

18 godzin temu, xirtt napisał:

Potrzebuje odłączyć linijkę z 14 diod led i do tego dwa przyciski chwilowe.

Z tym odłączeniem to z pewnością literówka. Teoretycznie potrzebowałbyś 16 portów procesora a tylu nie masz. Powinieneś więc rozpatrzyć matrycę np. 4 x 4 (4 wiersze i 4 kolumny). Daje to możliwość podłączenia 16 elementów (LED, przycisk...). Taki przycisk np. łączysz jednym końcem z odpowiednim wierszem i drugim końcem z odpowiednią kolumną. Chcąc odczytać jego stan wybierasz wiersz i kolumnę. Linie wierszy i linie kolumn podłączasz do odpowiednich portów Arduino. Tu znajdziesz przykład matrycy LED 8x8 - zobacz

Zwróć uwagę na schemat - piszę o takiej  konstrukcji i podłączeniu.

Możesz także pójść inną drogą np. expander portów procesora np. PCF8574 i wykorzystanie tego układu lub specjalizowane układy do sterowania matrycami LED.

Edytowano przez Belferek
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

To była literówka. Oczywiście podłączyć  zwykłe diody led.

Zrobiłem coś takiego , jeden przycisk działa . nie wiem jak dopisać drugi przycisk.

Coś takiego......

id 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);
  pinMode(13, OUTPUT);

  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
 
  digitalWrite(2, LOW;
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
}
 
void loop()
{
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty
 
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty
 
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty  

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty  

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);
 
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(A0) == HIGH) {} //Jeśli przycisk jest wciśnięty  
}
 

Link do komentarza
Share on other sites

6 godzin temu, ethanak napisał:

Jak to nie? D2 do D13, A0 do A3 to już 16, a gdzie A4/A5 i D0/D1?

No tak masz rację ethenak - z przyzwyczajenia odpuściłem wejścia analogowe, gdyż z reguły wykorzystuję je do innych niż OUTPUT celów.

Link do komentarza
Share on other sites

(edytowany)

Dziękuje za odpowiedzi. 

Przyciski dałem na A0 i A1. Diody jak widać . A0 załącza diodę zawsze jedną w prawo, i to działa. Chciałem żeby A1, załączał diodę zawsze jedną w lewo.

Przyjaciele , może ma ktoś wiedzę bardziej praktyczną jak to zapisać w programie.

Pozdrawiam.

Edytowano przez xirtt
Link do komentarza
Share on other sites

Zadeklaruj zmienną typu int ( powiedzmy o nazwie nr_diody) i przypisz jej wartość początkową 2 (pierwszy pin do którego masz podłączoną diodę). Następnie warunek if ( przycisk wciśnięty) i ustawiasz stan wysoki na pinie nr_diody+1 oraz niski na nr_diody. Czekasz swoją sekundę i zwiększasz wartość zmiennej nr_diody o jeden. Teraz drugi niemal identyczny warunek dla drugiego przycisku, tak aby zapalała się dioda wcześniejsza. Myślę, że wymyślisz co trzeba zmienić, aby działał. 

Pojawi się mały problem gdy światełko na diodach dojdzie do ostatniej diody, ale powinieneś poradzić.

Link do komentarza
Share on other sites

14 godzin temu, xirtt napisał:

 int (2);

Powiedz nam jakie zadanie ma realizować ten fragment kodu z Twojego programu - co chciałeś osiągnąć?

Napisałeś: if (digitalRead(A1) == HIGH) {}

Jeśli programik nie działa to powinieneś się zastanowić dlaczego, gdzie jest błąd? Nie wiem jak Ty, ale ja i pewnie większość czytających odczyta ten warunek IF jako:

Jeśli na A1 jest stan wysoki to nie rób NIC.

O to Ci chodziło?

Edytowano przez Belferek
Link do komentarza
Share on other sites

1. Zamiast int (2); powinno być:

int nr_diody=2; // deklarujesz zmienną typu integer (liczba całkowita) o nazwie nr_diody i przypisujesz jej początkową wartość 2

2. Przyciski podejrzewam, że masz połączone z masą (GND), więc po wciśnięciu przycisku będzie stan niski :

 if (digitalRead(A1)==LOW) { instrukcje które mają zostać wykonane gdy przycisk zostanie wciśnięty

3. Zapalanie i gaszenie diody odwołującą się do zmiennej nr_diody:

digitalWrite(nr_diody, HIGH); // ustawia stan wysoki na pinie nr_diody czyli 2

digitalWrite(nr_diody+1, LOW); //ustawia stan niski na pinie nr 3 (2+1)

nr_diody=nr_diody+1; // zwiększa zmienną nr_diody o 1, czyli teraz zmienna nr_diody wynosi 3

Wszystko to i wiele więcej znajdziesz na kursie FORBOTA o którym pisał Ci SOYER. 

 

Link do komentarza
Share on other sites

Gość
Ten temat został zamknięty.
×
×
  • 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.