আরজিবি রং মাধ্যমে ভাল সাইক্লিং

আমি 16 মিলিয়ন রং RGB এই LED স্ট্রিপ জন্য সরবরাহ করে একটি উপায় অর্জন করার চেষ্টা করা হয়েছে। আমি LEDS.setBrightness ()/ ব্যবহার করার কথা ভাবি কিন্তু আমার প্রচেষ্টায় আমি সফল নই। আমি রঙ ফেইডিংয়ের নথিপত্র পড়েছি, কিন্তু আমি এটি লিখতে পারিনি আমার Arduino লিওনার্দো যাও। এখানে আমার কোড নিচে, 0-255 এর প্রাথমিক ইয়নব্লু মাধ্যমে কোন চক্র। আমি সব রং না 0-255 এর চেয়ে বেশি পেতে কিভাবে বিস্মিত ছিল।

#include 

#define LED_COUNT 60
#define LED_OUT       13
#define BUTTON_IN     10
#define ANALOG_INPUT  A9
#define EXTRA_PIN_A    7
#define EXTRA_PIN_B   11

struct CRGB leds[LED_COUNT];
int wait_time = 5;

void setup() {
  Serial.begin(57600);
  LEDS.addLeds(leds, LED_COUNT);
  LEDS.show();
}

void loop() {
  //start from red
  for(int colorStep=0; colorStep <= 255; colorStep++) {
    int r = 255;
    int g = 0;
    int b = colorStep;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }

  //into blue
  for(int colorStep=255; colorStep >= 0; colorStep--) {
    int r = colorStep;
    int g = 0;
    int b = 255;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }
  //start from blue
  for(int colorStep=0; colorStep <= 255; colorStep++) {
    int r = 0;
    int g = colorStep;
    int b = 255;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }
  //into green
  for(int colorStep=255; colorStep >= 0; colorStep--) {
    int r = 0;
    int g = 255;
    int b = colorStep;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }
  //start from green
  for(int colorStep=0; colorStep <= 255; colorStep++) {
    int r = colorStep;
    int g = 255;
    int b = 0;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }
  //into yellow
  for(int colorStep=255; colorStep >= 0; colorStep--) {
    int r = 255;
    int g = colorStep;
    int b = 0;
   //Now loop though each of the LEDs and set each one to the current color
    for(int x = 0; x < LED_COUNT; x++) {
      leds[x] = CRGB(r,g,b);
    }
   //Display the colors we just set on the actual LEDs
    delay(wait_time);
    LEDS.show();
  }
} //end main loop
2
কিন্তু RGB এর <�কোড> 0-255 মাত্রা হল সব রঙ, আপনি কি করার চেষ্টা করছেন?
যোগ লেখক Alastair, উৎস
ওহহ আচ্ছা; তারপর শুধু আপনার loops বাসাবাড়ি ...
যোগ লেখক Alastair, উৎস
এটা সঠিক, কিন্তু যদি আপনি আমার loops অনুসরণ করুন আপনি দেখতে পাবেন যে আমি শুধুমাত্র 0 <255 এবং 0> 255 RGB জন্য সমন্বয় করছি। অর্থাত 0, 0, ২55//নীল বা 255, 0, 0//লাল যা আমি প্রাথমিক ইনারিভ বলেছেন। চলুন 128, 64, 250 বলি কোন সমন্বয় নেই।
যোগ লেখক Oddacon, উৎস
W/@ 6v6gt উত্তর মত যে চেষ্টা। দুর্ভাগ্যবশত, এটি সঠিকভাবে LEDs মাধ্যমে চক্র না। প্রথম Nested লুপ (কোড সরবরাহ করা হয় না) সঙ্গে একটি পুনরাবৃত্তি সমস্যা বলে মনে হচ্ছে ঠিক যেমন FastLED ক্লাস নেস্টিং পরিচালনা করে?
যোগ লেখক Oddacon, উৎস

6 উত্তর

