×

らずらいと姫の挑戦日記(第49回)~ネオピクセルの光を変えました~

2018-12-11

こんにちは。らずらいと姫です。
12月に入り、すっかり寒くなってきましたね。
みなさんも風邪をひかないよう、体調管理にお気を付けください!

さて今回は、前回のLEDライトの光らせ方を活かして、
別の光らせ方に挑戦してみます!

 

タイトル

 

 

今回の記事はこちらのgithubにアップロードしましたので
ソースコードはこちらもご利用ください!

https://github.com/LAPIS-Lazurite/kirakira

 

準備するものや、色味の考え方は
前回と同じです。

前回の記事をご覧になってみてください(^-^)

 

前回は2色の色がぐるぐるぐるぐる
同じ動きをする光り方でした。

今回はLEDの光り方に、もっと自由度を出します!

1つ1つLEDの色を変えて、
光らせ方や消え方も好きなようにすることができます☄

 

ライトの色を決める

 

まずは前回同様、何色に光らせるかを決めましょう。

今回は「LEDの色を1つ1つ好きな色にできる」というのがポイントなので、
思い切って7色を使った、カラフルな色にしてみます!

 

色は下記のように入力しました☄

light色の決め方

色味を調整しながら、
お好きな色の値を入れてみてくださいね。

 

色を切り替える

 

光らせたい色を決めたら、
次は光り方を調整していきます。

light光らせ方

このように入力すると、
7色のカラフルな色が順番に、0番から先端の59番まで光っていきます!

delayで光のスピードも決めれるので、
早くしたり遅くしたり、お好きなスピードを入れください。

今回はdelay(40)にしました。

 

次は点いたLEDを消灯させていきます!

 

light消灯2✶

 

また、今回は違う消灯の仕方も組み込んでみます。

もう1つの消え方は、
0番から59番のほうへ消えていく方法です。

 

light消灯パート2

 

ライトの消え方にもこだわることができます(^-^)

 

実際に動かしてみましょう✿

 

それでは実際に動かしてみましょう!

七色にライトを光らせて、
しっかりと2パターンの消灯ができているでしょうか…!

 

 

できました~!

前回よりもカラフルで、より豪華になりましたね(^-^)

こちらがソースコードになります☄


#include "kirakira_ide.h" // Additional Header

#define LED_LENGTH 60

unsigned char led_ram[LED_LENGTH * 3];

void setup(void)
{
memset(led_ram, 0, sizeof(led_ram));
led.init(8, LED_LENGTH);
}

void loop(void)
{
int i;
int j;
for (i = 0; i < LED_LENGTH * 3; i += 3) {
 led_ram[i + 0] = map(64, 0, 0xff, 0, 0x60);
 led_ram[i + 1] = map(64, 0, 0xff, 0, 0xff);
 led_ram[i + 2] = map(64, 0, 0xff, 0, 0x60);
 led.write(led_ram); delay(40);
 }
 for (i = (LED_LENGTH - 1) * 3; i < 0; i -= 3)
{
led_ram[i + 0] = 0;
led_ram[i + 1] = 0;
led_ram[i + 2] = 0;
led.write(led_ram);
delay(40);
}
for (i = 0; i < LED_LENGTH * 3; i += 3)
{
led_ram[i + 0] = map(64, 0, 0xff, 0, 0x00);
led_ram[i + 1] = map(64, 0, 0xff, 0, 0xff);
led_ram[i + 2] = map(64, 0, 0xff, 0, 0xdf);
led.write(led_ram);
delay(40);
}
for (i = 0; i < LED_LENGTH * 3; i += 3)
{
led_ram[i + 0] = 0;
led_ram[i + 1] = 0;
led_ram[i + 2] = 0;
led.write(led_ram);
delay(40);
}}

 

おまけ

 

もっとキラキラした方がいいなーと思ったので、
こんな風に仕上げてみました✧✧

 

ライトがじわっと光り、
1つ1つのライトがいろんな色に切り替わっていきます☄

こちらのソースコードは下記になります。


#include "kirakira_ide.h" // Additional Header

#define LED_LENGTH 60
#define RESOLUTION 16
#define RED_R 255/8
#define RED_G 0
#define RED_B 0
#define ORANGE_R 255/8
#define ORANGE_G 64/8
#define ORANGE_B 0
#define YELLOW_R 255/8
#define YELLOW_G 255/8
#define YELLOW_B 0
#define GREEN_R 0
#define GREEN_G 128/8
#define GREEN_B 0
#define CYAN_R 0
#define CYAN_G 255/8
#define CYAN_B 255/8
#define BLUE_R 0
#define BLUE_G 0
#define BLUE_B 255/8
#define VIOLET_R 255/8
#define VIOLET_G 0
#define VIOLET_B 255/8

unsigned char led_ram[LED_LENGTH * 3];

void setup(void)
{
 memset(led_ram, 0, sizeof(led_ram));
 led.init(8, LED_LENGTH);
}

