第1回 Arduino

Arduinoとは

マイコンボードの一種
プログラムを書いて、センサーの値を読み込んだり、
モーターを動かしたり、LEDを光らせたり、いろいろできる

LEDを点灯させる

LEDを点滅させる
Copy!!

void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(500);
  digitalWrite(13,LOW);
  delay(500);
}
          
deiay(1000)=1秒待つ

センサーを使いLEDを点灯させる

暗さが「700」以上になった際にLEDが点灯
Copy!!

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
  
void loop() {
  int val = analogRead(1);
  Serial.println(val);

  // 暗いときLED点灯
  if (val > 700) {
    digitalWrite(13,HIGH);
  } else {
    digitalWrite(13,LOW);
  }

  delay(500);
}
        

NeoPixel

フルカラーのLED、今回は5個連結して使用。
Copy!!

//04132で点灯

#include <Adafruit_NeoPixel.h>
#define PIN        9 // 信号用のピンを指定
#define NUMPIXELS 5 // LEDの数を指定
int brightness = 50; // 明るさ

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// 点灯する順番を指定(0始まり)
int order[NUMPIXELS] = {0, 4, 1, 3, 2}; // → 1,5,2,4,3

void setup() {
  pixels.begin(); // NeoPixel出力ピンの初期化
  pixels.setBrightness(brightness);
}

void loop() {
  pixels.clear(); // すべてのLEDを消す

  for(int i = 0; i < NUMPIXELS; i++) {
    int ledIndex = order[i]; // 指定した順番で取り出す

    pixels.setPixelColor(ledIndex, pixels.Color(255, 0, 255));
    pixels.show();
    delay(1000);
  }
}
          
Copy!!

//順番指定(04132)+色指定

#include <Adafruit_NeoPixel.h>
#define PIN        9
#define NUMPIXELS 5
int brightness = 50;

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// 点灯順(1,5,2,4,3 → 0,4,1,3,2)
int order[NUMPIXELS] = {0, 4, 1, 3, 2};

// 各LEDの色(0〜4に対応)
uint32_t colors[NUMPIXELS];

void setup() {
  pixels.begin();
  pixels.setBrightness(brightness);

  // 色を設定
  colors[0] = pixels.Color(255, 0, 0);   // 赤
  colors[1] = pixels.Color(255, 255, 0); // 黄
  colors[2] = pixels.Color(0, 255, 0);   // 緑
  colors[3] = pixels.Color(0, 0, 255);   // 青
  colors[4] = pixels.Color(255, 0, 255); // 紫
}

void loop() {
  pixels.clear();

  for(int i = 0; i < NUMPIXELS; i++) {
    int ledIndex = order[i];

    pixels.setPixelColor(ledIndex, colors[ledIndex]);
    pixels.show();
    delay(1000);
  }
}
          
Copy!!

//色・順番、バラバラ

#include <Adafruit_NeoPixel.h>
#define PIN        9
#define NUMPIXELS 5
int brightness = 50;

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int order[NUMPIXELS]; // 点灯順
uint32_t colors[NUMPIXELS]; // 色

void setup() {
  pixels.begin();
  pixels.setBrightness(brightness);

  randomSeed(analogRead(0)); // 乱数の種(毎回変わるように)
}

void loop() {
  pixels.clear();

  // --- 順番を初期化 ---
  for(int i = 0; i < NUMPIXELS; i++) {
    order[i] = i;
  }

  // --- 順番をシャッフル(Fisher-Yates)---
  for(int i = NUMPIXELS - 1; i > 0; i--) {
    int j = random(0, i + 1);
    int temp = order[i];
    order[i] = order[j];
    order[j] = temp;
  }

  // --- 色をランダム生成 ---
  for(int i = 0; i < NUMPIXELS; i++) {
    int r = random(0, 256);
    int g = random(0, 256);
    int b = random(0, 256);
    colors[i] = pixels.Color(r, g, b);
  }

  // --- ランダム順&ランダム色で点灯 ---
  for(int i = 0; i < NUMPIXELS; i++) {
    int ledIndex = order[i];

    pixels.setPixelColor(ledIndex, colors[ledIndex]);
    pixels.show();
    delay(500);
  }

  delay(2000); // 次のランダムまで少し待つ
}
          
Copy!!

//色がそろったら点滅
#include <Adafruit_NeoPixel.h>
#define PIN        9
#define NUMPIXELS 5
int brightness = 50;

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int order[NUMPIXELS];
uint32_t colors[NUMPIXELS];

// 使う色(固定5色)
uint32_t palette[5];

void setup() {
  pixels.begin();
  pixels.setBrightness(brightness);

  randomSeed(analogRead(0));

  // 色パレット
  palette[0] = pixels.Color(255, 0, 0);   // 赤
  palette[1] = pixels.Color(255, 255, 0); // 黄
  palette[2] = pixels.Color(0, 255, 0);   // 緑
  palette[3] = pixels.Color(0, 0, 255);   // 青
  palette[4] = pixels.Color(255, 0, 255); // 紫
}

void loop() {
  pixels.clear();

  // --- 順番初期化 ---
  for(int i = 0; i < NUMPIXELS; i++) {
    order[i] = i;
  }

  // --- シャッフル ---
  for(int i = NUMPIXELS - 1; i > 0; i--) {
    int j = random(0, i + 1);
    int temp = order[i];
    order[i] = order[j];
    order[j] = temp;
  }

  // --- 色をランダム選択(5色から)---
  for(int i = 0; i < NUMPIXELS; i++) {
    int c = random(0, 5);
    colors[i] = palette[c];
  }

  // --- 全部同じ色かチェック ---
  bool sameColor = true;
  for(int i = 1; i < NUMPIXELS; i++) {
    if(colors[i] != colors[0]) {
      sameColor = false;
      break;
    }
  }

  // --- 通常点灯 ---
  for(int i = 0; i < NUMPIXELS; i++) {
    int ledIndex = order[i];
    pixels.setPixelColor(ledIndex, colors[ledIndex]);
    pixels.show();
    delay(500);
  }

  // --- 全部同じ色なら点滅 ---
  if(sameColor) {
    for(int k = 0; k < 2; k++) {
      pixels.clear();
      pixels.show();
      delay(300);

      for(int i = 0; i < NUMPIXELS; i++) {
        pixels.setPixelColor(i, colors[i]);
      }
      pixels.show();
      delay(300);
    }
  }

  delay(1500);
}