ArduinoでLEDのテープを光らせてみました!!!
LEDのテープは以下の物を使用しています。ライブラリもArduino用のライブラリもここからゲットできます。
www.switch-science.com
配線
つなぎ方は以下のような感じです!
LEDにはArduinoからではなく、外部電源をつなぎました。
LEDテープに外部電源をつなぐ際には、必ず外部電源のGNDをAruduinoのGNDに繋げる必要があります。
そうしないと光り方がおかしくなります。
LEDはデジタル2番ピンに繋げています。
また、スイッチを押したらブワーっと色が変わっていくようにしたかったので
スイッチを6番ピンに繋げました。
プログラムの例
光らせるコードは以下のような感じです。
#include <Adafruit_NeoPixel.h> #include "Arduino.h" #include "SoftwareSerial.h" #define DELAY_TIME 200 #define DELAY_TIME2 10 Adafruit_NeoPixel strip = Adafruit_NeoPixel(120, 2, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(9600); //delay(1); strip.begin(); strip.show(); // Initialize all pixels to 'off' pinMode(6,INPUT); pinMode(13, OUTPUT); colorWipe(strip.Color(100, 0, 250), DELAY_TIME2); // Purple } void loop() { // put your main code here, to run repeatedly: if(digitalRead(6) == HIGH) { colorWipe(strip.Color(100, 100, 0), DELAY_TIME2); //YELLOW colorpettern1(strip.Color(0, 50, 0), DELAY_TIME2); //GREEN colorpettern2(strip.Color(100, 20, 20), DELAY_TIME); //Pink colorpettern3(strip.Color(100, 200, 50), DELAY_TIME); //エメラルド colorpettern4(strip.Color(0, 0, 255), DELAY_TIME2); //Blue colorpettern5(strip.Color(255, 255, 255), DELAY_TIME2); //White colorpettern8(strip.Color(0, 100, 150), DELAY_TIME2); //SkyBlue colorpettern10(strip.Color(255, 0, 0), DELAY_TIME); //Red colorWipe(strip.Color(0, 0, 0), DELAY_TIME2); //Black } } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } void colorpettern1(uint32_t c, uint8_t wait){ for(uint16_t i=0; i<strip.numPixels(); i++) { if(i%2 == 0){ strip.setPixelColor(i, c); strip.show(); delay(wait); strip.setPixelColor(i, 0); strip.show(); }else{ strip.setPixelColor(i, 0); strip.show(); delay(wait); strip.setPixelColor(i, c); strip.show(); } } } void colorpettern2(uint32_t c, uint8_t wait){ for(int i = 0 ; i < strip.numPixels(); i++ ) { strip.setPixelColor(i-1,strip.Color(0,0,0)); strip.setPixelColor(i,c); strip.show(); delay(30); } } void colorpettern3(uint32_t c, uint8_t wait){ for(int i = 0 ; i < strip.numPixels(); i++ ) { int r = random(0, strip.numPixels()); strip.setPixelColor(r,c); strip.show(); delay(20); } } void colorpettern4(uint32_t c, uint8_t wait){ for(int i = 0 ; i < strip.numPixels(); i++ ) { strip.setPixelColor(i,strip.Color(0,0,0)); int r = random(0, strip.numPixels()); strip.setPixelColor(r,c); strip.show(); delay(20); strip.setPixelColor(r,c); strip.show(); } } void colorpettern5(uint32_t c, uint8_t wait){ for(int i = 0 ; i < 70; i++ ) { strip.setPixelColor(i,strip.Color(0,0,0)); int r = random(0, strip.numPixels()); strip.setPixelColor(r,c); strip.show(); delay(20); strip.setPixelColor(r,strip.Color(0,0,0)); strip.show(); } } void colorpettern6(uint32_t c, uint8_t wait){ uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { if(i%2 == 0){ strip.setPixelColor(i, c); }else{ strip.setPixelColor(i, strip.Color(0,0,0)); } } strip.show(); //delay(wait); } } void colorpettern7(uint32_t c, uint8_t wait){ uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { if(i%2 == 1){ strip.setPixelColor(i, c); }else{ strip.setPixelColor(i, strip.Color(0,0,0)); } } strip.show(); //delay(wait); } } void colorpettern8(uint32_t c, uint8_t wait){ colorpettern6(c, 0); //delay(20); colorpettern7(c, 0); //delay(20); colorpettern6(c, 0); //delay(20); colorpettern7(c, 0); } void colorpettern9(uint32_t c, uint8_t wait){ for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); } strip.show(); } void colorpettern10(uint32_t c, uint8_t wait){ colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); colorpettern9(strip.Color(0, 0, 0), 0); delay(wait); colorpettern9(c, 0); delay(wait); int r = random(0, strip.numPixels()); strip.setPixelColor(r,c); strip.show(); }
コードの解説
コードの内容としては、
ライブラリの読み込み
#include <Adafruit_NeoPixel.h>
NeoPixelのインスタンス。第一引数がLEDの数です。ピッタリじゃなく多めに書いてあってもいけます。
第二引数は使用するデジタルピンの番号です。
Adafruit_NeoPixel strip = Adafruit_NeoPixel(120, 2, NEO_GRB + NEO_KHZ800);
ここで初期化しています。
strip.begin();でArduinoのすべてのLED用のメモリ?に0が書き込まれ、strip.show();でLEDに転送しているのですべてのLEDがOFFになります。
strip.begin();
strip.show(); // Initialize all pixels to 'off'
LEDの色は以下の関数でセットします。
strip.setPixelColor(使用するLEDの番号, R, G, B);
すべてのLEDの色を変えたいときはfor文を使います。色を決めてstrip.show();で反映しています。
こちらのコードだとLEDが一つずつ順番に光っていき、
for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, 255, 255, 255); strip.show(); }
for文の外に strip.show();を書くと、すべてのLEDが同時に光ってくれます。
for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, 255, 255, 255); } strip.show();
これらを使って、光り方のパターンの関数を作って実行しています。
また、この中では使っていませんが、
uint32_t color = strip.getPixelColor(取得したいLEDの番号);
でLEDにセットされた色情報を取得でき、
strip.setBrightness(0から255の値);
で輝度を調整できるみたいです。