今回は、人気のパチスロ機種である
“ディスクアップ”をモチーフに、
ミニチュアスロットマシンを自作してみました。

今回の推しポイントは、
PICマイコンの”mTouch”という機能を利用した
スクラッチ演出です。

以前にチャレンジしたときは、何が悪かったのか上手く機能せず、
今回ようやく使いこなすことが出来ました。

せっかくなので、
mTouch部分のコードをメモしておこうと思います。

#include <xc.h>
#include <stdio.h>
#define _XTAL_FREQ 16000000
#pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FOSC = INTOSC, FCMEN = OFF 
#pragma config MCLRE = ON, WDTE = OFF, CP = OFF, PWRTE = ON, CLKOUTEN = OFF
#pragma config PLLEN = OFF, WRT = OFF, STVREN = ON, BORV = LO, LVP = OFF 

//********************************************************************************
void main(void)
{
//タッチセンサ用の定義
unsigned short cap_value;//タッチセンサ値格納用

//タッチセンサ(Capacitive Sensor)の設定
CPSCON0=0b00001000;//固定基準電圧使用、オシレータ(電流)
CPSCON1=0b00000001;//センサピンにCPS1を使用

//タイマー1の設定
T1CON = 0b11000001;//容量検知オシレータでTIMER1をカウント
//検知開始
TMR1H=0;//タイマー1の初期化
TMR1L=0;

//割り込み設定
PEIE = 1;//周辺装置割り込み許可
GIE = 1;//全割り込み処理を許可
//
cap_value=0;//初期値0

CPSON=1;//タッチセンサモジュールの計測開始
//検知開始
TMR1H=0;//タイマー1の初期化
TMR1L=0;
__delay_ms(10);    //一定時間待つ
CPSON=0;//タッチセンサモジュールの計測終了

//*******************************************************
//タッチ検知処理準備完了
//*******************************************************
TRISA = 0b00000010;//
TRISB = 0b00000000;
OPTION_REG=0b00000000;
WPUA = 0b00000000;
WPUB = 0b00000000;
PORTA = 0b00000000;
PORTB = 0b00000000;
ANSELA = 0b00000010;//使うCPSピンに対応したAN*ピンを1に設定すること!
ANSELB = 0b00000000;
OSCCON = 0b01111100; // INTOSC 16MHz
SSP1CON1 = 0b00101000; // I2C master mode, Clock 100kHz = Fosc / ( 4 * (SSPADD + 1 ))
SSP1STAT = 0b10000000; // Slew rate control Enabled
SSP1ADD = 0b00100111; // SSPADD 39d, Clock = Fosc / ( 4 * (SSPADD + 1 )) = 100kHz
//********************************************************************************

    while(1){   
        
        //タッチ検知処理
        //検知開始
        CPSON=1;//タッチセンサモジュール計測開始
        TMR1H=0;//タイマー1の初期化
        TMR1L=0;
        //一定時間待つ
        __delay_ms(10);
        //タッチセンサモジュールの計測を停止して、センサ値を一旦cap_valueに格納
        CPSON=0;//タッチセンサモジュール計測終了
        cap_value=(TMR1H*256)+TMR1L;//カウント値を読み込む
        
        //タッチ判定

        if(cap_value < 900){//900が閾値、この値で感度調整
       //センサに触れたときの処理
            RB4=1;
            __delay_ms(10);
            RB4=0;
            __delay_ms(10);
        }else{
       //センサに触れていないときの処理
             RB4=0;
        }
    }    
}// main
//****************************************************  

使用したPICマイコンは、”PIC16F1827″です。

<mTouch覚書>
・センサに使うピンに内部抵抗を使うと反応しないっぽい?
 恐らく抵抗値が大きすぎて閾値設定が上手く出来なくなる?
 私は外付けで330Ωの抵抗を取り付けました。
・センサに使うピンはANS_を1にする
 よく分かりませんが、アナログ入力にして放電させる?
 CPSとANSの数字は一緒とは限らないので要確認!

mTouchの動作確認は、こちらの動画でも紹介しています。

 

というわけで、
変なモノを作って紹介していたりもするので
興味のある方はぜひチャンネル登録を宜しくお願いします!