Replies: 3 comments
-
完成動画を YouTube にアップしましたので、リンクを張り付けます。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
#75 に残っていますよー。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
はい、了解しました。
なくなったので、消しちゃったかと思いました。
いろいろと勉強になりました。
コレからもよろしくお願いします。
2023年12月10日(日) 21:22 MATSUOKA Takashi ***@***.***>:
… ここに残っていますよー。
(CloseしたのでDiscussionsの一覧にデフォルトで表示されなくなっただけです。Filter:
Closedを選べば一覧表示に出てきます。🙋♂️)
—
Reply to this email directly, view it on GitHub
<#77 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALIPXEOJYFF5HCHJ7Q6M3LDYIWSQJAVCNFSM6AAAAABAONJLQ6VHI2DSMVQWIX3LMV43SRDJONRXK43TNFXW4Q3PNVWWK3TUHM3TQMJRGI3DG>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
XIAOGAYNの基板を使って、4キーのピアノを作ってみたいと思って、挑戦しました。
この基板には、Aボタン、Bボタンの2個しかありません。
////////////////////////////////////////////////////////////////////////////
松岡さんに相談したところ、
Xiaogyanに、Xiaogyan.buttonC、Xiaogyan.buttonDを追加することができれば分かりやすいのですが、今のライブラリの作りではアプリケーション側で追加することはできません。
buttonCとbuttonDをアプリケーション側に追加して、それを利用するのが良いと思います。
と言う事で、Grove-I2C端子を使い、Cボタン、Dボタンを追加したいと思い、次のように配線しました。
その後、いろいろと試してみました。
// Cボタン、Dボタンで、ミ、ファを表す事が出来ました。
そして、[HardwareTest]のプログラム(Aボタン、Bボタンで「ド」「レ」「ミ」を初めて。)を参考に、次のようなプログラムを書いてみました。
’
/*
*/
// Includes
#include <Arduino.h>
#include <elapsedMillis.h>
#include "Xiaogyan.hpp"
const int buttonC = D5;
const int buttonD = D4;
// setup and loop
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println();
}
void loop()
{
// XIAOGYANライブラリを実行。
Xiaogyan.doWork();
/*
// Cボタン、Dボタンで ミ ファ を鳴らす。
if (digitalRead(buttonC)==LOW) Xiaogyan.speaker.setTone(330); // E4
*/
/*
// Aボタン、Bボタンで「ド」「レ」「ミ」を鳴らす。
static bool buttonA = false;
static bool buttonB = false;
bool preButtonA = buttonA;
bool preButtonB = buttonB;
buttonA = Xiaogyan.buttonA.read() == LOW;
buttonB = Xiaogyan.buttonB.read() == LOW;
if (preButtonA != buttonA || preButtonB != buttonB)
{
if ( buttonA && !buttonB) Xiaogyan.speaker.setTone(262); // C4
else if (!buttonA && buttonB) Xiaogyan.speaker.setTone(294); // D4
else if ( buttonA && buttonB) Xiaogyan.speaker.setTone(330); // E4
else Xiaogyan.speaker.setTone(0);
}
*/
}
’
上記のプログラムを動かしたところ、継続継続で、どのキーを押しても構いません。ところで、下記の if 、else if の一行ずつ順番にコメントアウトしてい
ます
`
{
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 ファ
`
最後から5行目、
// else if (!buttonA && !buttonB && buttonC && buttonD ) Xiaogyan.speaker.setTone(494); // B4 シ ( //を取ると鳴りっぱなしになる。)
を、コメントアウトしたら、音は鳴らなくなりましたが、どのボタンを押しても音が出なくなりました。
////////////////////////////////////////////////////////////////////////////
松岡さんから、下記の返事をもらいました。
間違っているのか分かりません。
対策方法をご案内します。
実機で動作して確認していませんが、、
ピン番号と読み出した値を記憶する変数名が同じなのが影響しているのかも?
...
const int buttonC = D5;
const int buttonD = D4;
...
static bool buttonC = false;
static bool buttonD = false;
...
buttonC = digitalRead(buttonC) == LOW;
buttonD = digitalRead(buttonD) == LOW;
...
///////////////////////////////////////////////////////////////////////////
そこで、次のように変更したら、作動するようになりました。
コメント、ありがとうございました。
ご指摘の通り、
...
buttonC = digitalRead(buttonC) == LOW;
buttonD = digitalRead(buttonD) == LOW;
...
これを、下記のように変更したら、出来るようになりました。
buttonC = digitalRead(D5) == LOW;
buttonD = digitalRead(D4) == LOW;
これで、XIAOGYAN 4キー電子ピアノの完成です。
////////////////////////////////////////////////////////////////////////////
* このディスカッションは、最後に完成の報告をしたのですが、
Q&Aの #75 のやり取りを、本日のARUGYANのイベント中に消去してしまったので、完成報告も無くなってしまったので、再度書きました。(笑い)
Beta Was this translation helpful? Give feedback.
All reactions