Arduino Polska Forum

Pełna wersja: Modern Car turnLights
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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?
Pokaż program bo bez szklanej kuli nie wiadomo jak on wygląda.
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.
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ń.
(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 ......
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.
(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
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,
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ł.