• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Modern Car turnLights
#1
Witam, chciałem odtworzyć program jak z filmiku z tą różnicą, że u mnie jest większa ilość diod WS2812B a dokładnie 72szt:

https://youtu.be/IwwJqNXW1Ig

Problem w tym, że przy kierunkowskazach diody świeca w kolorze zielonym i nie mogę tego w żaden sposób zmienić, dodatkowo przy ustawieniu jasności każdego koloru na 255 pasek świeci na pomarańczowo ale to się tyczy każdego programu, co robię źle? Może pin wyjściowy Atmegi nie jest w stanie przyjąć aż 72 diod?
 
Odpowiedź
#2
Pokaż program bo bez szklanej kuli nie wiadomo jak on wygląda.
 
Odpowiedź
#3
Dodaj odpowiednią ilość diod w programie i tyle, na 90% będzie w pętli for wpisana.

Co do koloru, masz pewnie zła kolejność kolorów w bibliotece zadana, popraw i będzie dobrze.
 
Odpowiedź
#4
Edit. Otworzyłem sobie projekt na telefonie, nie raczyles nawet zerknąć na opis..... Masz wszystko ładnie opisane co i dlaczego, ba, wyraźnie zaznaczona jest ilość ledow do zmiany i tak sama kolejność kolorów. Leń.
 
Odpowiedź
#5
(29-10-2019, 13:05)PiegowatyGuziec napisał(a): nie raczyles nawet zerknąć na opis.....
Kto nie raczył? Ja? Mnie g... obchodzi, nie ma kodu na forum ja szukał nie dędę bo mnie nie zależy ......
 
Odpowiedź
#6
Proszę, oto kod i z całym szacunkiem, czytałem opis jednakże zmiana jakiejkolwiek wartości koloru nie przynosi żadnych efektów.

Kod:
//Modern turn lights v.1.0.0 with arduino and ws2812b by Fedaceag Ionut
#include <FastLED.h>                        //FastLed library version 3.2.1 - https://github.com/FastLED/FastLED/wiki/Overview or http://fastled.io/ with NEOPIXEL or WS2812B
#define NUM_STRIPS 2                        // number of led strips (in this example are front left and front right)
#define NUM_LEDS_PER_STRIP 72               // number of leds per each strip
CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
uint8_t gHue = 0;                           // rotating "base color" used by many of the patterns

const int buttonPinL = 2;                   // turn left
const int buttonPinR = 3;                   // turn right
const int buttonPinEng = 4;                 // engine on to start day lights
const int buttonPinKnightRider = 5;         // knight rider lights

int buttonStateL = 0;
int buttonStateR = 0;
int engineOn = 0;
int KnightRiderState = 0;

int stateL = 0;
int stateR = 0;

uint8_t gBrtL = 0;
uint8_t gBrtR = 0;
int maxBrt = 120;                           // maxim brightness day lights - from 0 to 255

int delayTurnLedAnim = 25; //delay of each led in turn light animation
int delayTurnLedOff = 250; //delay from animation to black (is used twice)
int delayLedToDayLight = 500; // delay from animation to day light on
int nrAnimAfterOff = 3; // number of animations for a single impulse

void setup() {
  //Serial.begin(9600);
  pinMode(buttonPinL, INPUT);
  pinMode(buttonPinR, INPUT);
  pinMode(buttonPinEng, INPUT);
  pinMode(buttonPinKnightRider, INPUT);
 
  FastLED.addLeds<NEOPIXEL, 8>(leds[0], NUM_LEDS_PER_STRIP); //led strip for front left
  FastLED.addLeds<NEOPIXEL, 9>(leds[1], NUM_LEDS_PER_STRIP); //led strip for front right
 
  attachInterrupt(digitalPinToInterrupt(buttonPinL),btnPressL,RISING); // we use interrupt for instant reaction of turn lights
  attachInterrupt(digitalPinToInterrupt(buttonPinR),btnPressR,RISING); // we use interrupt for instant reaction of turn lights

  fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
  fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
  FastLED.show();
}