আমি মনে করি এটি মূল্যবান যে 255 ^ 3 (16,581,375) রঙ এনকোড করার জন্য RGB রঙের স্থানটির জন্য তিনটি 255 মানগুলি কেবলমাত্র একটি উপায়। এই খুব প্রতিটি উজ্জ্বলতা স্তরের অন্তর্ভুক্ত।

আপনি যদি একটি ইম্বুবো প্রভাব পেতে চেষ্টা করেন তবে আপনার আরো সাফল্য হতে পারে অথবা এইচএসএল বা এইচএসভি রঙের স্থান ব্যবহার করা সহজতর হতে পারে।

HSV Rue এর পরিবর্তে হিউ, স্যাচুরেশন এবং মান ব্যবহার করে। FastLED হু (360 এর পরিবর্তে) এর জন্য 0-255 অ্যাড্রেসিং ব্যবহার করার জন্য এইচএসভির বাস্তবায়নটি অপ্টিমাইজ করেছে, এটি মাইক্রোকন্ট্রোলারগুলিতে অ্যানিমেশন চালানোর জন্য দ্রুত রাখে:

https://github.com/FastLED/FastLED/wiki/FastLED-HSV- রং

2
যোগ
দ্রুতগতিতে ব্যবহার করা সত্যিই একটি খুব ভাল বিকল্প! আপনি চাকা reinventing পরাস্ত হবে, এবং একটি আরো কার্যকর চাকা আছে; পি
যোগ লেখক dotnetengineer, উৎস

আমি একটি সাধারণ স্কেচ অন্তর্ভুক্ত করেছি যা সাইন ফেইড টেকনিক ব্যবহার করে একটি একক RGB চলাচল করবে

// Cycle a single RGB led using the sine fade technique
// For common cathode led

const uint8_t lights[360]={
  0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 17, 18, 20, 22, 24, 26, 28, 30, 32, 35, 37, 39,
 42, 44, 47, 49, 52, 55, 58, 60, 63, 66, 69, 72, 75, 78, 81, 85, 88, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, 127, 131, 134, 137,
141, 144, 147, 150, 154, 157, 160, 163, 167, 170, 173, 176, 179, 182, 185, 188, 191, 194, 197, 200, 202, 205, 208, 210, 213, 215, 217, 220, 222, 224, 226, 229,
231, 232, 234, 236, 238, 239, 241, 242, 244, 245, 246, 248, 249, 250, 251, 251, 252, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 253,
252, 251, 251, 250, 249, 248, 246, 245, 244, 242, 241, 239, 238, 236, 234, 232, 231, 229, 226, 224, 222, 220, 217, 215, 213, 210, 208, 205, 202, 200, 197, 194,
191, 188, 185, 182, 179, 176, 173, 170, 167, 163, 160, 157, 154, 150, 147, 144, 141, 137, 134, 131, 127, 124, 121, 117, 114, 111, 107, 104, 101, 97, 94, 91,
 88, 85, 81, 78, 75, 72, 69, 66, 63, 60, 58, 55, 52, 49, 47, 44, 42, 39, 37, 35, 32, 30, 28, 26, 24, 22, 20, 18, 17, 15, 13, 12,
 11, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

const byte redpin = 3;  
const byte greenpin = 5;  
const byte bluepin = 6;  
int loopdelay = 5000;//ms  
int displaylength = 50;//ms  

boolean showiterations = false;  

//_______________________________  
void setup() {  
      Serial.begin(9600);  
}

void loop() {  
for (int k=0; k<360; k++)  
{  
    if (showiterations) {  
    Serial.print(k);  
    Serial.print(F(","));  
    }
analogWrite(redpin, lights[(k+120)%360]);  
analogWrite(greenpin, lights[k]);  
analogWrite(bluepin, lights[(k+240)%360]);  
delay(displaylength);  
}
if (showiterations) {  
Serial.println("  ");  
}
delay(loopdelay);  
}

এই স্কেচ এনজিট্রাক্টস পোস্টিং থেকে প্রাপ্ত হয়েছে, "কিভাবে সঠিকভাবে রেনবো এবং র্যান্ডম রঙগুলি আরজিবি রঙ মডেলের সাথে তৈরি করবেন", http://www.instructables.com/id/How-to-Make-Proper- রেনবো- এবং- র্যান্ডম- রঙ-with-/
এটি অতিরিক্ত সাইক্লিং রং জন্য বিভিন্ন কৌশল পিছনে তথ্য এবং rationale উপলব্ধ করা হয়।


আপনি যদি একটি রৌদ্রোজ্জ্বল প্রভাব তৈরির সময় স্ট্রিপ বরাবর রংগুলিকে ছিঁড়ে ফেলার চেষ্টা করছেন, তবে আমার আরেকটি স্কেচ আছে [Adafruit থেকে, আমি বিশ্বাস করি] যে এটি করবে। আমি বিভিন্ন Neopixel রিং কনফিগারেশন সঙ্গে কার্যকরভাবে এটি ব্যবহার করেছি। স্কেচ বিভিন্ন কৌশল একটি সংখ্যা প্রদর্শন করে। আমি সম্প্রতি থিয়েটার চেসেইনইনবোয়ের সবাইকে আমন্ত্রণ জানিয়েছি, কিন্তু আপনি তাদের সব অন্বেষণ করতে পারেন।

#include 
// following atatement should be wrapped with an ifdef for __AVR__, but this facility botches it up.
// As it is, formatting for the sketch is not quite right, and I do not have a solution for that.
  #include 

const  byte PIN = 7;

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
// Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800)`
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, 6, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
 //This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
 //End of trinket special code


  strip.begin();
   colorWipe(strip.Color(0, 0, 0), 50);//blank
  strip.show();//Initialize all pixels to 'off'
}