void loop(void)
{
 int i;
 int j, k;
 unsigned char r, g, b;
 for (i = 0; i < LED_LENGTH; i += 1)
 {
 switch (i % 7) {
 case 0:
 r = RED_R, g = RED_G, b = RED_B;
 break;
 case 1:
 r = ORANGE_R, g = ORANGE_G, b = ORANGE_B;
 break;
 case 2:
 r = YELLOW_R, g = YELLOW_G, b = YELLOW_B;
 break;
 case 3:
 r = GREEN_R, g = GREEN_G, b = GREEN_B;
 break;
 case 4:
 r = CYAN_R, g = CYAN_G, b = CYAN_B;
 break;
 case 5:
 r = BLUE_R, g = BLUE_G, b = BLUE_B;
 break;
 case 6:
 r = VIOLET_R, g = VIOLET_G, b = VIOLET_B;
 break;
 }

 led_ram[i * 3 + 0] =g;
 led_ram[i * 3 + 1] =r;
 led_ram[i * 3 + 2] = b;
 led.write(led_ram);
 delay(40);
 }
 for (k = 0; k < 28; k++) {
 for (j = 0; j < RESOLUTION ; j ++) {
 for (i = 0; i < LED_LENGTH; i += 1)  {  switch ((i + k) % 7) {  case 0:  //r = 255, g = 64, b = 0;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, RED_R, ORANGE_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, RED_G, ORANGE_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, RED_B, ORANGE_B);  break;  case 1:  //r = 255, g = 64, b = 0;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, ORANGE_R, YELLOW_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, ORANGE_G, YELLOW_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, ORANGE_B, YELLOW_B);  break;  case 2:  //r = 255, g = 255, b = 0;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, YELLOW_R, GREEN_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, YELLOW_G, GREEN_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION,YELLOW_B, GREEN_B);  break;  case 3:  //r = 0, g = 128, b = 0;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, GREEN_R, CYAN_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, GREEN_G, CYAN_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, GREEN_B, CYAN_B);  break;  case 4:  //r = 0, g = 255, b = 255;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, CYAN_R, BLUE_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, CYAN_G, BLUE_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION,CYAN_B, BLUE_B);  break;  case 5:  //r = 0, g = 0, b = 255;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, BLUE_R, VIOLET_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, BLUE_G, VIOLET_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, BLUE_B, VIOLET_B);  break;  case 6:  //r = 128, g = 0, b = 128;  led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, VIOLET_R, RED_R);  led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, VIOLET_G, RED_G);  led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, VIOLET_B, RED_B);  break;  }  }  led.write(led_ram);  delay(10);  }  }  for (i = (LED_LENGTH - 1); i &amp;gt;= 0; i -= 1)
 {
 led_ram[i * 3 + 0] = 0;
 led_ram[i * 3 + 1] = 0;
 led_ram[i * 3 + 2] = 0;
 led.write(led_ram);
 delay(40);
 }
 for (i = 0; i < LED_LENGTH; i += 1)
 {
 switch (i % 7) {
 case 0:
 r = RED_R, g = RED_G, b = RED_B;
 break;
 case 1:
 r = ORANGE_R, g = ORANGE_G, b = ORANGE_B;
 break;
 case 2:
 r = YELLOW_R, g = YELLOW_G, b = YELLOW_B;
 break;
 case 3:
 r = GREEN_R, g = GREEN_G, b = GREEN_B;
 break;
 case 4:
 r = CYAN_R, g = CYAN_G, b = CYAN_B;
 break;
 case 5:
 r = BLUE_R, g = BLUE_G, b = BLUE_B;
 break;
 case 6:
 r = VIOLET_R, g = VIOLET_G, b = VIOLET_B;
 break;
 }

 led_ram[i * 3 + 0] = g;
 led_ram[i * 3 + 1] = r;
 led_ram[i * 3 + 2] = b;
 led.write(led_ram);
 delay(40);
 }
 for (k = 0; k < 28; k++) {
 for (j = 0; j < RESOLUTION ; j ++) {
 for (i = 0; i < LED_LENGTH; i += 1)
 {
 switch ((i + k) % 7) {
 case 0:
 //r = 255, g = 64, b = 0;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, RED_R, ORANGE_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, RED_G, ORANGE_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, RED_B, ORANGE_B);
 break;
 case 1:
 //r = 255, g = 64, b = 0;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, ORANGE_R, YELLOW_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, ORANGE_G, YELLOW_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, ORANGE_B, YELLOW_B);
 break;
 case 2:
 //r = 255, g = 255, b = 0;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, YELLOW_R, GREEN_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, YELLOW_G, GREEN_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION,YELLOW_B, GREEN_B);
 break;
 case 3:
 //r = 0, g = 128, b = 0;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, GREEN_R, CYAN_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, GREEN_G, CYAN_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, GREEN_B, CYAN_B);
 break;
 case 4:
 //r = 0, g = 255, b = 255;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, CYAN_R, BLUE_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, CYAN_G, BLUE_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION,CYAN_B, BLUE_B);
 break;
 case 5:
 //r = 0, g = 0, b = 255;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, BLUE_R, VIOLET_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, BLUE_G, VIOLET_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, BLUE_B, VIOLET_B);
 break;
 case 6:
 //r = 128, g = 0, b = 128;
 led_ram[i * 3 + 1] = map(j, 0, RESOLUTION, VIOLET_R, RED_R);
 led_ram[i * 3 + 0] = map(j, 0, RESOLUTION, VIOLET_G, RED_G);
 led_ram[i * 3 + 2] = map(j, 0, RESOLUTION, VIOLET_B, RED_B);
 break;
 }
 }
 led.write(led_ram);
 delay(10);
 }
 }
 for (i = 0; i < LED_LENGTH; i += 1)
 {
 led_ram[i * 3 + 0] = 0;
 led_ram[i * 3 + 1] = 0;
 led_ram[i * 3 + 2] = 0;
 led.write(led_ram);
 delay(40);
 }

}

 

次回は、48回目と49回目でやった色を
無線で切り替えることに挑戦しようと思います(^o^)/

 

Seeyou