Japanino (Arduino)の調べ 将棋の調べ 鉄道の調べ 旅先料理の調べ ビールコレクション
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; } } }
更新記録
Japanino (Arduino)の調べ 将棋の調べ 鉄道の調べ 旅先料理の調べ ビールコレクション
Copyright © 2010 GOMI Hiroshi All Rights Reserved