void loop() {
 //Some example procedures showing how to display to the pixels:
//  colorWipe(strip.Color(255, 0, 0), 50);//Red
//  colorWipe(strip.Color(0, 255, 0), 50);//Green
//  colorWipe(strip.Color(0, 0, 255), 50);//Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50);//White RGBW
 //Send a theater pixel chase in...
//  theaterChase(strip.Color(127, 127, 127), 50);//White
//  theaterChase(strip.Color(127, 0, 0), 50);//Red
//  theaterChase(strip.Color(0, 0, 127), 50);//Blue

//  rainbow(20);
//  delay(50000);
//  colorWipe(strip.Color(0, 0, 0), 50);//blank
//  rainbowCycle(10);
//  delay(5000);
//    colorWipe(strip.Color(0, 0, 0), 50);//blank
//   delay(5000);
  theaterChaseRainbow(50);
//  delay(5000);
//    colorWipe(strip.Color(0, 0, 0), 50);//blank
//   delay(5000);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<256; j++) {
    for(i=0; i<256*5; j++) {//5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256/strip.numPixels()) + j) & 255));     
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {    //cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
1
যোগ
যদিও আপনার উত্তরটি 100% সঠিক, তবে এটি লিঙ্কটি সরানো, পরিবর্তিত, অন্য একটিতে মার্জ হওয়া বা মূল সাইটটি অদৃশ্য হয়ে গেলেও 100% অর্থহীন হতে পারে ... : ( অতএব, দয়া করে আপনার সম্পাদনাটি সম্পাদনা করুন, এবং লিঙ্ক থেকে প্রাসঙ্গিক উত্তরগুলি আপনার উত্তরের মধ্যে অনুলিপি করুন, যার ফলে আপনার উত্তরটি 100% এই সাইটের! ;) আপনি সর্বদা আপনার উত্তরের নীচে আপনার লিখিত সামগ্রীর জন্য উৎস হিসাবে লিঙ্কটি ছেড়ে দিতে পারেন ...
যোগ লেখক user67244, উৎস
চমৎকার মনে হচ্ছে, ধন্যবাদ!
যোগ লেখক user67244, উৎস
@ অ্যাভামান্ডার, পরামর্শ নেওয়া হয়েছে, প্লিজ পুনরায় মূল্যায়ন করুন।
যোগ লেখক Richard, উৎস

আপনি এটি নিষ্ক্রিয় করা বিবেচনা করা উচিত :)

loop(){
   //if(millis() > previous+100){//uncomment this part to only do a step of the rainbow effect every 100ms
   rainbowEffect();
   //previous = millis();
   //}

   //you can do other stuff, like check a buttons' state here.
   //using the same structure as above, you can choose to give it a higher or lower priority.
}

unsigned char r,g,b;
void rainbowEffect(){
   if(r>254){
      r=0;
      g++;
   }
   if(g>254){
      g=0;
      b++;
   }
   if(b>254){
      b=0;
   }
   r++;
   ledStrip.set(r,g,b);
}
0
যোগ

আমি মনে করি @ মাজারিক সঠিক ছিল, এইচএসভি এই জন্য যেতে উপায়। আরজিবি এর 16+ মিলিয়ন রংগুলিতে উজ্জ্বলতা রয়েছে, এবং তাদের মধ্যে কয়েকটি কেবল স্ট্রিপে প্রদর্শিত হবে না, তাই আমি কমপক্ষে ভাল ফেইড করার উপায় খুঁজে পেয়েছি:

int thissat = 255;           //- LOOPS DELAY VAR
int idex = 0;                //-LED INDEX
int ihue = 0;                //-hue (0-255)

void rainbow_fade() {
    ihue++;
    if (ihue > 255) {ihue = 0;}
    for(int idex = 0 ; idex < LED_COUNT; idex++ ) {
      leds[idex] = CHSV(ihue, thissat, 255);
    }
    LEDS.show();    
    delay(wait_time);
}
0
যোগ

RGB রঙটি একটি স্বাক্ষরহীন লম্বায় উপস্থাপিত হতে পারে এমন সুবিধাটি আপনি নিতে পারেন। এবং একটি পাল্টা ব্যবহার করুন। কিন্তু ধৈর্য ধরে 1 মিমি সহ 16 মিও রঙের মাধ্যমে ধৈর্য ধরুন কিছু সময় নিন :-)। (প্রায় 4-5 ঘণ্টা: 16581375/(1000 [মিঃ] * 60 [মি] * 60 [এইচ]) = 4,6)

void loopThrougAllColors(){
 //The trick here is to use a unsigned long value as the color representation. 
 //Each byte represent a color (except the first)
 //         none, R  G  B
 //         0x00 00 00 00                     
 //Note: static means it is a global variable - but only seen in thisfunction.                                            
  static unsigned long ledColor = 0;        
  static int ledIndex = 0;

  ledColor++;
  ledColor &= 0x00FFFFFF; /* Overflow preventing (instead of if sentence checking the boundaries). */           

  leds[0] = ledColor;

  FastLED.show();
  FastLED.delay(1);
  //delay(10);
} 
0
যোগ

আপনি যদি প্রায় 16 মিলিয়ন সম্ভাব্য রঙের প্রত্যেকটি প্রদর্শন করতে চান, তবে আপনাকে এই উদাহরণের মতো loops এর জন্য আপনার ঘরে ঘোরাতে হবে:

x = 1 ; //only for testing
for ( int redx = 0 ; redx <= 255 ; redx ++ ) {
    for ( int greenx = 0 ; greenx <= 255 ; greenx ++ ) {
        for ( int bluex = 0 ; bluex <= 255 ; bluex ++ ) {
             leds[ x ] = CRGB(redx,greenx,bluex);
             delay(wait_time); 
             LEDS.show(); 
        }
    }
}
0
যোগ
একটি বিকল্প RGB এর পরিবর্তে এইচএসবি বা এইচএসভি ব্যবহার করতে পারে, এইভাবে আপনি ইম্ব্রোবো প্রভাব পেতে সময়ের সাথে রঙ বৃদ্ধি করতে পারেন।
যোগ লেখক dotnetengineer, উৎস