M5Stack Core2 を使って電子ろーそくを作成しました。お話会で使います。
電源を入れると、オレンジになります。
真ん中のボタンを押すと、赤、青、黄、緑のどれかの色になります。
右のボタンを押すと、消えます。
左のボタンを押すとオレンジになります。
お話会の最後に色当てゲームをします。勝ち残りで最後に残った人に、消してもらっています。
プログラム
candle_feb07.ino
// ---------------------------------------------------------------
/*
candle_feb07.ino
Feb/07/2023
*/
// ---------------------------------------------------------------
#include <M5Core2.h>
#include <Adafruit_NeoPixel.h>
#include <AXP192.h>
#define PROGRAM "candle_feb07.ino"
#define VERSION "2023-2-07 PM 20:29"
#define PIN 25
#define NUMPIXELS 9 //LEDの数を指定
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int icount = 0;
String color_current;
AXP192 power;
String aStr_before = "";
// ---------------------------------------------------------------
void setup()
{
pixels.begin();
M5.begin();
M5.Lcd.setTextSize(3);
delay(1000);
Serial.println("*** setup *** start ***");
Serial.println(PROGRAM);
Serial.println(VERSION);
led_proc ("orange");
color_current = "orange";
}
// ---------------------------------------------------------------
void loop()
{
if ((icount % 500) == 0)
{
float batt = power.GetBatVoltage();
Serial.println
("*** " + String(icount) + "\t" + color_current + "\t" + String(batt));
}
pixels.clear();
String aStr = serial_receive_proc();
if (2 < aStr.length())
{
led_proc (aStr);
color_current = aStr;
}
// delay(100);
delay(10);
aStr = button_monitor();
if (2 < aStr.length())
{
led_proc (aStr);
color_current = aStr;
}
if (0 <= color_current.indexOf("orange"))
{
if ((icount % 10) == 0)
{
blink_proc(icount / 10);
}
}
icount++;
}
// --------------------------------------------------------------
void blink_proc(int ixx)
{
// Serial.println("*** blink_proc *** " + String(ixx));
int ikey = ixx % 8;
if (4 <= ikey)
{
ikey++;
}
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(255, 165, 0));
}
pixels.setPixelColor(ikey, pixels.Color(0xff, 0x9d, 0x30));
pixels.show();
}
// --------------------------------------------------------------
String define_color_proc()
{
String aStr = "";
int time = random(1000);
int ix = time % 4;
Serial.printf("time = %d\tix = %d\r\n",time,ix);
switch (ix)
{
case 1:
aStr = "blue";
break;
case 2:
aStr = "red";
break;
case 3:
aStr = "green";
break;
default:
aStr = "yellow";
break;
}
return aStr;
}
// --------------------------------------------------------------
String button_monitor()
{
String aStr = "";
M5.update();
if (M5.BtnA.wasReleased() || M5.BtnA.pressedFor(1000, 200)) {
M5.Lcd.print('A');
aStr = "orange";
} else if (M5.BtnB.wasReleased() || M5.BtnB.pressedFor(1000, 200)) {
M5.Lcd.print('B');
aStr = define_color_proc();
while (color_current == aStr)
{
// M5.Lcd.print("*** warning ***");
Serial.println("*** warning *** " + aStr);
delay(10);
aStr = define_color_proc();
}
} else if (M5.BtnC.wasReleased() || M5.BtnC.pressedFor(1000, 200)) {
M5.Lcd.print('C');
aStr = "off";
}
return aStr;
}
// --------------------------------------------------------------
led_proc.ino
// ---------------------------------------------------------------
/*
led_proc.ino
Jan/31/2023
*/
// ---------------------------------------------------------------
#include <M5Core2.h>
#include <Adafruit_NeoPixel.h>
// --------------------------------------------------------------
void led_proc (String aStr)
{
M5.Lcd.setCursor(0, 0);
for (int it=0; it<9; it++)
{
pixels.setPixelColor(it, pixels.Color(0, 0, 0));
}
if (0 <= aStr.indexOf("red"))
{
M5.Lcd.println("LED Red ");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(50, 0, 0));
}
delay(500);
M5.Lcd.fillScreen(RED);
}
else if (0 <= aStr.indexOf("blue"))
{
M5.Lcd.println("LED Blue ");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(0, 0,150));
}
delay(500);
M5.Lcd.fillScreen(BLUE);
}
else if (0 <= aStr.indexOf("green"))
{
M5.Lcd.println("LED Green");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(0, 150, 0));
}
delay(500);
M5.Lcd.fillScreen(GREEN);
}
else if (0 <= aStr.indexOf("yellow"))
{
M5.Lcd.println("LED Yellow");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(150,150,0));
}
delay(500);
M5.Lcd.fillScreen(YELLOW);
}
else if (0 <= aStr.indexOf("orange"))
{
M5.Lcd.println("LED Orange");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(255, 165, 0));
}
delay(500);
M5.Lcd.fillScreen(ORANGE);
}
else if (0 <= aStr.indexOf("off"))
{
M5.Lcd.println("LED Off");
M5.Lcd.printf("check: %s \n",aStr);
for (int it=0; it< 9; it++)
{
pixels.setPixelColor(it, pixels.Color(0, 0, 0));
}
delay(500);
M5.Lcd.fillScreen(BLACK);
}
pixels.show();
}
// ---------------------------------------------------------------
serial_receive.ino
// ---------------------------------------------------------------
/*
serial_receive.ino
Oct/31/2022
*/
// ---------------------------------------------------------------
#include <M5Core2.h>
// ---------------------------------------------------------------
String serial_receive_proc()
{
String aStr = "";
if (0 < Serial.available() )
{
// 終了文字まで取得
aStr = Serial.readStringUntil('\n');
Serial.print("Input:");
Serial.println(aStr);
M5.Lcd.setCursor(0, 150);
M5.Lcd.println("Input:");
M5.Lcd.setCursor(0, 200);
M5.Lcd.print(aStr);
M5.Lcd.println(" ");
}
return aStr;
}
// ---------------------------------------------------------------