pdf-icon

Arduino入門

2. デバイス&サンプル

Unit ByteSwitch Arduino チュートリアル

1. 準備

ドライバライブラリ
Unit ByteSwitch は設計上 Unit ByteButton と非常に似ているため、M5Unit-ByteButton ライブラリを再利用して駆動します。

2. サンプルプログラム

サンプル説明
Unit ByteSwitch は 8 つのトグルスイッチ入力と 9 つのプログラム可能な RGB LED を提供し、複数スイッチ入力を必要とするアプリケーションに適しています。RGB LED は 2 つの動作モードをサポートしており、自動モード(トグルスイッチの異なる状態に応じて RGB LED の色を設定し、ライトのオン/オフを同期させる)と、ユーザー定義モード(ユーザーが現在のライトの色表示を手動で制御する)が用意されています。

入力読み取り

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#include <M5Unified.h>
#include "unit_byte.hpp"
uint32_t color_list[] = {0xff0000, 0x00ff00, 0x0000ff};
uint8_t color_index = 0;
time_t last_update_time = 0;
uint8_t switchId = 0x46;
UnitByte dev;
void setup()
{
M5.begin();
Serial.begin(115200);
M5.Display.setFont(&fonts::lgfxJapanMinchoP_20);
while (!dev.begin(&Wire, switchId, 2, 1, 400000)) {
M5.Display.drawString("Unit ByteSwitch init Fail!", 0, 0);
delay(1000);
}
dev.setLEDShowMode(BYTE_LED_USER_DEFINED);
for (uint8_t i = 0; i <= 8; i++) {
dev.setLEDBrightness(i, 250);
}
}
void loop()
{
// M5.Display.clear();
M5.Display.setCursor(0, 0);
for (uint8_t i = 0; i < 8; i++) {
uint8_t switchStatus8Bytes = dev.getSwitchStatus(i);
M5.Display.printf("CH[%d]: %d\r\n", i, switchStatus8Bytes);
}
if (millis() - last_update_time > 1000) {
color_index = (color_index + 1) % 3;
for (int i = 0; i <= 8; i++) {
dev.setRGB888(i, color_list[color_index]);
}
last_update_time = millis();
}
}

RGB LED 自動モード

各スイッチの状態に合わせた RGB LED の色を設定し、ライトのオン/オフを同期させます。

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
const uint32_t colors[] = {
0xFF0000, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF, 0xFFA500, 0x808080, 0x00FF00,
};
dev.setLEDShowMode(BYTE_LED_MODE_DEFAULT);
Serial.println("Set LED show sys define.");
delay(1000);
dev.setRGB233(8, colors[1]);
delay(1000);
dev.setFlashWriteBack();
delay(1000);
for (int i = 0; i < 8; i++) {
dev.setSwitchOffRGB888(i, colors[i]);
// 現在の色の 16 進数値を出力
Serial.printf("Set Switch Off RGB to %06X\n", (unsigned int)colors[i]);
}
delay(1000);
for (int i = 0; i < 8; i++) {
dev.setSwitchOnRGB888(i, colors[9 - i]);
// 現在の色の 16 進数値を出力
Serial.printf("Set Switch On RGB to %06X\n", (unsigned int)colors[i]);
}
delay(1000);
dev.setFlashWriteBack();

I2C アドレスの変更

Unit ByteSwitch は I2C アドレスの変更に対応しており、複数のデバイスを同時に接続する際に便利です。以下の API を参照し、I2C バスの初期化後にデバイスのアドレスを変更してください。

cpp
1 2
dev.begin(&Wire, 2, 1, 400000);
dev.setI2CAddress(new_addr);

3. コンパイルとアップロード

    1. ダウンロードモード:
      デバイスによってはプログラム書き込み前にダウンロードモードに入る必要があり、主制御装置によって手順が異なる場合があります。詳細は Arduino IDE クイックスタートガイド ページ下部のデバイスプログラムダウンロードチュートリアルを参照してください。
    • CoreS3 の場合、リセットボタンを約 2 秒間長押しし、内部の緑色 LED が点灯するまで待ってからボタンを離してください。これにより、デバイスはダウンロードモードに入り、プログラム書き込み待機状態となります。
    1. デバイスポートの選択:
      Arduino IDE の左上にあるコンパイル&アップロードボタンをクリックし、プログラムのコンパイルとデバイスへのアップロードが完了するまでお待ちください。

4. スイッチ状態と LED 制御

スイッチ状態をリアルタイムで表示し、RGB LED の色切替を制御します。

On This Page