2015年2月1日日曜日

妖怪ウオッチ零式 プログラム編 プログラムソース

Copyright (C) 2015 All rights reserved. 本ページに掲載したプログラムは、 作成者の著作に帰すべき部分についてはpublic domainに準じます。 作成者は運用結果にいかなる責任も負いません。

/* Name: main.c
 *
 * CPU AVR2313 8MHz
 * 
 * 妖怪ウオッチ零式 (改) Ver1.0
 *  PIN 2;   PD0 RXD デバッグ用未使用
 *  PIN 3:   PD1 TXD デバッグ用未使用
 *
 *  PIN 12:O PB0 sw s3 制御用 ポート出力
 *  PIN 13:O PB1 sw s4 制御用 ポート出力
 *  PIN 14:O PB2 sw s5 制御用 ポート出力
 *  PIN 15:O PB3 sw s6 制御用 ポート出力
 *  PIN 16:O PB4 NC
 *  PIN 17:O PB5 NC 
 *  PIN 18:O PB6 NC
 *  PIN 19:O PB7 NC
 * 
 *  PIN 7 :I PD3 int SW1 族を変更して音声発生 (CHANGE SW)
 *  PIN 6 :I PD2 int SW0 つぎの音声を発生     (NEXT SW)
 *

 * FUSES      = -U hfuse:w:0x9d:m -U lfuse:w:0xe4:m
 *          8分周選択なし,クロック出力許可しない  1.8Vリセット   
 *
 *Copyright (C) 2015, pimona, all right reserved.   
 *
 *仕様
 * 
 *  割り込みINT0を妖怪召還SWとする (NEXT SW)
 *  割り込みINT1を種族きりかえSWとする(CHANGE SW)
 *  割り込みSWによる、起動をおこない。アイドル処理は処理をおえたらパワーダウン
 * モードのスリープに入る。
 *  妖怪の呼び出しは種族単位で管理する。
 * 
 *履歴 2015.02.27 Ver. 1.0 リリース
 */

#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <avr/pgmspace.h> 
#include <avr/sleep.h>

/* function プロトタイプ宣言 */
void output_medal_sw(int index);// メダルSW 出力関数
void change_zoku();//族を変更
void eject_medal_sw();//メダルSW イジェクト出力関数

//ビット操作マクロ
#define cbi(addr,bit) addr &= ~(1<<bit)
#define sbi(addr,bit) addr |= (1<<bit)
//メダル挿入 状態
#define EJECT 0x01 //イジェクト
#define INSERT 0x02//挿入
//メダルSW 状態
#define CHANGE_SW 0x08 //族切り替えSW オン
#define NEXT_SW 0x04   //NEXT音声SW オン


//妖怪ウオッチ制御変数
unsigned char medal_soket=0;//
volatile unsigned char sw_stat = 0;//割り込みSW押下状態(族切り替えSW,NEXT SW
unsigned char pat_index=0;//パターンテーブル現在位置
unsigned char pat_attr=0;//現在 族 属性
unsigned char key_index=0;//IRで受信した3桁メダル番号を格納
unsigned char key_code[3]={0,0,0};//IRで受信した数字
unsigned char pat_buff[4]={0,0,0,0b1010};//メダルSW出力メダルパターン格納バッファ

#define MEDAL_PULSE_WIDTH 60 //メダルINS        SW値、出力間隔(ms
#define MEDAL_EJECT_PULSE_WIDTH 60//メダルEJECI SW値、出力間隔(ms
#define EJECT_VOICE_WAIT    2000 //EJECT 音声終了 待ち時間(ms

#define ZOK_MAX 11 //種族の種類
#define ZOK1_MAX 15 //イサマシ族の数
#define ZOK2_MAX 19 //フシギ族の数
#define ZOK3_MAX 13 //ゴーケツ族の数
#define ZOK4_MAX 30 //プリチー族の数
#define ZOK5_MAX 18 //ポカポカ族の数
#define ZOK6_MAX 15 //ウスラカゲ族の数
#define ZOK7_MAX 16 //ブキミー族の数
#define ZOK8_MAX 18 //ニョロロン族の数
#define ZOK9_MAX 15 //カイマ族の数
#define ZOK10_MAX 4//レジェンド族の数
#define ZOK11_MAX 10 //その他族の数

#define ZOK1_TOP 0 //イサマシ族先頭
#define ZOK2_TOP (ZOK1_TOP+ZOK1_MAX) //フシギ族の先頭
#define ZOK3_TOP (ZOK2_TOP+ZOK2_MAX) //ゴーケツ族の先頭
#define ZOK4_TOP (ZOK3_TOP+ZOK3_MAX) //プリチー族の先頭
#define ZOK5_TOP (ZOK4_TOP+ZOK4_MAX) //ポカポカ族の先頭
#define ZOK6_TOP (ZOK5_TOP+ZOK5_MAX) //ウスラカゲ族の先頭
#define ZOK7_TOP (ZOK6_TOP+ZOK6_MAX) //ブキミー族の先頭
#define ZOK8_TOP (ZOK7_TOP+ZOK7_MAX) //ニョロロン族の先頭
#define ZOK9_TOP (ZOK8_TOP+ZOK8_MAX) //カイマ族の先頭
#define ZOK10_TOP (ZOK9_TOP+ZOK9_MAX) //レジェンド族の先頭
#define ZOK11_TOP (ZOK10_TOP+ZOK10_MAX) //その他族の先頭

struct CTL_TBL{ //族情報インデックス管理テーブル
    unsigned char top_offs;//族情報先頭オフセット
    unsigned char end_offs;//族情報最終オフセット
}ctl_tbl[ZOK_MAX]={
    {ZOK1_TOP,ZOK1_MAX-1},                  //イサマシ族
    {ZOK2_TOP,(ZOK2_TOP+ZOK2_MAX)-1},//フシギ族
    {ZOK3_TOP,(ZOK3_TOP+ZOK3_MAX)-1},//ゴーケツ族
    {ZOK4_TOP,(ZOK4_TOP+ZOK4_MAX)-1},//プリチー族
    {ZOK5_TOP,(ZOK5_TOP+ZOK5_MAX)-1},//ポカポカ族
    {ZOK6_TOP,(ZOK6_TOP+ZOK6_MAX)-1},//ウスラカゲ族
    {ZOK7_TOP,(ZOK7_TOP+ZOK7_MAX)-1},//ブキミー族
    {ZOK8_TOP,(ZOK8_TOP+ZOK8_MAX)-1},//ニョロロン族
    {ZOK9_TOP,(ZOK9_TOP+ZOK9_MAX)-1},//カイマ族
    {ZOK10_TOP,(ZOK10_TOP+ZOK10_MAX)-1},//レジェンド族
    {ZOK11_TOP,(ZOK11_TOP+ZOK11_MAX)-1}//その他族
};


