Help us understand the problem. What is going on with this article?

Arduino キーボード入力から直接、音を出力したい(音楽を弾きたい)

初めに

以前投稿したばかりですが今度は別の不明点が・・・。
実はpythonとは別の授業でarduinoを触っています。現在、成果物として、パソコンのキーボードを入力するとピアノのように音楽が引けちゃうプログラムを作成中です。シリアル通信で対応したキーを入力するとドレミが出力するシステムが出来上がっているのですが、連続で鳴らしたいときにどうすれば良いのか分からずに困っています。

プログラムコード

以下がプログラムコードになります

// 12番ピンをスピーカーに接続する
const int pin = 12;
int melo =200;
// 10番,8番ピンをLEDに接続する
const int LED = 10;
const int LGD = 8;



// ここで初期化する
void setup()
{
  // スピーカーをつないだピンを出力に設定する
  pinMode(pin, OUTPUT);
  pinMode(LED, OUTPUT);
  // 9600bpsでシリアル通信を始めます
  Serial.begin(9600);
}

// ここからループに入る
void loop()
{
  // シリアル通信でパソコンから入力された文字を変数に保存する
  int sw = Serial.read();
  // もしaという文字が送られてきたら
  if (sw == 'a') {
    // ドを鳴らす
    tone(pin,262,melo);
    digitalWrite(LED,HIGH);
    delay(500);
    digitalWrite(LED,LOW);
  // もしsという文字が送られてきたら
  } else if (sw == 's') {
    // レを鳴らす
    tone(pin,294,melo);
    digitalWrite(LGD,HIGH);
    delay(500);
    digitalWrite(LGD,LOW);
  // dが送られたら
  } else if (sw == 'd') {
    //ミを鳴らす
    tone(pin,330,melo);
    digitalWrite(LED,HIGH);
    delay(500);
    digitalWrite(LED,LOW); 
  // もしfという文字が送られてきたら
  } else if (sw == 'f') {
    // ファを鳴らす
    tone(pin,349,melo);
    digitalWrite(LGD,HIGH);
    delay(500);
    digitalWrite(LGD,LOW);
  // gが送られたら
  } else if (sw == 'g') {
    //ソを鳴らす
    tone(pin,392,melo);
    digitalWrite(LED,HIGH);
    delay(500);
    digitalWrite(LED,LOW); 
  // もしhという文字が送られてきたら
  } else if (sw == 'h') {
    // ラを鳴らす
    tone(pin,440,melo);
    digitalWrite(LGD,HIGH);
    delay(500);
    digitalWrite(LGD,LOW);
  // jが送られたら
  } else if (sw == 'j') {
    //シを鳴らす
    tone(pin,494,melo);
    digitalWrite(LED,HIGH);
    delay(500);
    digitalWrite(LED,LOW); 
  }
}

このコードで実行したいこと

現在、シリアル通信を使っています。
パソコンのキーボードを入力し、対応したキーを押すとドレミファソラシドの内の一つを出力します。同時にキーを押すと同時に音だけでなくLEDが光るように設定されています。
しかし、シリアル通信だと、入力したキーを逐一送信してあげないと音が出力されません。そのため、ピアノのように連続した状態で鳴らすのが困難になっています。

最終的に達成したいこと

現在はシリアル通信でキーボードの入力を音と光で出力するように設計していますが、最終的にはシリアル通信を使わずにキーボード入力でそのままピアノのように音楽を演奏できるプログラムを設計したいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした