前回はLチカで疎通できる事を確認しました
色々インターフェイスがついてるM5stackをつかって遊んでみます
実際のところ
M5stack(Arduino環境側)コード
ABCのボタンに対応して、画面の文字が変更され、かつその内容がシリアル経由で送信される内容になってます。
#include <M5Core2.h> void setup() { M5.begin(); Serial.begin(115200); M5.Lcd.setTextSize(2); M5.Lcd.setCursor(10, 10); M5.Lcd.println("Button Monitor"); M5.Lcd.println("Press A, B, or C"); } void loop() { M5.update(); // ボタンの状態を更新 // ボタンAが押されたとき if (M5.BtnA.wasPressed()) { Serial.println("A"); M5.Lcd.fillRect(10, 80, 300, 30, BLACK); M5.Lcd.setCursor(10, 80); M5.Lcd.print("Button A Pressed"); } // ボタンBが押されたとき if (M5.BtnB.wasPressed()) { Serial.println("B"); M5.Lcd.fillRect(10, 80, 300, 30, BLACK); M5.Lcd.setCursor(10, 80); M5.Lcd.print("Button B Pressed"); } // ボタンCが押されたとき if (M5.BtnC.wasPressed()) { Serial.println("C"); M5.Lcd.fillRect(10, 80, 300, 30, BLACK); M5.Lcd.setCursor(10, 80); M5.Lcd.print("Button C Pressed"); } delay(10); }
Octave側コード
先ほどのをうけて
pkg load arduino
% シリアルポートの設定(環境に応じて変更してください)
serialPort = "/dev/ttyUSB0"; % Linuxの場合
% serialPort = "COM3"; % Windowsの場合
% シリアルポートを開く
s = serial(serialPort, 115200);
srl_flush(s);
% グラフ用のデータ初期化
data = zeros(1, 100);
h = figure;
plot(data);
ylim([-0.5, 3.5]);
yticks([0 1 2 3]);
yticklabels({'None', 'A', 'B', 'C'});
grid on;
title('Button Press History');
try
while (1)
% シリアルポートからデータを読み取る
if (srl_data_available(s))
button = fgets(s);
button = strtrim(button); % 改行文字を削除
% ボタンに応じた処理
switch button
case "A"
val = 1;
disp("Button A pressed");
case "B"
val = 2;
disp("Button B pressed");
case "C"
val = 3;
disp("Button C pressed");
otherwise
val = 0;
end
% グラフの更新
data = [data(2:end), val];
figure(h);
plot(data);
ylim([-0.5, 3.5]);
yticks([0 1 2 3]);
yticklabels({'None', 'A', 'B', 'C'});
grid on;
title('Button Press History');
drawnow;
end
pause(0.01);
end
catch
% エラー時やCtrl+Cで終了時の処理
disp("Closing serial port...");
fclose(s);
delete(s);
close all;
end