PROGMEM const uint8_t pat_array[][3]  ={//メダルSW出力パターン登録テーブル(フラッシュメモリに置く)
  
    //1イサマシ族======================================
    {0b1100,0b0010,0b0001},//:イサマシ,S,鬼食い
    {0b1100,0b0101,0b0110},//:イサマシ,S,いのちとり
    {0b1100,0b0001,0b1111},//:イサマシ,A,焼きおに斬り
    {0b1100,0b0001,0b1110},//:イサマシ,A,万尾獅子
    {0b1100,0b0001,0b1101},//:イサマシ,B,フユニャン
    {0b1101,0b1011,0b0001},//:イサマシ,B,フユニャン
    {0b1110,0b0101,0b0111},//:イサマシ,C,メラメライオン
    {0b0111,0b0101,0b0010},//:イサマシ,C,ブリー隊長
    {0b1100,0b0001,0b1000},//:イサマシ,C,泥田坊
    {0b1100,0b0001,0b1001},//:イサマシ,C,ブリー隊長
    {0b1100,0b0001,0b0111},//:イサマシ,D,あかなめ
    {0b1100,0b0001,0b0010},//:イサマシ,E,獅子まる
    {0b1100,0b0001,0b0011},//:イサマシ,E,かたづ家来
    {0b1100,0b0001,0b1011},//:イサマシ,E,アライ魔将
    {0b1100,0b0001,0b0100},//:イサマシ,E,おこ武者

    //2フシギ族======================================
    {0b1100,0b0011,0b0010},//:フシギ,S,ぬえ
    {0b1100,0b0101,0b1000},//:フシギ,S,風魔猿
    {0b1110,0b0101,0b0110},//:フシギ,S,キュウビ
    {0b0110,0b0101,0b1000},//:フシギ,S,天狗
    {0b0011,0b0101,0b1111},//:フシギ,?,ミスタームービン,Zメダル
    {0b1100,0b0010,0b1101},//:フシギ,A,えんらえんら
    {0b1100,0b0010,0b1111},//:フシギ,A,あやまり倒し
    {0b1100,0b0010,0b1110},//:フシギ,A,おでんじん
    {0b1100,0b0011,0b0001},//:フシギ,A,うんがい三面鏡
    {0b1110,0b0101,0b1111},//:フシギ,B,セバスチャン
    {0b1100,0b0010,0b1011},//:フシギ,B,メゾンド・ワスレ
    {0b0011,0b0101,0b1100},//:フシギ,C,アペリカン
    {0b1100,0b0010,0b1001},//:フシギ,C,USO
    {0b1110,0b0101,0b1100},//:フシギ,C,ドクロ婆
    {0b1100,0b0010,0b0111},//:フシギ,D,のっぺら坊
    {0b1100,0b0010,0b1000},//:フシギ,D,一旦ゴメン
    {0b1100,0b0010,0b0100},//:フシギ,D,こえんら
    {0b1100,0b0010,0b0110},//:フシギ,E,化け草履
    {0b1100,0b0010,0b0011},//:フシギ,E,さかさっ傘

    //3ゴーケツ族======================================
    {0b1100,0b0101,0b0100},//:ゴーケツ,S,大やもり
    {0b1100,0b0100,0b0011},//:ゴーケツ,S,大ガマ
    {0b1110,0b0101,0b0001},//:ゴーケツ,A,ロボニャン
    {0b1100,0b0011,0b1111},//:ゴーケツ,A,ヒライ神
    {0b1100,0b0100,0b0001},//:ゴーケツ,A,ガマンモス
    {0b1100,0b0011,0b1101},//:ゴーケツ,B,だっせんしゃ
    {0b1100,0b0011,0b1110},//:ゴーケツ,B,プライ丼
    {0b1100,0b0011,0b1011},//:ゴーケツ,C,あせっか鬼
    {0b1100,0b0011,0b1000},//:ゴーケツ,D,雷蔵
    {0b1100,0b0011,0b1001},//:ゴーケツ,D,モノマネキン
    {0b1100,0b0011,0b0100},//:ゴーケツ,E,ドキ土器
    {0b1100,0b0011,0b0110},//:ゴーケツ,E,うらや飯
    {0b1100,0b0011,0b0111},//:ゴーケツ,E,迷い車
    
    //4プリチー族======================================
    {0b1100,0b0100,0b1111},//:S,プリチー,マスターニャーダ
    {0b1100,0b0101,0b0010},//:S,プリチー,水虎
    {0b0111,0b0101,0b1000},//:プリチー,アカマル
    {0b0110,0b0101,0b1011},//プリチー,ジバニャン
    {0b0110,0b0101,0b1101},//:プリチー,ジバニャン
    {0b0001,0b0101,0b0100},//:A,プリチー,スイカニャン
    {0b1111,0b0101,0b1110},//:A,プリチー,ロボコマ
    {0b1000,0b0101,0b1011},//:A,プリチー,ロボガッパ
    {0b1100,0b0100,0b1110},//:A,プリチー,河童
    {0b1100,0b0100,0b1101},//:B,プリチー,おバク様
    {0b0110,0b0101,0b1111},//:B,プリチー,トゲニャン
    {0b0001,0b0101,0b0110},//:B,プリチー,メロンニャン
    {0b1111,0b0101,0b0001},//:B,プリチー,ブドウニャン
    {0b1111,0b0101,0b0011},//:B,プリチー,ミカンニャン
    {0b1100,0b1001,0b1011},//:B,プリチー,ケマモン
    {0b0111,0b0101,0b0001},//:C,プリチー,ブチニャン
    {0b1100,0b0100,0b1001},//:C,プリチー,雨女
    {0b1100,0b0100,0b1011},//:C,プリチー,ばくそく
    {0b0110,0b0101,0b0011},//:D,プリチー,コマじろう
    {0b0110,0b0101,0b0001},//:D,プリチー,コマさん
    {0b0110,0b0101,0b1001},//:D,プリチー,コマさん
    
    {0b0111,0b0101,0b1110},//:D,プリチー,ノガッパ
    {0b1100,0b0100,0b0110},//:D,プリチー,一つ目小僧
    {0b1100,0b0100,0b0111},//:E,プリチー,びきゃく
    {0b1100,0b0100,0b1000},//:D,プリチー,つらがわり
    {0b1101,0b1001,0b1110},//:プリチー,ジバニャン??
    {0b1101,0b1001,0b1111},//:プリチー,ジバニャン??
    {0b1100,0b0101,0b1101},//:D,プリチー,コマじろう
    {0b1100,0b0101,0b1110},//:D,プリチー,コマさん
    {0b1110,0b0101,0b1101},//:D,プリチー,コマさん
    
    //5ポカポカ族======================================
    {0b0011,0b0101,0b1110},//:S,ポカポカ,イッカク
    {0b1100,0b0111,0b0011},//:S,ポカポカ,大くだん
    {0b1100,0b0111,0b0100},//:S,ポカポカ,麒麟
    {0b1100,0b0110,0b1111},//:A,ポカポカ,から傘魔神
    {0b1100,0b0111,0b0001},//:A,ポカポカ,ざしきわら神
    {0b1100,0b0111,0b0010},//:A,ポカポカ,お金ナイダー
    {0b1111,0b0101,0b1001},//:A,ポカポカ,ロボG
    {0b1100,0b0110,0b1101},//:B,ポカポカ,キズナース
    {0b1100,0b0110,0b1110},//:B,ポカポカ,大山砂夫
    {0b1100,0b0110,0b0100},//:C,ポカポカ,くだん
    {0b1100,0b0110,0b1001},//:C,ポカポカ,晴れ男
    {0b1100,0b0110,0b1011},//:C,ポカポカ,ワカメスター
    {0b1110,0b0101,0b0100},//:C,ポカポカ,ホノボーノ
    {0b1100,0b0110,0b0111},//:D,ポカポカ,ざしきわらし
    {0b1100,0b0110,0b0001},//:E,ポカポカ,キズナメコ
    {0b1100,0b0110,0b0010},//:E,ポカポカ,から傘お化け
    {0b1100,0b0110,0b0011},//:E,ポカポカ,砂夫
    {0b1110,0b0101,0b1001},//:E,ポカポカ,ひも爺
    
    //6ウスラカゲ族======================================
    {0b1100,0b0101,0b0001},//:S,ウスラカゲ,きらめ鬼
    {0b1100,0b0100,0b0010},//:A,ウスラカゲ,百々目鬼
    {0b1100,0b0111,0b0110},//:E,ウスラカゲ,TETSUYA
    {0b1100,0b0111,0b1000},//:D,スラカゲ,かりパックン
    {0b1100,0b0111,0b1001},//:B,ウスラカゲ,草くいおとこ
    {0b1100,0b0111,0b1111},//:B,ウスラカゲ,ミツマタノヅチ
    {0b1100,0b1000,0b0001},//:B,ウスラカゲ,リー夫人
    {0b1100,0b1000,0b0010},//:B,ウスラカゲ,ガブニャン
    {0b1100,0b1000,0b0011},//:B,ウスラカゲ,KANTETSU
    {0b1100,0b1000,0b0100},//:B,ウスラカゲ,肉くいおとこ
    {0b1100,0b1000,0b0111},//:B,ウスラカゲ,どんどろ
    {0b1100,0b0111,0b1011},//:C,ウスラカゲ,まてんし
    {0b1100,0b0111,0b1101},//:C,ウスラカゲ,ひとまか仙人
    {0b1100,0b0111,0b1110},//:C,ウスラカゲ,りもこんかくし
    {0b0110,0b0101,0b1110},//:D,ウスラカゲ,ヒキコウモリ
    
    
    //7ブキミー族======================================
    {0b1100,0b1001,0b1000},//:S,ブキミー,土蜘蛛
    {0b0011,0b0101,0b1101},//:S,ブキミー,女郎蜘蛛
    {0b0110,0b0101,0b1100},//:A,ブキミー,ダークニャン
    {0b1100,0b1001,0b0110},//:A,ブキミー,ふさふさん
    {0b1100,0b1001,0b0111},//:A,ブキミー,呪野花子
    {0b1000,0b0101,0b1101},//:B,ブキミー,ロボメン犬
    {0b1100,0b1001,0b0010},//:B,ブキミー,ぶんぶん鳥
    {0b1100,0b1001,0b0011},//:B,ブキミー,のぼせトンマン
    {0b1100,0b1001,0b0100},//:B,ブキミー,爆音ならし
    {0b1100,0b1000,0b1110},//:C,ブキミー,じがじぃさん
    {0b1100,0b1000,0b1111},//:C,ブキミー,花子さん
    {0b1100,0b1001,0b0001},//:C,ブキミー,のらりくらり
    {0b1100,0b1000,0b1101},//:D,ブキミー,MEN
    {0b1110,0b0101,0b0010},//:D,ブキミー,ドンヨリーヌ
    {0b1100,0b1000,0b1001},//:E,ブキミー,けうけげん
    {0b1100,0b1000,0b1011},//:E,ブキミー,おともらし
    
    //8ニョロロン族======================================
    {0b1110,0b0101,0b1000},//:S,ニョロロン,オロチ
    {0b0011,0b0101,0b1011},//:S,ニョロロン,イザナミ
    {0b1100,0b1011,0b1101},//:S,ニョロロン,八百比丘尼
    {0b0011,0b0101,0b1001},//:?,ニョロロン,スティーブ・ジョーズ,Zメダル
    {0b1100,0b1011,0b0111},//:A,ニョロロン,激ドラゴン
    {0b1100,0b1011,0b1000},//:A,ニョロロン,おもいだ神
    {0b1100,0b1011,0b1001},//:A,ニョロロン,こんがらギャル
    {0b0001,0b0101,0b0011},//:B,ニョロロン,ロボりゅーくん
    {0b1000,0b0101,0b1110},//:B,ニョロロン,ロボノコ
    {0b1100,0b1011,0b0110},//:B,ニョロロン,ホリュウ
    {0b1100,0b1011,0b0001},//:B,ニョロロン,つられたろう丸
    {0b1100,0b1011,0b0100},//:C,ニョロロン,ろくろ首
    {0b1100,0b1001,0b1111},//:D,ニョロロン,おもいだスッポン
    {0b1100,0b1011,0b0010},//:D,ニョロロン,ムカムカデ
    {0b1100,0b1011,0b0011},//:D,ニョロロン,にんぎょ
    {0b1100,0b1001,0b1101},//:E,ニョロロン,ねちがえる
    {0b1100,0b1001,0b1110},//:E,ニョロロン,からみぞん
    {0b1110,0b0101,0b0011},//:E,ニョロロン,ツチノコ
    
    //9カイマ族======================================
    {0b0111,0b0101,0b1111},//:カイマ,ヤッカイ
    {0b0111,0b0101,0b1100},//:カイマ,フカイ
    {0b0111,0b0101,0b0011},//:カイマ,ナンカイ
    {0b0111,0b0101,0b1001},//:カイマ,ゴウカイ
    {0b0111,0b0101,0b0110},//:カイマ,ハカイ
    {0b0111,0b0101,0b1011},//:カイマ,ドロタボウ・怪
    {0b1111,0b0101,0b1101},//:カイマ,えんらえんら・怪
    {0b1111,0b0101,0b1011},//:カイマ,河童・怪
    {0b1111,0b0101,0b0111},//:カイマ,から傘お化け・怪
    {0b1111,0b0101,0b1100},//:カイマ,ざしきわらし・怪
    {0b0111,0b0101,0b1101},//:カイマ,アカナメ・怪
    {0b1111,0b0101,0b0110},//:カイマ,くだん・怪
    {0b1111,0b0101,0b1000},//:カイマ,けうけげん・怪
    {0b1111,0b0101,0b0100},//:カイマ,にんぎょ・怪
    {0b1111,0b0101,0b0010},//:カイマ,ろくろ首・怪
    //10レジェンド族=================================
    {0b0001,0b0101,0b0111},//:レジェンド,フシギ,S,しゅらコマ
    {0b1100,0b1011,0b1110},//:レジェンド,ネタバレリーナ
    {0b1100,0b1011,0b1111},//:レジェンド,ウンチクマ
    {0b1100,0b1101,0b0001},//:レジェンド,やまタン
    //その他======================================

    {0b1101,0b1011,0b0010},//:その他,オメデトウゴザイマス
    {0b1101,0b1011,0b0011},//:その他,スゴイデスネヤルモンデスネ
    {0b1101,0b1011,0b0100},//:その他,コロコロコミック
    {0b1101,0b1011,0b0111},//:フシギ,召還であります
    {0b1101,0b1011,0b1000},//:ゴウケツ,召還であります
    {0b1101,0b1011,0b1001},//:プリチー,召還であります
    {0b1101,0b1011,0b1100},//:ポカポカ,召還であります
    {0b1101,0b1011,0b1110},//:ウスラカゲ,召還でありま
    {0b0111,0b0101,0b0100},//:カイマ,召還であります
    {0b1101,0b1100,0b0010},//:レジェンド,召還であります

};


ISR (INT0_vect,ISR_BLOCK) // NEXT SW 割り込み
{
    
    _delay_ms(100); 
    sw_stat = NEXT_SW;//押下状態 SET
}

ISR (INT1_vect,ISR_BLOCK) // CHANGE SW 割り込み
{
    
    _delay_ms(100); 
    sw_stat = CHANGE_SW;//押下状態 SET
}
int main (void)
{
       
    // データレジスタの指定
    //例;Port_D x0111 1111 xHHH HUHH
    //   H:出力(1) L:出力(0) U:内蔵プルアップ(1) D:プルアップなし(0)
    //   方向設定レジスタ(DRR×) を入力設定にして
    //  データレジスタ(PORT×)で1にすると 内部プルアップ設定になる。
    
    
    // PORTB の設定
    DDRB  = 0xff; //方向設定レジスタの指定  x1111 1111
        
    // PORTD の設定
    DDRD  = 0xb3; //方向設定レジスタの指定  x1011 0011
    PORTD = 0xff;    // データレジスタの指定
    sbi(GIMSK,INT0);// INT0を許可する 
    sbi(GIMSK,INT1);// INT1を許可する
    
    cbi(MCUCR,ISC01);//INTピンのLレベルで割り込み
    cbi(MCUCR,ISC00);// ;
    
   
    if(!(PIND & (NEXT_SW)) ||
       !(PIND &(CHANGE_SW)) ){//NEXT swが押されていれば。(low
        set_sleep_mode(SLEEP_MODE_IDLE);// アイドルモードを設定 2.30mA
                
    }else{
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);// パワーダウンモードを設定 0.02mA

    }

    sei();  // 割り込みの許可
   
