M5Unified と M5GFX を基にした基本的な表示とスイッチ制御を追加し、電流値の読み取りとタッチによる電源制御を実現します。
#include <M5Unified.h>
#include "MODULE_4IN8OUT.h"
MODULE_4IN8OUT module;
void setup()
{
M5.begin();
i2c_port_t i2c_port = M5.In_I2C.getPort();
i2c_port_t scl_pin = M5.In_I2C.getSCL();
i2c_port_t sda_pin = M5.In_I2C.getSDA();
auto twowire = ((i2c_port == 1) ? &Wire1 : &Wire);
while (!module.begin(twowire, sda_pin, scl_pin, MODULE_4IN8OUT_ADDR)) {
Serial.println("4IN8OUT INIT ERROR");
M5.Lcd.println("4IN8OUT INIT ERROR");
delay(1000);
};
Serial.println("4IN8OUT INIT SUCCESS");
}
long interval = 0;
bool level = false;
void loop()
{
for (uint8_t i = 0; i < 4; i++) {
if (module.getInput(i) != 1) {
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_GREEN);
} else {
M5.Lcd.fillRect(60 + 60 * i, 0, 25, 25, TFT_RED);
}
M5.Lcd.drawString("IN" + String(i), 40 + 60 * i, 5);
}
M5.Lcd.drawString("4IN8OUT MODULE", 60, 80, 4);
if (millis() - interval > 1000) {
interval = millis();
level = !level;
for (uint8_t i = 0; i < 8; i++) {
module.setOutput(i, level);
if (level) {
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLACK);
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLUE);
} else {
M5.Lcd.fillRect(20 + 35 * i, 200, 25, 25, TFT_BLACK);
M5.Lcd.drawRect(20 + 35 * i, 200, 25, 25, TFT_BLUE);
}
M5.Lcd.drawString("OUT" + String(i), 18 + 35 * i, 180);
}
}
delay(500);
}
CoreS3 の場合、リセットボタンを 2 秒ほど長押しして、内部の緑色の LED が点灯したらボタンを離します。これでデバイスはダウンロードモードに入り、プログラム書き込みの準備が整います。