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

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Sun Jun 26 13:52:51 2011 +0000
Revision:
0:dce3930917a3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunifu 0:dce3930917a3 1 #include "mbed.h"
sunifu 0:dce3930917a3 2 #include "TextLCD.h"
sunifu 0:dce3930917a3 3
sunifu 0:dce3930917a3 4 #define THR 200
sunifu 0:dce3930917a3 5
sunifu 0:dce3930917a3 6 enum SignalMode{NOT_USED,FORWARD,BACK,LEFT,RIGHT,DASH_FORWARD,FORWARD_LEFT,FORWARD_RIGHT,DASH_FORWARD_LEFT,
sunifu 0:dce3930917a3 7 DASH_FORWARD_RIGHT,BACK_LEFT,BACK_RIGHT,DASH_BACK,DASH_BACK_LEFT,DASH_BACK_RIGHT, STOP};
sunifu 0:dce3930917a3 8 SignalMode STAT;
sunifu 0:dce3930917a3 9
sunifu 0:dce3930917a3 10 int steering;
sunifu 0:dce3930917a3 11 int signal;
sunifu 0:dce3930917a3 12
sunifu 0:dce3930917a3 13 InterruptIn event(p21) ;
sunifu 0:dce3930917a3 14
sunifu 0:dce3930917a3 15 TextLCD lcd(p24, p26, p27, p28, p29, p30);
sunifu 0:dce3930917a3 16 BusOut myleds(LED1,LED2,LED3,LED4);
sunifu 0:dce3930917a3 17
sunifu 0:dce3930917a3 18 int bitCnt = 0;
sunifu 0:dce3930917a3 19 Timer timer;
sunifu 0:dce3930917a3 20 int begin,end,interval;
sunifu 0:dce3930917a3 21
sunifu 0:dce3930917a3 22 void tStart()
sunifu 0:dce3930917a3 23 {
sunifu 0:dce3930917a3 24 interval = 0;
sunifu 0:dce3930917a3 25 begin = timer.read_us();
sunifu 0:dce3930917a3 26 }
sunifu 0:dce3930917a3 27
sunifu 0:dce3930917a3 28 void tEnd()
sunifu 0:dce3930917a3 29 {
sunifu 0:dce3930917a3 30 end = timer.read_us();
sunifu 0:dce3930917a3 31 interval = end - begin ;
sunifu 0:dce3930917a3 32 timer.reset();
sunifu 0:dce3930917a3 33
sunifu 0:dce3930917a3 34 if( 2000 - THR < interval && interval < 2000 + THR ){
sunifu 0:dce3930917a3 35 bitCnt = 0 ;
sunifu 0:dce3930917a3 36 signal = 0;
sunifu 0:dce3930917a3 37 }else if ( 500 -THR < interval && interval < 500 + THR ){
sunifu 0:dce3930917a3 38 signal <<= 1;
sunifu 0:dce3930917a3 39 bitCnt++;
sunifu 0:dce3930917a3 40 }else if ( 1000 -THR < interval && interval < 1000 + THR ){
sunifu 0:dce3930917a3 41 signal <<= 1;
sunifu 0:dce3930917a3 42 signal++;
sunifu 0:dce3930917a3 43 bitCnt++;
sunifu 0:dce3930917a3 44 }
sunifu 0:dce3930917a3 45
sunifu 0:dce3930917a3 46 }
sunifu 0:dce3930917a3 47
sunifu 0:dce3930917a3 48 int main() {
sunifu 0:dce3930917a3 49 int data = 0;
sunifu 0:dce3930917a3 50 timer.start() ;
sunifu 0:dce3930917a3 51 event.fall(&tStart) ;
sunifu 0:dce3930917a3 52 event.rise(&tEnd) ;
sunifu 0:dce3930917a3 53
sunifu 0:dce3930917a3 54 while(1) {
sunifu 0:dce3930917a3 55 if ( bitCnt == 6){
sunifu 0:dce3930917a3 56 data = signal;
sunifu 0:dce3930917a3 57 lcd.locate(0,0);
sunifu 0:dce3930917a3 58 lcd.printf("%3d",data);
sunifu 0:dce3930917a3 59 lcd.locate(4,0);
sunifu 0:dce3930917a3 60 lcd.printf("%d%d",(data&0x20)?1:0,(data&0x10)?1:0);
sunifu 0:dce3930917a3 61 lcd.printf("%d%d%d%d",(data&0x08)?1:0,(data&0x04)?1:0,(data&0x02)?1:0,(data&0x01)?1:0);
sunifu 0:dce3930917a3 62 lcd.locate(0,1);
sunifu 0:dce3930917a3 63
sunifu 0:dce3930917a3 64 if ( data < 16 )
sunifu 0:dce3930917a3 65 lcd.printf("CH A");
sunifu 0:dce3930917a3 66 else if ( data < 32 )
sunifu 0:dce3930917a3 67 lcd.printf("CH B");
sunifu 0:dce3930917a3 68 else if ( data < 48)
sunifu 0:dce3930917a3 69 lcd.printf("CH C");
sunifu 0:dce3930917a3 70 else if ( data < 64)
sunifu 0:dce3930917a3 71 lcd.printf("CH D");
sunifu 0:dce3930917a3 72
sunifu 0:dce3930917a3 73 steering = (int)(data&0x0F) ;
sunifu 0:dce3930917a3 74 lcd.locate(5,1);
sunifu 0:dce3930917a3 75 switch(steering){
sunifu 0:dce3930917a3 76 case LEFT:
sunifu 0:dce3930917a3 77 lcd.printf("LEFT ");
sunifu 0:dce3930917a3 78 myleds = 0x01;
sunifu 0:dce3930917a3 79 break;
sunifu 0:dce3930917a3 80 case RIGHT:
sunifu 0:dce3930917a3 81 lcd.printf("RIGHT ");
sunifu 0:dce3930917a3 82 myleds = 0x08;
sunifu 0:dce3930917a3 83 break;
sunifu 0:dce3930917a3 84 case FORWARD:
sunifu 0:dce3930917a3 85 lcd.printf("FORWARD");
sunifu 0:dce3930917a3 86 break;
sunifu 0:dce3930917a3 87 case BACK:
sunifu 0:dce3930917a3 88 lcd.printf("BACK ");
sunifu 0:dce3930917a3 89 break;
sunifu 0:dce3930917a3 90 case DASH_FORWARD:
sunifu 0:dce3930917a3 91 lcd.printf("DASH_FOR ");
sunifu 0:dce3930917a3 92 break;
sunifu 0:dce3930917a3 93 case DASH_BACK:
sunifu 0:dce3930917a3 94 lcd.printf("DASH_BACK");
sunifu 0:dce3930917a3 95 break;
sunifu 0:dce3930917a3 96 case STOP:
sunifu 0:dce3930917a3 97 lcd.printf("STOP ");
sunifu 0:dce3930917a3 98 wait_ms(50);
sunifu 0:dce3930917a3 99 lcd.cls();
sunifu 0:dce3930917a3 100 myleds =0x00;
sunifu 0:dce3930917a3 101 }
sunifu 0:dce3930917a3 102 }
sunifu 0:dce3930917a3 103 }
sunifu 0:dce3930917a3 104 }