はじめに
以前Arduino Nano Everyを使ってサイコロの代わりになるものを作りました。touch-sp.hatenablog.com
今回は同じArduino Nano Everyに「Grove Shield for Arduino Nano」「M5Stack用RGB LEDユニット」「M5Stack用メカニカルキーボタンユニット」を組み合わせて改良しました。
出来上がり
はんだ付けは必要ありません。
使ったもの
Arduino Nano Every Grove Shield for Arduino Nano M5Stack用RGB LEDユニット(SK6812) × 2 M5Stack用メカニカルキーボタンユニット レゴブロック (LEGO) テクニック リフトアーム 1 x 15:[Red / レッド] × 2 テクニック リフトアーム 1 x 3:[Red / レッド] × 2 テクニック コネクターペグ - 滑り止め:[Black / ブラック] × 10 モバイルバッテリー
スケッチ
#include <Adafruit_NeoPixel.h> long randNumber; const int buttonON = LOW; // ボタンが押されているとピンの値はLOW const int buttonPin1 = 6; const int button_LED = 7; const int LED_PIN1 = 5; const int LED_PIN2 = 3; Adafruit_NeoPixel buttonLED = Adafruit_NeoPixel(1, button_LED, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixels1 = Adafruit_NeoPixel(3, LED_PIN1, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixels2 = Adafruit_NeoPixel(3, LED_PIN2, NEO_GRB + NEO_KHZ800); void setup() { randomSeed(analogRead(0)); pinMode(buttonPin1, INPUT_PULLUP); buttonLED.begin(); pixels1.begin(); pixels2.begin(); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); } void loop() { if (digitalRead(buttonPin1) == buttonON){ buttonLED.setPixelColor(0, buttonLED.Color(0, 100, 0)); buttonLED.show(); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(100); led_loop(100); led_loop(100); randNumber = random(1, 7); // 1から6の乱数を生成 switch(randNumber){ case 1: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); break; case 2: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); break; case 3: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); break; case 4: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); break; case 5: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); break; case 6: pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 100, 5)); break; default: break; } pixels1.show(); pixels2.show(); buttonLED.setPixelColor(0, buttonLED.Color(0, 0, 0)); buttonLED.show(); } } void led_loop(int time){ pixels1.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 100, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 100, 5)); pixels1.show(); pixels2.show(); delay(time); pixels1.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels1.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(2, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(1, pixels1.Color(5, 5, 5)); pixels2.setPixelColor(0, pixels1.Color(5, 5, 5)); pixels1.show(); pixels2.show(); }
今回はLEDの制御に「Adafruit_NeoPixel」というライブラリを使いました。
以前、別の工作で「M5Stack用メカニカルキーボタンユニット」を使った時には「FastLED」というのを使いました。
こちらの記事になります。参考までに。
touch-sp.hatenablog.com