Darek97 Napisano Marzec 14, 2023 Udostępnij Napisano Marzec 14, 2023 Witam, na wstępie zaznaczę że nie znam się na kodowaniu arduino do końca dobrze, wręcz jestem zielony w tym temacie (jestem mechanikiem samochodowym) no i potrzebuję pomocy w ogarnięciu programu do dynamicznych kierunkowskazów tylnych lamp. Problem jest z światłami awaryjnymi czyli obydwa wyjścia powinny się zapalać w tym samym czasie a u mnie następuje strona po stronie, nie w tym samym czasie. Z tego co już udało mi się ustalić to właśnie funkcja delay jest za to odpowiedzialna, blokuje kod. Używam oczywiście biblioteki FastLED i pasków ledowych WS2812B, odczyt stanu czy są uruchomione kierunkowskazy odbywa się za pomocą transportów. #include <FastLED.h> #define NUM_LEDS 17 #define DATA_PIN_1 10 #define DATA_PIN_2 11 #define COLOR_ORDER GRB #define CHIPSET WS2812B #define BRIGHTNESS 255 #define time_end 10 #define time_start 0 #define BUTTON_PIN_1 9 #define BUTTON_PIN_2 12 bool buttonState_1 = false; bool buttonState_2 = false; CRGB leds_1[NUM_LEDS]; CRGB leds_2[NUM_LEDS]; void setup() { FastLED.addLeds<CHIPSET, DATA_PIN_1, COLOR_ORDER> (leds_1, NUM_LEDS); FastLED.addLeds<CHIPSET, DATA_PIN_2, COLOR_ORDER> (leds_2, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); FastLED.clear(); FastLED.show(); pinMode(BUTTON_PIN_1, INPUT_PULLUP ); pinMode(BUTTON_PIN_2, INPUT_PULLUP ); } void loop() { buttonState_1 = digitalRead(BUTTON_PIN_1); buttonState_2 = digitalRead(BUTTON_PIN_2); if (buttonState_1 == LOW) { for (int i = 0; i < NUM_LEDS; i++) { leds_1[i] = CRGB(0, 0, 0); FastLED.show(); delay(time_start); } } else { for (int i = 0; i < NUM_LEDS; i++) { leds_1[i] = CRGB(255, 80, 0); FastLED.show(); delay(time_end); } } if (buttonState_2 == LOW) { for (int i = 0; i < NUM_LEDS; i++) { leds_2[i] = CRGB(0, 0, 0); FastLED.show(); delay(time_start); } } else { for (int i = 0; i < NUM_LEDS; i++) { leds_2[i] = CRGB(255, 80, 0); FastLED.show(); delay(time_end); } } } Z góry dzięki za zainteresowanie się tematem. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 15, 2023 Udostępnij Marzec 15, 2023 @Darek97 witam na forum 🙂 Jak dokładnie ma działać ten program? W tej chwili masz jakieś zmienne określające stan przycisków - jak rozumiem chodzi o włącznik lewego/prawego kierunkowskazu. A jak mają włączać się światła awaryjne? Czy masz do tego jakiś osobny przycisk? 1 Link do komentarza Share on other sites More sharing options...
matsobdev Marzec 15, 2023 Udostępnij Marzec 15, 2023 (edytowany) Ja tam nie chcę gasić zapału, ale jeśli to ma być na pojeździe mechanicznym poruszającym się po drogach publicznych to może być ładnie do czasu kontroli/kolizji a co gorsza wypadku. Oświetlenie zewnętrzne rzuca się w oczy. Jedziesz sobie drogą krajową, chcesz zjechać na parking leśny, dajesz w lewo i ktoś Cię wyprzedza. Puk i jest prawie impas. Edytowano Marzec 15, 2023 przez matsobdev Link do komentarza Share on other sites More sharing options...
Popularny post ethanak Marzec 15, 2023 Popularny post Udostępnij Marzec 15, 2023 Nie ma czegos takiego jak "zamień delay na millis". Po prostu program należy napisać od początku w zupełnie inny sposób. Dla mechanika samochodowego: przerobienie samochodu na motocykl nie polega na odkręceniu dwóch kół. 2 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Treker (Damian Szymański) Marzec 15, 2023 Udostępnij Marzec 15, 2023 Ja od razu założyłem, że to jakiś projekt hobbystyczny, rower lub makieta 🙂 Tak czy inaczej w ramach treningu można zdziałać takie projekt, tylko w tym przypadku faktycznie trzeba zmienić trochę więcej. Stąd moje pytanie o sposób sterowania "awaryjnymi". Link do komentarza Share on other sites More sharing options...
ethanak Marzec 15, 2023 Udostępnij Marzec 15, 2023 Vide moja odpowiedź w temacie obok. Link do komentarza Share on other sites More sharing options...
Darek97 Marzec 15, 2023 Autor tematu Udostępnij Marzec 15, 2023 6 godzin temu, Treker napisał: @Darek97 witam na forum 🙂 Jak dokładnie ma działać ten program? W tej chwili masz jakieś zmienne określające stan przycisków - jak rozumiem chodzi o włącznik lewego/prawego kierunkowskazu. A jak mają włączać się światła awaryjne? Czy masz do tego jakiś osobny przycisk? Witam, dziękuje raz jeszcze za zainteresowanie się tematem ogólnie wszystko już rozwiązałem, niepotrzebnie używałem fukcji else, i tak jak ethanak napisał cytując klasyka "nie ale to by nic nie dało i tak, nie nie dałoby bo on był drugi w kulach" po prostu wystarczyło stworzyć wariacje dla każdego stanu logicznego przycisków i mamy to, działa bez zarzutów. #include <FastLED.h> #define NUM_LEDS 17 #define DATA_PIN_1 10 #define DATA_PIN_2 11 #define COLOR_ORDER GRB #define CHIPSET WS2812B #define BRIGHTNESS 255 #define time_blink 30 #define time_start 10 #define BUTTON_PIN_1 9 #define BUTTON_PIN_2 12 bool buttonState_1 = false; bool buttonState_2 = false; CRGB leds_1[NUM_LEDS]; CRGB leds_2[NUM_LEDS]; void setup() { FastLED.addLeds<CHIPSET, DATA_PIN_1, COLOR_ORDER> (leds_1, NUM_LEDS); FastLED.addLeds<CHIPSET, DATA_PIN_2, COLOR_ORDER> (leds_2, NUM_LEDS); FastLED.setBrightness(BRIGHTNESS); FastLED.clear(); FastLED.show(); pinMode(BUTTON_PIN_1, INPUT_PULLUP ); pinMode(BUTTON_PIN_2, INPUT_PULLUP ); } void loop() { buttonState_1 = digitalRead(BUTTON_PIN_1); buttonState_2 = digitalRead(BUTTON_PIN_2); if (buttonState_1 == HIGH && buttonState_2 == HIGH) { //awaryjne for (int i = 0; i < NUM_LEDS; i++) { leds_1[i] = CRGB(255, 80, 0); leds_2[i] = CRGB(255, 80, 0); FastLED.show(); delay(time_start); } } //else { //for (int i = 0; i < NUM_LEDS; i++) { //leds_1[i] = CRGB(0, 0, 0); //leds_2[i] = CRGB(0, 0, 0); //FastLED.show(); //} //} if (buttonState_1 == HIGH && buttonState_2 ==LOW ) { //kierunek 1 for (int i = 0; i < NUM_LEDS; i++) { //leds_1[i] = CRGB(0, 0, 0); leds_2[i] = CRGB(255, 80, 0); FastLED.show(); delay(time_blink); } } //else { //for (int i = 0; i < NUM_LEDS; i++) { //leds_1[i] = CRGB(0, 0, 0); //leds_2[i] = CRGB(0, 0, 0); //FastLED.show(); //} //} if (buttonState_1 == LOW && buttonState_2 ==HIGH ) { //kierunek 2 for (int i = 0; i < NUM_LEDS; i++) { leds_1[i] = CRGB(255, 80, 0); //leds_2[i] = CRGB(0, 0, 0); FastLED.show(); delay(time_blink); } } //else { //for (int i = 0; i < NUM_LEDS; i++) { //leds_1[i] = CRGB(0, 0, 0); //leds_2[i] = CRGB(0, 0, 0); // FastLED.show(); //} //} if (buttonState_1 == LOW && buttonState_2 ==LOW ) { //kierunki zgaszone for (int i = 0; i < NUM_LEDS; i++) { leds_1[i] = CRGB(0, 0, 0); leds_2[i] = CRGB(0, 0, 0); FastLED.show(); } } } Podrzucam moje wypociny, wirtuozem arduino nie jestem, dałem z siebie całe 30% ale chyba i tak nie jest źle jak na mechanika. 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »