ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

mathraxコミュのPICでマリオ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
エレキでマリオとかに対抗して(?)PICでマリオ。

PICに圧電スピーカーをつけてみました。
Highにしたら、カツ!、Lowにしたらカツ!っと音がするので、
音階と周波数を調べて計算してみて、単純に繰り返してみたら、ちゃんと音階が!

それで、1/8音符分(テンポ200にして、150ms)、ミ・ミ・ミ!ド・ミ・ソ!ってやったら、マリオスタート。

マリオのドレミも調べてみたら、コインは、なるだけ高い音でシミ〜だそうで(ピアノの情報)。PICでなるだけ高くしてみたら高すぎて聞こえなかったので、適当に調節。ボタンを押すとチャリーン!としてみました。

1アップも調べて出来たので、つぎは、エレキでマリオの連続コイン音に挑戦。

シミ〜が短くなればいいのかと思って、シとミを両方短くしてみたら、ちょっと違う。どうも、最初のシは8分音符のままで、ミ〜のほうが短くなるだけみたい。ということで、これを短めに。

おぉ〜チャチャチャリーン!って感じ。

このタイミングを調整したくて、ツマミをつけて、A/D変換して、チャリーン、チャリーン、チャチャチャリーン!みたく、ツマミを回しつつ演奏。

で、100回カウントして1アップ音を鳴らせるようにしてみました。

コメント(1)

picは16f88です。じゃなくても出来ると思うけど。
ソースは、CCSのCでこんな感じ。

===
//PICの設定を読み込む
#include <16F88.h>

#fuses INTRC_IO, NOLVP, NOWDT, PUT, NOPROTECT, NOBROWNOUT, NOMCLR, CCPB3

//内蔵クロックは、最大8MHzなので、最大に。
#use delay (clock=8000000)

/////prototype/////
int get_adc(int port);
void start_up();
void get_coin();
void mario_1up();


///// メイン /////
void main()
{
int mario;

//各ピンのインプット、アウトプットの設定
//0・・出力に。1・・入力に。
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports(0b00000010);
set_TRIS_A(0b11111111);

set_TRIS_B(0b00000000);

//最初に全部消してリセットします。しなくてもOK。
output_B(0b00000000);

//起動確認
start_up();
mario=0;

//メインループ
while (true){
if(!input(PIN_A0))
{
get_coin();
mario++;
if (mario>=100) { mario=0; mario_1up();}
}
else
if(!input(PIN_A2))
{
//mario_1up();
start_up();
}

}
}

///A/D変換処理///
int get_adc(int port)
{
int var;

set_adc_channel(port);
delay_us(50);
var=read_adc();
return var;
}

///スタート音///
void start_up()
{
long i;
for (i=0; i<49; i++){
output_B(0xFF);
delay_us(1519);

output_B(0x00);
delay_us(1519);
}
delay_ms(5);

for (i=0; i<49; i++){
output_B(0xFF);
delay_us(1519);

output_B(0x00);
delay_us(1519);
}
delay_ms(5);


delay_ms(150);

for (i=0; i<49; i++){
output_B(0xFF);
delay_us(1519);

output_B(0x00);
delay_us(1519);
}
delay_ms(150);


for (i=0; i<39; i++){
output_B(0xFF);
delay_us(1915);

output_B(0x00);
delay_us(1915);
}
delay_ms(5);

for (i=0; i<49; i++){
output_B(0xFF);
delay_us(1519);

output_B(0x00);
delay_us(1519);
}
delay_ms(150);

for (i=0; i<58; i++){
output_B(0xFF);
delay_us(1278);

output_B(0x00);
delay_us(1278);
}
delay_ms(300);
delay_ms(150);
for (i=0; i<29; i++){
output_B(0xFF);
delay_us(2564);

output_B(0x00);
delay_us(2564);
}
delay_ms(300);
delay_ms(150);
}

///コインゲット音///
void get_coin()
{
long i;
int port;

port=get_adc(1);
for (i=0; i<200; i++){
output_B(0xFF);
delay_us(253);

output_B(0x00);
delay_us(253);
}
for (i=0; i<port; i++){
output_B(0xFF);
delay_us(189);

output_B(0x00);
delay_us(189);
}
for (i=0; i<port; i++){
output_B(0xFF);
delay_us(189);

output_B(0x00);
delay_us(189);
}
delay_ms(10);
}

///1アップ音///
void mario_1up()
{
long i;
for (i=0; i<197; i++){
output_B(0xFF);
delay_us(379);

output_B(0x00);
delay_us(379);
}
for (i=0; i<235; i++){
output_B(0xFF);
delay_us(319);

output_B(0x00);
delay_us(319);
}
for (i=0; i<396; i++){
output_B(0xFF);
delay_us(189);

output_B(0x00);
delay_us(189);
}
for (i=0; i<315; i++){
output_B(0xFF);
delay_us(238);

output_B(0x00);
delay_us(238);
}

for (i=0; i<353; i++){
output_B(0xFF);
delay_us(212);

output_B(0x00);
delay_us(212);
}

for (i=0; i<471; i++){
output_B(0xFF);
delay_us(159);

output_B(0x00);
delay_us(159);
}
}

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

mathrax 更新情報

mathraxのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング