nakkyiのアイコン画像
nakkyi 2023年12月17日作成 (2024年02月15日更新)
製作品 製作品 Lチカ Lチカ 閲覧数 577
nakkyi 2023年12月17日作成 (2024年02月15日更新) 製作品 製作品 Lチカ Lチカ 閲覧数 577

XIAOGYANで、電子キーボードを作ってみた。

XIAOGYANで、電子キーボードを作ってみた。

<はじめに>

ALGYAN8周年オリジナル基板(XIAOGYANO)で、電子ピアノ(キーボード)を作るのに挑戦しました。
この基板は、あらかじめいろいろな部品が載っている基板で、サンプルプログラムのテストを行えます。
今回は、XIAOGYANのサンプルコードの中の、HardwareTestというプログラムを使って、4ボタンのキーボードを作ってみました。
そして、8キーの電子ピアノ(キーボード)に挑戦しました。
キャプションを入力できます

<もくじ>

①はじめに
②もくじ
③4ボタンのキーボード製作
④4ボタンキーボードのプログラム
⑤電子(ピアノ)キーボード製作
⑥終わりに

<4ボタンのキーボード製作>

1-1 部品表

部品名 型式 メーカー 数量
マイコン XIAO ESP32C3 Seeed Studio
XIAOGYANプレゼント基板 8周年オリジナルIoTデバイス「XIAOGYAN」 IoT ALGYAN
ブレッドボード 8cm×5.5cm 自作加工
ボタンスイッチ 1.1cm×1.1cm 不明
5線平行ケーブル 10cm 不明

1-2 回路図
キャプションを入力できます

1-3 作動表
キャプションを入力できます

1-4 XIAOGYANの配線
キャプションを入力できます

1-5 4ボタンキーボードの動画

4ボタンキーボードの動画はこちらです。

<4ボタンのキーボードのプログラム>

