Przeszukaj forum
Pokazywanie wyników dla tagów 'ledy'.
Znaleziono 2 wyniki
-
Napisałem prosty program, którego zadaniem jest wyświetlaniu na ośmioelementowej listwie LED dowolnego wzoru i jego przesuwanie. //Dołączenie biblioteki obsługującej linijkę led #include <Adafruit_NeoPixel.h> //dedklaracja pinów i stałych const int ledPin = A0; const int ledCount = 8; //ilość LED w linijce const int patCount = 3; //ilość elementów wzoru do wyświetlania //deklaracja tablicy wyświetlanego wzoru unsigned long pattern[patCount]; bool start = true; //flaga używana w instrukcji if , start = true dla początkowego wzoru, start = false dla kolejnych wzorów //Konfiguracja linijki Adafruit_NeoPixel linijka = Adafruit_NeoPixel(ledCount, ledPin, NEO_GRB + NEO_KHZ800); void setup() { //Inicjalizacja linijki linijka.begin(); linijka.show(); } void loop() { //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa if (start) { //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); start = false; } else { //zmiana wzoru - przesunięcie o jeden element w górę, element ostatni staje się pierwszym unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); } } Program nie jest skomplikowany, wymaga zdefiniowania kolorów: //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); zadeklarowania w tablicy pattern: unsigned long pattern[] = {blue, blue, red}; przypisania kolejnym LED elementów wzoru: for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } wyświetlenia: linijka.show(); delay(150); Funkcję ruchu uzyskałem dzięki zmianie wzoru - przesuwając elementy o jeden tzn.: pierwszy staje się drugim, drugi - trzecim, a ostatni - pierwszym: unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; oraz ponownemu przypisaniu elementom LED kolejnych elementów nowego wzoru i wyświetleniu: //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Nic nadzwyczajnego, ale uruchamiając program napotkałem kilka istotnych problemów. Najważniejszy, to deklaracja zmiennych i ich zasięg. Aż się prosi by fragment przypisywania elementom LED elementów wzoru i wyświetlenie wstawić do odrębnej funkcji: //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Jednak gdy to zrobiłem, okazało się, że kompilator nie zgłaszał błędu, ale zapisany wzór nie był wyświetlany. Podobnie prosi się, by fragment funkcji void loop(): //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa który właściwie mógłby być wykonywany tylko raz, umieścić w void setup(). Próba umieszczenia tego fragmentu do setup także kończyła się błędami kompilacji. Czy mógłby ktoś bardziej biegły w programowaniu powiedzieć, co jest nie tak i skąd błędy w kompilacji i sygnalizowanie błędów zasięgu zmiennych? Co trzeba zrobić by powtarzające się fragmenty zapisać w funkcji?
- 8 odpowiedzi
-
- ledy adresowaln
- LED
-
(i 2 więcej)
Tagi:
-
Próbuję przy pomocy płytki arduino zrobić światła ledowe na przycisk zasilane kablem usb i jak podłączam arduino do zasilacza 12 V to momentalnie zaczyna się płytka podgrzewać okolicach gniazda zasilania. Skrypt jest prosty. niedawno przerobiłem sobie drugi poziom kursu arduino ale chyba brakuje mi wiedzy tylko nie wiem jakiem :/. Załączam także jak na podstawie zasilania buzzera podłączyłem wejście usb do zasilania ledów. bool light=false; void setup() { pinMode(A5, OUTPUT); //Konfiguracja A5 jako wyjście pinMode(2,INPUT_PULLUP); digitalWrite(A5, LOW); } void loop() { if(digitalRead(2)==LOW&&light==false){ digitalWrite(A5, HIGH); //Cykliczna zmiana stanu wyjścia delay(200); light=true; } else if(digitalRead(2)==LOW&&light==true){ digitalWrite(A5, LOW); delay(200); light=false; } }
- 15 odpowiedzi