Arduino入門

2. デバイス&サンプル

5. 拡張モジュール&サンプル

アクセサリー

6. アプリケーション

Chain Switch 使用チュートリアル

1. 準備作業

  • 環境設定: Arduino IDE 入門ガイドを参照して IDE のインストールを完了し、使用する開発ボードに応じたボードマネージャと必要なドライバライブラリをインストールしてください。
  • 使用するドライバライブラリ:

2. サンプルプログラム

コンパイル要件
M5Stack ボードマネージャ バージョン >= 3.2.4
M5Chain ライブラリ バージョン >= 1.0.8
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
#include "M5Chain.h"

#define RXD_PIN GPIO_NUM_5  // 47 for the other side of Chain DualKey
#define TXD_PIN GPIO_NUM_6  // 48 for the other side of Chain DualKey

Chain M5Chain;

device_list_t *device_list = NULL;
uint16_t device_count = 0;
uint8_t opr_status = 0;

uint8_t switch_id = 0;
bool switch_found = false;

const uint16_t OPEN_THRESHOLD = 3967;
const uint16_t CLOSE_THRESHOLD = 128;

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("===========================");
  Serial.println("M5Stack Chain Switch Test");

  M5Chain.begin(&Serial2, 115200, RXD_PIN, TXD_PIN);
  while (!M5Chain.isDeviceConnected()) {
    Serial.println("No device connected");
    delay(1000);
  }

  M5Chain.getDeviceNum(&device_count);
  device_list = (device_list_t *)malloc(sizeof(device_list_t));
  device_list->count = device_count;
  device_list->devices = (device_info_t *)malloc(sizeof(device_info_t) * device_count);
  M5Chain.getDeviceList(device_list);

  for (uint16_t i = 0; i < device_count; i++) {
    if (device_list->devices[i].device_type == CHAIN_SWITCH_TYPE_CODE) {
      switch_id = device_list->devices[i].id;
      switch_found = true;
      Serial.printf("ID[%d] is Chain Switch\n", switch_id);
      break;
    }
  }

  if (!switch_found) {
    Serial.println("Chain Switch not found");
    return;
  }

  // Set the onboard RGB LED brightness (0-100).
  M5Chain.setRGBLight(switch_id, 50, &opr_status);

  // Set open/close thresholds without saving them to flash.
  M5Chain.setSwitchThresholdValue(switch_id, OPEN_THRESHOLD, CLOSE_THRESHOLD,
                                  &opr_status, CHAIN_SAVE_FLASH_DISABLE);
  M5Chain.setSwitchDirection(switch_id, CHAIN_SWITCH_DOWNUP_INC, &opr_status,
                             CHAIN_SAVE_FLASH_DISABLE);
}

void loop() {
  if (!switch_found) {
    delay(1000);
    return;
  }

  uint16_t switch12Bit = 0;
  switch_status_type_t switch_status = CHAIN_SWITCH_OPEN;

  if (M5Chain.getSwitch12BitAdc(switch_id, &switch12Bit) == CHAIN_OK &&
      M5Chain.getSwitchStatus(switch_id, &switch_status) == CHAIN_OK) {
    uint8_t rgb[3];
    if (switch_status == CHAIN_SWITCH_CLOSE) {
      rgb[0] = 0;
      rgb[1] = 255;
      rgb[2] = 0;
    } else {
      rgb[0] = 255;
      rgb[1] = 0;
      rgb[2] = 0;
    }
    M5Chain.setRGBValue(switch_id, 0, 1, rgb, sizeof(rgb), &opr_status);

    Serial.printf("ADC: %u, status: %s\n", switch12Bit,
                  switch_status == CHAIN_SWITCH_CLOSE ? "ON" : "OFF");
  } else {
    Serial.println("Failed to read Chain Switch");
  }

  delay(200);
}

Chain Bridge コネクタを使用して、メインコントローラである Chain DualKey と Chain Switch を接続します。接続時は方向に注意し、三角形の矢印がメインコントローラ Chain DualKey から外側へ向くようにしてください(下図参照):

IO ピン設定
RXD_PIN = GPIO_NUM_5(GPIO5)
TXD_PIN = GPIO_NUM_6(GPIO6)

この例では、Chain DualKey の GPIO5 を RX、GPIO6 を TX として使用します。Chain Switch を Chain DualKey の反対側のインターフェースに接続する場合、または別のメインコントローラを使用する場合は、実際の配線に応じてプログラムの RXD_PIN と TXD_PIN を変更してください。

Chain Switch のスライダーは STM32G031G8U6 の PB0 (ADC_IN) に接続され、MCU 内蔵の 12 ビット ADC を使用します。出力範囲は 0 ~ 4095 です。プログラムの OPEN_THRESHOLD と CLOSE_THRESHOLD はそれぞれ開状態と閉状態のしきい値を表し、設定可能な値の範囲は 0 ~ 4095 です。この例では 3967 と 128 に設定し、CHAIN_SWITCH_DOWNUP_INC によってスライダーを下から上へ動かすと ADC 値が増加する方向に設定しています。

上記のプログラムをコンパイルしてデバイスに書き込み、Arduino IDE 右上のボタンをクリックしてシリアルモニタを開きます。Chain Switch の 12 ビット ADC 値とスイッチ状態をリアルタイムで確認できます。Chain Switch が ON のときは基板上の RGB LED が緑色に、OFF のときは赤色に点灯します:

<Chain Switch のシリアルモニタ出力(ADC 値とスイッチ状態)の画像>

サンプルの動作結果は次のとおりです:

3. 参考リンク

Page Tools
PDF
On This Page