mbed/ARM 活用事例 第4章 チョロQハイブリッドで赤外線リモコン制御の基礎を学ぼう

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Sun Jun 26 13:34:01 2011 +0000
Revision:
0:1dbc1f10077d
Child:
1:69d85918eaf8

        

Who changed what in which revision?

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