void loop() {
  // read the input state
    buttonStateL = digitalRead(buttonPinL);
    buttonStateR = digitalRead(buttonPinR);
    KnightRiderState = digitalRead(buttonPinKnightRider);
    EVERY_N_MILLISECONDS( 1 ){
      engineOn = digitalRead(buttonPinEng);
    }

  //function for hazard lights
  if(stateL != 0 && stateR != 0){
   
    for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) {
        leds[0][dot] = 0xff6a00; // color for left turn light
        leds[1][dot] = 0xff6a00; // color for right turn light
        FastLED.show();
        delay(delayTurnLedAnim);
    }
   
    delay(delayTurnLedOff);
    fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
    fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
    FastLED.show();
    delay(delayTurnLedOff);

    if(buttonStateL != HIGH || buttonStateR != HIGH){
     
      if(buttonStateL == HIGH){
        stateL = 1;
      }else{
        stateL = 0;
        gBrtL = 0;
      }
     
      if(buttonStateR == HIGH){
        stateR = 1;
      }else{
        stateR = 0;
        gBrtR = 0;
      }
     
      if(buttonStateL != HIGH && buttonStateR != HIGH){
        delay(delayLedToDayLight);       
      }
     
    }

  //function for left turn lights
  }else if(stateL != 0){
   
    if(KnightRiderState == HIGH && engineOn == LOW){
      fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
    }
   
    for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) {
        leds[0][dot] = 0xff6a00; // color for left turn light
        FastLED.show();
        delay(delayTurnLedAnim);
    }
   
    delay(delayTurnLedOff);
    fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
    FastLED.show();
    delay(delayTurnLedOff);

    stateL++;
    if(stateL >= nrAnimAfterOff && buttonStateL != HIGH){
      stateL = 0;
      gBrtL = 0;
      delay(delayLedToDayLight);
    }

  //function for right turn lights
  }else if(stateR != 0){
   
    if(KnightRiderState == HIGH && engineOn == LOW){
      fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
    }
     
    for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) {
        leds[1][dot] = 0xff6a00; // color for right turn light
        FastLED.show();
        delay(delayTurnLedAnim);
    }
   
    delay(delayTurnLedOff);
    fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
    FastLED.show();
    delay(delayTurnLedOff);

    stateR++;
    if(stateR >= nrAnimAfterOff && buttonStateR != HIGH){
      stateR = 0;
      gBrtR = 0;
      delay(delayLedToDayLight);
    }
   
  }else{
   
    if(stateL == 0 && engineOn == HIGH){
      if(gBrtL <= maxBrt){
        EVERY_N_MILLISECONDS( 1 ) { gBrtL++; }
        fill_solid( leds[0], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtL));
        FastLED.show();
      }
    }else{
      if(gBrtL > 0){
        EVERY_N_MILLISECONDS( 1 ) { gBrtL--; }
        fill_solid( leds[0], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtL));
        FastLED.show();
      }else{
        if(KnightRiderState == HIGH){         
          gHue = 0;
          //EVERY_N_MILLISECONDS( 20 ) { gHue++; }
          fadeToBlackBy( leds[0], NUM_LEDS_PER_STRIP, 20);
          int pos = beatsin16( 30, 0, NUM_LEDS_PER_STRIP-1 );
          leds[0][pos] += CHSV( gHue, 255, 192);
          FastLED.show();
        }
      }
    }

    if(stateR == 0 && engineOn == HIGH){
      if(gBrtR <= maxBrt){    
        EVERY_N_MILLISECONDS( 1 ) { gBrtR++; }
        fill_solid( leds[1], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtR));
        FastLED.show(); 
      }    
    }else{
      if(gBrtR > 0){       
        EVERY_N_MILLISECONDS( 1 ) { gBrtR--; }
        fill_solid( leds[1], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtR));
        FastLED.show();
      }else{
        if(KnightRiderState == HIGH){         
          gHue = 0;
          //EVERY_N_MILLISECONDS( 20 ) { gHue++; }
          fadeToBlackBy( leds[1], NUM_LEDS_PER_STRIP, 20);
          int pos = beatsin16( 30, 0, NUM_LEDS_PER_STRIP-1 );
          leds[1][pos] += CHSV( gHue, 255, 192);
          FastLED.show();
        }
      }
    }
  }
}

void btnPressL(){
  stateL = 1;
  for(int nr = 0; nr < 1500; nr++) {
    buttonStateR = digitalRead(buttonPinR);
    if(buttonStateR == 1){
        stateR = 1;    
      }
  }
}

void btnPressR(){
   stateR = 1;
   for(int nr = 0; nr < 1500; nr++) {
     buttonStateL = digitalRead(buttonPinL);
     if(buttonStateL == 1){
        stateL = 1;
      }
   }
}

Zaczynam się zastanawiać czy problem nie leży po stronie zasilania, Arduino zasilam zasilaczem 12V 1A.
 
Odpowiedź
#7
(29-10-2019, 19:07)semi napisał(a): Kto nie raczył? Ja? Mnie g... obchodzi, nie ma kodu na forum ja szukał nie dędę bo mnie nie zależy ......
 Raczej kolega który założył temat, wstawił już kod i sam zobacz Wink
Co do koloru wygooglac wystarczyć co znaczy hue, choć myślę ze zmianą kolejności kolorów też by starczyla
 
Odpowiedź
#8
Niestety zmiana wartości Hue nic nie daje, gdyby problem był tak trywialny to bym nie pisał Smile
Poza tym wyznaczony jest kolo na kierunkowskazy a mianowicie:
leds[1][dot] = 0xff6a00;
który jednoznacznie wskazuje kolor pomarańczowy,
 
Odpowiedź
#9
Zakupiłem przetwornice na 5V 5A, pewne problemy zniknęły jednakże ustawienie kolory nadal jest problemem.
leds[1][dot] = 0xff6a00
kombinuje ze zmianą wartośći i owszem zmieniają się kolory jednakże pomarańczowego nie jestem w stanie uzyskać, zamiast pomarańczowego mam zielony, dodam iż w innym programie pasek jest w stanie świecić barwą pomarańczową tak więc uszkodzony pasek LED bym wykluczył.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości