2015年2月6日金曜日

妖怪ウオッチ零式 プログラム編 落とし穴

ボタン電池でテストするのはもったいないので、使い残りの単三電池3本を電池ボックスにいれ、ウオッチの電池ボックス端子に接続してテストしていました。
テストも終わり。蓋を閉じたら、最初の召還は出来るも次の召還でリセットがかかり
またはじめの妖怪が呼び出されました。
電池ぎれ?と思いメダルを通常通り入れてみると、ウオッチはちゃんと動作します。
散々ひねくりまわした末、ふと低電圧自動リセットと言う言葉が頭をよぎりました。
ヒューズビットが4.3Vリセット指定になっていました。電池電圧をはかってみたら
4.27V界隈原因判明です。 思い切って1.8Vリセットに書き換えました。2Vに落ちてウオッチが正常動作するかはわかりませんが、ここまで落ちたら電池交換でしょ。

2015年2月5日木曜日

妖怪ウオッチ零式 プログラム編 テスト

テストはブレッドボードに組んで行います。
CPU AVR ATtiny2313
S3、S4、S5、S6出力確認用LEDをつなぎます。
SWとLEDで動作確認を行います。


基板上のSWに結線して、ポートにつなぎます
ウオッチにつなぐ時にはLEDのグランド側の抵抗を外します。
電源はウオッチに合わせ単三3本から供給します。


この状態で単体テストを行います。
また、未知のメダルデータの解析も行います。





 後述の落とし穴での経験をふまえ
最低動作電圧を調べておきます。
今は使い古しの電池で4.26Vで動いています。


電圧を下げていくと、だいたい2.8Vを切ると
ウオッチは起動しなくなりました。
ですので単三2本でも動きました。
電池の消耗は、メダルの音声や、
メダルが押すS3,4,5,6SWの数によって
変わって来ます。
電池がなくなってきて、メダルによって反応しなくなることがあるのは
そのせいのようです。

戻る

2015年2月2日月曜日

妖怪ウオッチ零式 プログラム編 メダルデータ解析結果

持っているメダルのデータパターンはわかりますが、他の物はわかりません。
テスト用のプログラムをPCとUSBシリアル経由でつなぎ、PCから総当たりでパータンをウオッチに流してみて、メダルデータを洗い出してみました。
見落としや、妖怪の名前、種族など間違いがあるかもしれませんが、
一応現在受付可能なものを一覧にしてみました。
4バイト目は0b1010固定です。




 //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},//:?,ニョロロン,スティーブ・ジョーズ
    {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},//:レジェンド,召還であります



注)本データを用いて生じたいかなる損害にも責任を負いません。

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


戻る