/* * main.cpp * Copyright (C) 2023 MATSUOKA Takashi <matsujirushi@live.jp> * MIT License */ //////////////////////////////////////////////////////////////////////////////// // Includes #include <Arduino.h> #include <elapsedMillis.h> #include "Xiaogyan.hpp" //////////////////////////////////////////////////////////////////////////////// // Variables static int EncoderValue_ = 5; // buttonC_buttonD_setup GpioInputPin<D5> buttonC; GpioInputPin<D4> buttonD; buttonC.begin(INPUT_PULLUP); buttonD.begin(INPUT_PULLUP); //if (Xiaogyan.buttonA.read() == LOW) ...; //if (Xiaogyan.buttonB.read() == LOW) ...; //if (buttonC.read() == LOW) ...; //if (buttonD.read() == LOW) ...; //////////////////////////////////////////////////////////////////////////////// // setup and loop void setup() { Serial.begin(115200); delay(1000); Serial.println(); Serial.println(); //////////////////////////////////////// // Initialize // XIAOGYANライブラリを初期化。 Xiaogyan.begin(); // ロータリーエンコーダを回転したときに、EncoderValue_を増加/減少する。 // (EncoderValue_は0~19の範囲内。) Xiaogyan.encoder.setRotatedHandler([](bool cw){ const int value = EncoderValue_ + (cw ? -1 : 1); EncoderValue_ = constrain(value, 0, 19); Serial.println(EncoderValue_); }); //////////////////////////////////////// // Startup Sequence // 「ド」音を鳴らす。 Xiaogyan.speaker.setTone(262); // C4 // LEDマトリックスを全て赤色点灯。 Xiaogyan.ledMatrix.setBrightness(2); Xiaogyan.ledMatrix.fillScreen(1); delay(200); // 音を止める。 Xiaogyan.speaker.setTone(0); // LEDマトリックスを全て消灯。 Xiaogyan.ledMatrix.fillScreen(0); } void loop() { // XIAOGYANライブラリを実行。 Xiaogyan.doWork(); // LEDを点滅する。 // (200ミリ秒点灯、800ミリ秒消灯を繰り返す。) Xiaogyan.led.write(millis() % 1000 < 200 ? LOW : HIGH); // 4ボタンで「ドレミファソラシド」を鳴らす。 static bool buttonA = false; static bool buttonB = false; static bool buttonC = false; static bool buttonD = false; bool preButtonA = buttonA; bool preButtonB = buttonB; bool preButtonC = buttonC; bool preButtonD = buttonD; buttonA = Xiaogyan.buttonA.read() == LOW; buttonB = Xiaogyan.buttonB.read() == LOW; buttonC = digitalRead(D5)== LOW; buttonD = digitalRead(D4)== LOW; if (preButtonA != buttonA || preButtonB != buttonB || preButtonC != buttonC || preButtonD != buttonD) { if ( buttonA && !buttonB && !buttonC && !buttonD ) Xiaogyan.speaker.setTone(262); // C4 ド else if (!buttonA && buttonB && !buttonC && !buttonD ) Xiaogyan.speaker.setTone(294); // D4 ㇾ else if (!buttonA && !buttonB && buttonC && !buttonD ) Xiaogyan.speaker.setTone(330); // E4 ミ else if (!buttonA && !buttonB && !buttonC && buttonD ) Xiaogyan.speaker.setTone(349); // F4 ファ else if ( buttonA && buttonB && !buttonC && !buttonD ) Xiaogyan.speaker.setTone(392); // G4 ソ else if (!buttonA && buttonB && buttonC && !buttonD ) Xiaogyan.speaker.setTone(440); // A4 ラ else if (!buttonA && !buttonB && buttonC && buttonD ) Xiaogyan.speaker.setTone(494); // B4 シ else if ( buttonA && !buttonB && !buttonC && buttonD ) Xiaogyan.speaker.setTone(523); // C5 ド else Xiaogyan.speaker.setTone(0); } // LEDマトリックスを流れるように点灯。 static const int COLOR_MAP[] = { 1, 0, 2, 0, 3, 0, }; static int x = 0; static int y = 0; static int colorIndex = 0; static elapsedMillis ledMatrixElapsed{ 0 }; if (ledMatrixElapsed >= (EncoderValue_ + 1) * 10) { ledMatrixElapsed = 0; Xiaogyan.ledMatrix.drawPixel(x, y, COLOR_MAP[colorIndex]); if (++x >= Xiaogyan.ledMatrix.width()) { x = 0; if (++colorIndex >= std::extent<decltype(COLOR_MAP)>::value) { colorIndex = 0; if (++y >= Xiaogyan.ledMatrix.height()) { y = 0; } } } } } ////////////////////////////////////////////////////////////////////////////////

<電子ピアノキーボード製作>

3-1 部品表

部品名 型式 メーカー 数量
マイコン XIAO ESP32C3 Seeed Studio
XIAOGYANプレゼント基板 8周年オリジナルIoTデバイス「XIAOGYAN」 IoT ALGYAN
ユニバーサル基板 7cm×5cm 不明
ユニバーサルプレート 16cm×6cm タミヤ
キースイッチ 2回路2接点 不明
5線平行ケーブル 10cm 不明

3-2 ピアノキーボードの配線図
キャプションを入力できます

3-3 ピアノキーボードのプログラム
2回路2接点のキースイッチを使うことにより、4ボタンのキーボードと同じプログラムで作動しました。

3-4 電子ピアノキーボードの動画
電子ピアノ完成動画はこちらです。

<終わりに>

電子ピアノのキーボードに挑戦して、何とか出来上がりました。
IoT ALGYAN 8周年オリジナルIoTデバイス「XIAOGYAN」と、XIAOGYANのサンプルコードのHardwareTestを使って作りました。
ALGYAN 8周年イベントでは、色々なことを勉強できて感謝しています。小暮様、松岡様、長濱様、ありがとうございました。

ログインしてコメントを投稿する