//main loop アイドル処理
   
    while (1);
    {
         if(sw_stat & NEXT_SW){//NEXT SW 押されたか?
            //sbi(PORTB,3); //LED on
            
             if (medal_soket==INSERT) {//メダル状態は装着。
                 eject_medal_sw();
                 _delay_ms(EJECT_VOICE_WAIT);

                 medal_soket = EJECT;//メダル状態をイジェクトに。
                 
             }
             
            output_medal_sw(pat_index);//音声を発生
             medal_soket = INSERT;//メダル状態を装着に。//つぎの音声の取り出し準備
             
             pat_index++;//現在 族 テーブルのメダルパターンインデックス更新
             if(pat_index > ctl_tbl[pat_attr].end_offs){
                 pat_index = ctl_tbl[pat_attr].top_offs;
             }

             
        }else if(sw_stat & CHANGE_SW){//CHANGE SW 押されたか?
            if (medal_soket==INSERT) {//メダル状態は装着。
                eject_medal_sw();
                medal_soket = EJECT;//メダル状態をイジェクトに。
                _delay_ms(EJECT_VOICE_WAIT);
            }
          
            change_zoku();//族を変更
            output_medal_sw(pat_index);//音声を発生
            medal_soket = INSERT;//メダル状態を装着に。
            
        }
        sw_stat=0;
        
        sleep_mode(); //スリープ開始。
        
    }
    
    
    return 0;        
}
//
//族を変更
//
void change_zoku()
{
    //族を変更
    pat_attr++;
    if (pat_attr == (ZOK_MAX)) {
        pat_attr = 0;
    }
    //その族の先頭へ移動
    pat_index = ctl_tbl[pat_attr].top_offs;
   
}
//
// メダルSW 出力
//
void output_medal_sw(int index)
{
    int i;

    for(i=0;i<3;i++){//音声発生指令パターン取り出し
        pat_buff[i]=pgm_read_byte_near(&(pat_array[index][i]));
    }
    
    for(i=0;i<4;i++){//メダル挿入指令
        PORTB=pat_buff[i];
        _delay_ms(MEDAL_PULSE_WIDTH);
        PORTB = 0;// sw all off
        _delay_ms(MEDAL_PULSE_WIDTH);
    }
    return ;
}

//
//eject
//
void eject_medal_sw()
{
    int i;
    for(i=3;i >= 0;i--){//メダル取り出し指令
        PORTB=pat_buff[i];
        _delay_ms(MEDAL_EJECT_PULSE_WIDTH);
        PORTB = 0;//必要か? ここでいいか?
        _delay_ms(MEDAL_EJECT_PULSE_WIDTH);
    }
}

//end program


戻る

0 件のコメント:

コメントを投稿