エレキジャック Web版 mbedで初めてのマイコン開発 センサを使ってみよう 「CHOROQ HYBRIDを使って赤外線リモコン制御の基礎を学ぶ」の記事で作成したCHOROQ HYBRIDのリモコン信号を読み取るプログラムです。 赤外線リモコンの信号を読み取る基礎が分かります。 http://www.eleki-jack.com/arm/2011/06/mbed-35choroq-hybrid.html

Dependencies:   TextLCD mbed

main.cpp

Committer:
sunifu
Date:
2011-06-26
Revision:
0:dce3930917a3

File content as of revision 0:dce3930917a3:

#include "mbed.h"
#include "TextLCD.h"

#define THR 200

enum SignalMode{NOT_USED,FORWARD,BACK,LEFT,RIGHT,DASH_FORWARD,FORWARD_LEFT,FORWARD_RIGHT,DASH_FORWARD_LEFT,
            DASH_FORWARD_RIGHT,BACK_LEFT,BACK_RIGHT,DASH_BACK,DASH_BACK_LEFT,DASH_BACK_RIGHT, STOP};
SignalMode STAT;    

int steering;        
int signal;

InterruptIn event(p21) ; 

TextLCD lcd(p24, p26, p27, p28, p29, p30);
BusOut myleds(LED1,LED2,LED3,LED4);

int bitCnt = 0;
Timer timer;
int begin,end,interval;

void tStart()
{
    interval = 0;
    begin = timer.read_us();
}

void tEnd()
{
    end = timer.read_us();
    interval = end - begin ;
    timer.reset();  
    
    if( 2000 - THR < interval && interval < 2000 + THR ){
        bitCnt = 0 ;
        signal = 0;
    }else if ( 500 -THR < interval && interval < 500 + THR ){
        signal <<= 1;
        bitCnt++;
    }else if ( 1000 -THR < interval && interval < 1000 + THR ){
        signal <<= 1;
        signal++;
        bitCnt++;       
    }   
   
}

int main() {
    int data = 0;
    timer.start() ;
    event.fall(&tStart) ;
    event.rise(&tEnd) ;

    while(1) {
        if ( bitCnt == 6){ 
            data = signal;
            lcd.locate(0,0);
            lcd.printf("%3d",data);
            lcd.locate(4,0);
            lcd.printf("%d%d",(data&0x20)?1:0,(data&0x10)?1:0);
            lcd.printf("%d%d%d%d",(data&0x08)?1:0,(data&0x04)?1:0,(data&0x02)?1:0,(data&0x01)?1:0);
            lcd.locate(0,1);

            if ( data < 16 )
                lcd.printf("CH A");
            else if ( data < 32 )
                lcd.printf("CH B");
            else if ( data < 48)
                lcd.printf("CH C");           
            else if ( data < 64)
                lcd.printf("CH D");

            steering = (int)(data&0x0F) ;    
            lcd.locate(5,1);
            switch(steering){
                case LEFT:
                    lcd.printf("LEFT     ");
                    myleds = 0x01;
                    break;
                case RIGHT:
                    lcd.printf("RIGHT    ");
                    myleds = 0x08;
                    break;
                case FORWARD:
                    lcd.printf("FORWARD");    
                    break;
                case BACK:
                    lcd.printf("BACK     ");
                    break;
                case DASH_FORWARD:
                    lcd.printf("DASH_FOR ");
                    break;
                case DASH_BACK:
                    lcd.printf("DASH_BACK");
                    break;    
                case STOP:
                    lcd.printf("STOP     ");    
                    wait_ms(50);
                    lcd.cls();
                    myleds =0x00;
            }    
        }
    }
}