0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NeoPixel制御ボードのサンプルプログラム⑤

Posted at
  • 商品概要

RP2040マイコンを使って、NeoPixelを制御して楽しもうというコンセプトです。
プッシュボタンが1つ or 2つ搭載しているので、外部入力または切り替えなどで使えます。

  • プログラム環境

ArduinoIDE バージョン:2.3.2
Adafruit NeoPixel Library 1.12.2

  • ハードウェアの主な仕様

 ①マイコン:PR2040-ZERO(RaspberryPiPico系)
 ②NeoPixel接続ピン  GPI08(R1でショート)
 ③プッシュスイッチ1:GPI07
 ④プッシュスイッチ2:GPI06(2個搭載しているボードのみ)
 ⑤音声入力:GP26

  • メインプログラム(ArduinoIDEのスケッチ)

ボタンを使ってLED表示を切り替える動作確認用サンプルプログラムです。
ボタンの状態をモニタして、押されたら切り替えを確認できます。
状態を変化させたい時の切り替えの参考にしていただけたらと思います。

// ボタンのテスト
#include <Adafruit_NeoPixel.h>

// 定数の定義
#define BUTTON1_PIN 7 // ボタン1のピン番号
#define BUTTON2_PIN 6 // ボタン2のピン番号
#define NEOPIXEL_PIN 8 // NeoPixelのピン番号
#define NUMPIXELS 36 // NeoPixelのLEDの数
#define BRIGHTNESS 32 // NeoPixelの明るさ

// NeoPixelオブジェクトの作成
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  // ボタンピンの設定
  pinMode(BUTTON1_PIN, INPUT); // ボタン1を入力に設定
  pinMode(BUTTON2_PIN, INPUT); // ボタン2を入力に設定

  // NeoPixelの初期化
  strip.begin(); // NeoPixelの初期化
  strip.setBrightness(BRIGHTNESS); // 明るさの設定
  setNeoPixelColor(strip.Color(0, 255, 0)); // 初期状態で緑色に設定
}

void loop() {
  // ボタンの状態を読み取る
  int button1State = digitalRead(BUTTON1_PIN); // ボタン1の状態を読み取る
  int button2State = digitalRead(BUTTON2_PIN); // ボタン2の状態を読み取る

  // 両方のボタンがHIGHの場合は何もしない
  if (button1State == HIGH && button2State == HIGH) {
      delay(100); // 状態を読み取る間隔を調整

    return;
  }

  // 両方のボタンが押された場合
  if (button1State == LOW && button2State == LOW) {
    setNeoPixelColor(strip.Color(0, 255, 0)); // 緑に設定
  }
  // ボタン1が押された場合
  else if (button1State == LOW) {
    setNeoPixelColor(strip.Color(255, 105, 180)); // ピンクに設定
  }
  // ボタン2が押された場合
  else if (button2State == LOW) {
    setNeoPixelColor(strip.Color(0, 255, 255)); // 水色に設定
  }

  delay(100); // 状態を読み取る間隔を調整
}

// NeoPixelの色を設定する関数
void setNeoPixelColor(uint32_t color) {
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, color); // 各LEDの色を設定
  }
  strip.show(); // 設定した色を表示
}

入力端子をプルアップ抵抗に設定でも良さそうですが、外付けの100kΩと
並列になるのでチャタリング除去の効果が変換するので注意が必要ですね。

  pinMode(BUTTON1_PIN, INPUT_PULLUP); // ボタン1をプルアップ入力に設定
  pinMode(BUTTON2_PIN, INPUT_PULLUP); // ボタン2をプルアップ入力に設定
  • このプログラムを作成した時の考え方。

ボタンを押したら状態が変わる例です。
初期状態は、グリーン。
ボタン1を押したら、ピンク。
ボタン2を押したら、ブルー。
ボタンを両方押したら、グリーンに戻るのですが離した瞬間にボタンが
片方LO判定になってしまう恐れがあるので工夫が必要そうですね。

  • 実行結果

1723964016855.jpg
RESET直後

1723964027204.jpg
ボタン1を押した結果。

1723964037398.jpg
ボタン2を押した結果。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?