Japanino (Arduino)の調べ  将棋の調べ  鉄道の調べ  旅先料理の調べ  ビールコレクション

Japanino (Arduino) のプログラム JukeBox

JukeBox.sk

/*
  Juke Box
  2曲の歌をスイッチを入れる度に交互に演奏する
  操作法
  (1) スイッチを ON (左側に倒した位置)にすると演奏。
  (2) スイッチを OFF にすると演奏停止。
  (3) 次にスイッチを ON にすると、次の曲を演奏。
  
  Copyright (C) GOMI Hiroshi 2010 All right reserved.
 */
#include "pitches.h"

int tonePin = 14;  // トーンピン
int inputPin = 6;  // 入力ピン
int ledPin[] = {7, 8, 9, 10, 11, 12, 13};  // LEDピン
int ledp = 0;      // 現在の LEDピン
int oledp = 0;     // 直前の LEDピン
int no = 1;        // 現在の演奏曲ナンバー

// 音楽データ
/*
  tempounit 16分音符の長さ(ms)  
  tempoe 拍子(2/4 のときは 8, 3/4 のときは 12, 4/4 のときは 16)
  score[] 楽譜データ {音程、長さ}* 長さは16分音符を1とする
  length 楽譜サイズ

 例.
  int tempounit0 = 100;
  int temp0 = 16;  
  int score0[] = {
    NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, 
    NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, 
    NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, 
    NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4, NOTE_X4, 4
  };
  int length0 = sizeof(score0) / (2 * 4); 
*/

// 海
int tempounit1 = 100;
int tempo1 = 12;
int score1[] = {
  NOTE_B4, 4, NOTE_A4, 4, NOTE_G4, 4, NOTE_E4, 2, NOTE_A4, 2, NOTE_G4, 4, NOTE_E4, 4, 
  NOTE_D4, 2, NOTE_D4, 2, NOTE_G4, 4, NOTE_G4, 4, NOTE_A4, 8, 0, 4,
  NOTE_B4, 4, NOTE_B4, 4, NOTE_D5, 4, NOTE_B4, 2, NOTE_B4, 2, NOTE_A4, 4, NOTE_G4, 4,
  NOTE_E4, 2, NOTE_E4, 2, NOTE_D4, 4, NOTE_A4, 4, NOTE_G4, 8, 0, 4
};
int length1 = sizeof(score1) / (2 * 4);

// 夕やけこやけ
int tempounit2 = 100;
int tempo2 = 8;
int score2[] = {
  NOTE_G4, 2, NOTE_G4, 2, NOTE_G4, 2, NOTE_A4, 2, NOTE_G4, 2, NOTE_G4, 2, NOTE_G4, 2, NOTE_E4, 2, 
  NOTE_C4, 2, NOTE_C4, 2, NOTE_D4, 2, NOTE_E4, 2, NOTE_D4, 6, 0, 2,
  NOTE_E4, 4, NOTE_E4, 2, NOTE_G4, 2, NOTE_A4, 2, NOTE_C5, 2, NOTE_C5, 2, NOTE_A4, 2,
  NOTE_G4, 2, NOTE_G4, 2, NOTE_A4, 2, NOTE_G4, 2, NOTE_C5, 6, 0, 2,  
  NOTE_C5, 3, NOTE_D5, 1, NOTE_C5, 2, NOTE_A4, 2, NOTE_C5, 2, NOTE_C5, 2, NOTE_G4, 2, NOTE_G4, 2,
  NOTE_A4, 2, NOTE_G4, 2, NOTE_A4, 2, NOTE_G4, 2, NOTE_E4, 6, 0, 2,
  NOTE_G4, 2, NOTE_E4, 2, NOTE_D4, 2, NOTE_C4, 2, NOTE_D4, 2, NOTE_D4, 2, NOTE_G4, 2, NOTE_D4, 2,
  NOTE_E4, 2, NOTE_G4, 2, NOTE_A4, 2, NOTE_G4, 2, NOTE_C5, 6, 0, 2  
};
int length2 = sizeof(score2) / (2 * 4);

void setup() {
  for (int led = 0; led < 7; led++) {
    pinMode(ledPin[led], OUTPUT);
    digitalWrite(ledPin[led], LOW);  // set the LED off      
  }
  pinMode(inputPin, INPUT);
  digitalWrite(inputPin, HIGH);
}

void loop() {
  // 入力スイッチ(inputPin)が ON になるまで待つ
  for (;;) {
    if (digitalRead(inputPin) == LOW) break;
    delay(10);
  }
  // スイッチを入れると次の曲を演奏する
  if (no == 1) {
    play(tempounit1, tempo1, length1, score1);
    no = 2;
  } else {
    play(tempounit2, tempo2, length2, score2);
    no = 1;    
  }
  // LED を消灯して1秒待つ
  digitalWrite(ledPin[ledp], LOW);  // set the LED off      
  digitalWrite(ledPin[oledp], LOW);  // set the LED off      
  delay(1000);
  ledp = 0;
  oledp = 0;
}

/*
  演奏(ループ)
  入力(inputPin)が OFF になるまで無限ループで演奏する
  演奏中は小節ごとにLEDが順に点灯する
  @param tempounit 16分音符の長さ(ms)  
  @param tempobase 拍子(2/4 のときは 8, 3/4 のときは 12, 4/4 のときは 16)
  @param length 楽譜サイズ
  @param score[] 楽譜データ {音程、長さ}* 長さは16分音符を1とする
*/
void play(int tempounit, int tempobase, int length, int score[]) {
  for (;;) {
    int current = 0;
    for (int note = 0; note < length; note++) {
      int duration = tempounit * score[note * 2 + 1];
      current += score[note * 2 + 1];
      if (current >= tempobase) {
        digitalWrite(ledPin[ledp], HIGH);  // set the LED on
        current = 0;
        ledp++;
        if (ledp >= 7) ledp = 0;
      } else {
        digitalWrite(ledPin[oledp], LOW);  // set the LED off
        oledp = ledp;
      }
      tone(tonePin, score[note * 2], duration);
      int pause = duration * 1.30;
      delay(pause);
      if (digitalRead(inputPin) == HIGH) return;
    }
  }
}

pitches.h

更新記録


Japanino (Arduino)の調べ  将棋の調べ  鉄道の調べ  旅先料理の調べ  ビールコレクション

Copyright © 2010 GOMI Hiroshi All Rights Reserved