nakkyi が 2023年12月19日08時58分22秒 に編集
コメント無し
本文の変更
### <はじめに> ALGYAN8周年オリジナル基板(XIAOGYANO)で、電子ピアノ(キーボード)を作るのに挑戦しました。 この基板は、あらかじめいろいろな部品が載っている基板で、サンプルプログラムのテストを行えます。 今回は、XIAOGYANのサンプルコードの中の、HardwareTestというプログラムを使って、4ボタンのキーボードを作ってみました。 そして、8キーの電子ピアノ(キーボード)に挑戦しました。 ![キャプションを入力できます](https://camo.elchika.com/f17c3cb8f2b50538aa1539e0022377defe2bebb2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f39366566336166642d633835352d346366382d613863372d333561383133623736653936/) ### <もくじ> ①はじめに ②もくじ ③4ボタンのキーボード製作 ④4ボタンキーボードのプログラム ⑤電子(ピアノ)キーボード製作 ⑥終わりに ### <4ボタンのキーボード製作> 1-1 部品表 |部品名|型式|メーカー|数量| |---|---|---|---|
|マイコン|XIAO ESP35C3|Seeed Studio|1|
|マイコン|XIAO ESP32C3|Seeed Studio|1|
|XIAOGYANプレゼント基板|8周年オリジナルIoTデバイス「XIAOGYAN」|IoT ALGYAN |1| |ブレッドボード|8cm×5.5cm|自作加工|1| |ボタンスイッチ|1.1cm×1.1cm|不明|4| |5線平行ケーブル|10cm|不明|1| 1-2 回路図 ![キャプションを入力できます](https://camo.elchika.com/b33b90649b3ddd3bd2f71a9cf08b426af4014a1d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f36353032336163642d363664662d346139362d386463612d343133366164643834303865/) 1-3 作動表 ![キャプションを入力できます](https://camo.elchika.com/4629a70b6b42c7741814675eeed701a1a2317e4f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f34313135363233332d373834312d343466362d386362332d663964363639643932666636/) 1-4 XIAOGYANの配線 ![キャプションを入力できます](https://camo.elchika.com/76f216ea3cbb853682352159b90ca7755d0acfe9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f39313464373634392d366431302d343737322d393961372d633339633733303034313362/) 1-5 4ボタンキーボードの動画 [**4ボタンキーボードの動画**](https://youtu.be/jD7SCIO-KX0)はこちらです。 ### <4ボタンのキーボードのプログラム> ```arduino: /* * 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 ESP35C3|Seeed Studio|1|
|マイコン|XIAO ESP32C3|Seeed Studio|1|
|XIAOGYANプレゼント基板|8周年オリジナルIoTデバイス「XIAOGYAN」|IoT ALGYAN |1| |ユニバーサル基板|7cm×5cm|不明|2| |ユニバーサルプレート|16cm×6cm|タミヤ|1| |キースイッチ|2回路2接点|不明|8| |5線平行ケーブル|10cm|不明|1| 3-2 ピアノキーボードの配線図 ![キャプションを入力できます](https://camo.elchika.com/dcc90b79763a061789908ada028e1f939be7e703/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f62333466356663372d613730652d343463362d613263362d6132336663343963626131382f32306632656364632d356466302d343464342d386162382d616638386463643635333562/) 3-3 ピアノキーボードのプログラム 2回路2接点のキースイッチを使うことにより、4ボタンのキーボードと同じプログラムで作動しました。 3-4 電子ピアノキーボードの動画 [**電子ピアノ完成動画**](https://youtu.be/QnYSzs1aUh4)はこちらです。 ### <終わりに> 電子ピアノのキーボードに挑戦して、何とか出来上がりました。 IoT ALGYAN 8周年オリジナルIoTデバイス「XIAOGYAN」と、XIAOGYANのサンプルコードのHardwareTestを使って作りました。 ALGYAN 8周年イベントでは、色々なことを勉強できて感謝しています。小暮様、松岡様、長濱様、ありがとうございました。