チラシのうら

レゴとか、工作とか。

8pino リベンジ。の続き

前回までのお話

回路までは組めたはずだが…

早速光らせます。 f:id:tetunori_lego:20150520194450j:plain 成功!

それだけだと、つまらないので

Neopixelのコードを1から書いて見ることにしました。

結果、こんな感じ。 色と明るさを制御してみました。

コードはこちら。

#include <Adafruit_NeoPixel.h>
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
 #include <avr/power.h>
#endif

#define NEOPIXEL_IN_PIN 0
#define NUM_OF_PIXELS 16
#define BRIGHTNESS_MAX 30
#define DELAY_TIME_FOR_GRADATION 70

Adafruit_NeoPixel pixels = Adafruit_NeoPixel( NUM_OF_PIXELS, NEOPIXEL_IN_PIN );

void setup() {
  
  pinMode( NEOPIXEL_IN_PIN, OUTPUT );
  
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
  if( F_CPU == 16000000 ) clock_prescale_set( clock_div_1 );
#endif
  pixels.begin();
  pixels.show(); // Initialize all pixels to "off"
  
}

void loop() {
  
  uint8_t  i = 0;
  
  for( i = 0; i < NUM_OF_PIXELS; i++ ){
    if( i < ( NUM_OF_PIXELS / 4 ) ){
      pixels.setPixelColor(i, 255, 0, 0);
    }else if( i < ( ( 2 * NUM_OF_PIXELS ) / 4 ) ){
      pixels.setPixelColor(i, 0, 255, 0);
    }else if( i < ( ( 3 * NUM_OF_PIXELS ) / 4 ) ){
      pixels.setPixelColor(i, 0, 0, 255);
    }else if( i < NUM_OF_PIXELS ){
      pixels.setPixelColor(i, 255, 255, 255);
    }
  }
  
  for( i = 1; i < BRIGHTNESS_MAX; i++ ){
    
    pixels.setBrightness(i);
    
    // Reflect some settings and light them.
    pixels.show();
    delay( DELAY_TIME_FOR_GRADATION );
    
  }
  
}

わかったこと

  • 明るさは0-255まで代入可能だが、50以上は眩しすぎる
  • 明るさを一度0にしてしまうと、以後、値を設定してもうんすん
  • 明るさは個々のLEDには設定できない
  • センスがないと、光っても全然かっこ良くない

とても気になること

この回路にしてから、手持ちのモバイルバッテリーからの給電では、Neopixelが光らなくなってしまいました。 (8pinoは動作している)
PCからの給電だと、LEDも光るのですが… たぶん、僕の回路が悪いのだろうなぁ。

とりあえず無事、リベンジは果たせたので、満足です。