
Arduino入門



#include "M5Chain.h"
#define RXD_PIN GPIO_NUM_5 // Chain DualKey のもう一方の側では 47
#define TXD_PIN GPIO_NUM_6 // Chain DualKey のもう一方の側では 48
Chain M5Chain;
device_list_t *device_list = NULL;
uint16_t device_count = 0;
int16_t x_value, y_value;
uint8_t button_status;
chain_button_press_type_t button_press_type;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("===========================");
Serial.println("M5Stack Chain Joystick Test");
M5Chain.begin(&Serial2, 115200, RXD_PIN, TXD_PIN);
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);
if (device_list->devices[0].device_type == CHAIN_JOYSTICK_TYPE_CODE) {
Serial.println("ID[1] is Chain Joystick\n");
delay(1000);
} else {
Serial.println("ID[1] is NOT Chain Joystick\n");
return;
}
}
void loop() {
M5Chain.getJoystickMappedInt16Value(1, &x_value, &y_value); // デバイスID
Serial.print("x_value:");
Serial.println(x_value);
Serial.print("y_value:");
Serial.println(y_value);
M5Chain.getJoystickButtonStatus(1, &button_status); // デバイスID
Serial.print("button_status:");
Serial.println(button_status);
while (M5Chain.getJoystickButtonPressStatus(1, &button_press_type)) { // デバイスID
switch (button_press_type) {
case CHAIN_BUTTON_PRESS_SINGLE:
Serial.println("Single pressed");
break;
case CHAIN_BUTTON_PRESS_DOUBLE:
Serial.println("Double pressed");
break;
case CHAIN_BUTTON_PRESS_LONG:
Serial.println("Long pressed");
break;
}
}
}Chain Bridge コネクタを使用してメインコントローラ Chain DualKey と Chain Joystick を接続します。接続時は、三角の矢印がメインコントローラ Chain DualKey から外側を指すように注意してください。図を参照してください:
上記のプログラムをコンパイルしてデバイスに書き込み、Arduino IDE の右上にあるシリアルプロッター(Serial Plotter)を開きます。Chain Joystick のスティックを動かすと、X・Y の値がリアルタイムでグラフに表示されます:
プログラムの loop 部分の最初の 2 セクション(39–47 行)をコメントアウトして再度アップロードし、シリアルモニタを開きます。プログラムはジョイスティックの押下イベント(シングルクリック・ダブルクリック・長押し)を検出してメッセージを出力します: