「Arduino Nano」と「M5Stack用RGB LEDユニット」を使ってサイコロの代わりになるものを作る

はじめに

以前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



このエントリーをはてなブックマークに追加