チーム122A
課題名
ランダム再生(仮)…でも今回は…リピート再生!
研究者名
2年15組10番 Yuri Kikuchi
2年15組19番 Katsura Mitsumiya
概要
設定した6曲をリピート再生する。
(ランダム再生にしたかった・・・。)
使用器具
・PSoC評価基板 CY3210 EVAL1
・Miniprog書き込み器
・27443デバイス
・USB巻き取り式延長ケーブル
・スピーカー
ソースプログラム
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include <stdlib.h>
#include <stdio.h>
#pragma interrupt_handler myISR
int PW=125; // Pulse Width
int SILENT=0, D=229, L=204, M=182, F=172, S=153, R=136, C=121, DD=115;//high
int LL=102,MM=91,FF=86,SS=75,RR=68,CC=64;
int TC=0; //Time Count
int n = 0;
void main()
{
M8C_EnableGInt;
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
while(1)
{ };
}
void myISR()
{
if(n==0)//カラス
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 0)
PWM16_1_WritePeriod(D);
else if(TC == 0)
PWM16_1_WritePeriod(L);
else if (TC == 37)
PWM16_1_WritePeriod(M);
else if(TC == 0)
PWM16_1_WritePeriod(F);
else if(TC == 29 | | TC == 35 | | TC == 39)
PWM16_1_WritePeriod(S);
else if (TC == 25 | | TC == 33 | | TC == 41)
PWM16_1_WritePeriod(R);
else if(TC == 0)
PWM16_1_WritePeriod(C);
else if(TC == 8 | | TC == 23| | TC == 27| | TC == 46)
PWM16_1_WritePeriod(DD);//ド
else if(TC == 6 | | TC == 12| | TC == 50)
PWM16_1_WritePeriod(LL);//レ
else if (TC == 1 | | TC == 21)
PWM16_1_WritePeriod(MM);//ミ
else if(TC == 0)
PWM16_1_WritePeriod(FF);//ファ
else if(TC == 0)
PWM16_1_WritePeriod(SS);//ソ
else if (TC ==0)
PWM16_1_WritePeriod(RR);//ラ
else if(TC == 0 | |TC == 0)
PWM16_1_WritePeriod(CC);//シ
else if( TC == 56)
PWM16_1_WritePeriod(SILENT);
if(TC==58){
n++;
TC=0;
}
}
if(n==1)//キラキラ
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1| | TC == 6 | | TC == 72)
PWM16_1_WritePeriod(D);
else if(TC == 62| | TC == 67)
PWM16_1_WritePeriod(L);
else if (TC == 52| | TC == 57)
PWM16_1_WritePeriod(M);
else if(TC == 41| |TC == 46)
PWM16_1_WritePeriod(F);
else if(TC == 11 | |TC == 17 | | TC == 32)
PWM16_1_WritePeriod(S);
else if (TC == 22 | | TC == 27)
PWM16_1_WritePeriod(R);
else if(TC == 0)
PWM16_1_WritePeriod(C);
else if(TC == 0)
PWM16_1_WritePeriod(DD);//ド
else if( TC == 80)
PWM16_1_WritePeriod(SILENT);
if(TC==83){
n++;
TC=0;
}
}
if(n==2)//おおきなくりのきのしたで
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1 | | TC == 6 | |TC == 42)
PWM16_1_WritePeriod(D);
else if(TC == 8)
PWM16_1_WritePeriod(L);
else if (TC == 12 | |TC == 16 | | TC == 26| |TC == 30| | TC == 51| | TC == 56 | | TC == 60)
PWM16_1_WritePeriod(M);
else if(TC == 41)
PWM16_1_WritePeriod(F);
else if(TC == 20 | | TC == 64 | | TC == 106| | TC == 122)
PWM16_1_WritePeriod(S);
else if (TC == 22| | TC == 34 | | TC == 38| | TC == 76 | | TC ==112| | TC == 116 | | TC ==118 | | TC == 122)
PWM16_1_WritePeriod(R);
else if(TC == 100)
PWM16_1_WritePeriod(C);
else if(TC == 70| | TC == 82 | | TC ==88| | TC == 94)
PWM16_1_WritePeriod(DD);//ド
else if(TC == 5 | | TC == 11 | | TC == 15 | | TC == 19 | | TC == 25 | | TC == 29| | TC == 33| | TC == 37)
PWM16_1_WritePeriod(SILENT);
else if(TC == 41 | | TC == 47 | | TC == 55| |TC == 59| |TC == 63 | | TC == 69| | TC == 75 | | TC == 81)
PWM16_1_WritePeriod(SILENT);
else if(TC == 87 | | TC == 93 | |TC == 99 | | TC == 105| |TC == 111| | TC == 115 | | TC == 117 | | TC == 121 | | TC == 127)
PWM16_1_WritePeriod(SILENT);
if(TC==133){
n++;
TC=0;
}
}
if(n==3)//むすんでひらいて
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 11 | | TC == 16 | | TC == 38| | TC == 74| |TC == 84)
PWM16_1_WritePeriod(D);
else if(TC == 8 | | TC == 21| | TC == 26| | TC == 34| | TC == 72| | TC == 78)
PWM16_1_WritePeriod(L);
else if (TC == 1 | | TC == 6 | | TC == 32 | | TC == 56 | | TC == 62 | | TC == 80)
PWM16_1_WritePeriod(M);
else if(TC == 52)
PWM16_1_WritePeriod(F);
else if(TC == 44 | | TC == 50)
PWM16_1_WritePeriod(S);
else if (TC == 0)
PWM16_1_WritePeriod(R);
else if(TC == 0)
PWM16_1_WritePeriod(C);
else if(TC == 0)
PWM16_1_WritePeriod(DD);//ド
else if(TC == 5 | | TC == 10 | | TC == 15 | | TC == 20| | TC == 25 | | TC == 31 | | TC == 37 | | TC == 43)
PWM16_1_WritePeriod(SILENT);
else if(TC == 49 | | TC == 55 | |TC == 61| | TC == 67 | | TC == 71 | | TC == 77 | | TC == 83| | TC == 89)
PWM16_1_WritePeriod(SILENT);
if(TC==93){
n++;
TC=0;
}
}
if(n==4)//カエルのうた
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
PWM16_1_WritePeriod(D);
else if(TC == 3)
PWM16_1_WritePeriod(L);
else if (TC == 5)
PWM16_1_WritePeriod(M);
else if(TC == 7)
PWM16_1_WritePeriod(F);
else if(TC == 9)
PWM16_1_WritePeriod(M);
else if (TC ==11)
PWM16_1_WritePeriod(L);
else if(TC == 13)
PWM16_1_WritePeriod(D);
else if(TC == 15)
PWM16_1_WritePeriod(SILENT);
else if(TC == 17)
PWM16_1_WritePeriod(M);
else if(TC == 19)
PWM16_1_WritePeriod(F);
else if(TC == 21)
PWM16_1_WritePeriod(S);
else if(TC == 23)
PWM16_1_WritePeriod(R);
else if(TC == 25)
PWM16_1_WritePeriod(S);
else if(TC == 27)
PWM16_1_WritePeriod(F);
else if(TC == 29)
PWM16_1_WritePeriod(M);
else if(TC == 31)
PWM16_1_WritePeriod(SILENT); if(TC==58){
n++;
TC=0;
}
}
if(n==5)//チューリップの歌
{
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1| |TC==13| |TC==34) PWM16_1_WritePeriod(D); else if(TC == 4| |TC==16| |TC==37| |TC==43) PWM16_1_WritePeriod(L); else if(TC == 7| |TC==19| |TC==28| |TC==40) PWM16_1_WritePeriod(M); else if(TC == 10| |TC==22| |TC==46) PWM16_1_WritePeriod(SILENT); else if(TC ==25) PWM16_1_WritePeriod(S); else if(TC == 31) PWM16_1_WritePeriod(L);
if(TC==45){
n=0;
TC=0;//最初の曲に戻る
}
}
}
ソースプログラム<random>
int random(0,5);
int random(int x ,int y)
{
int n;
while(1){
n=random();
if(x<=n&&n<=y)
break;
}
return n;
}
考察
今回は時間的にランダム再生まで行くことができなかった。
ランダムのエラーについては
①timerを用いてランダム再生をさせるつもりであった。
②ランダムに選出された曲は流すことができた。
③しかしリセットしても同じランダムの(ひとつ前のランダムを取ってしまった)ために、
新しく選出され曲が流れる仕様にはできなかった。
この点を改善することができれはランダム再生が可能であると考えられる。
- 最終更新:2014-11-18 11:11:47