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

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Tue Oct 04 13:16:24 2011 +0000
Revision:
0:323914d43f7e

        

Who changed what in which revision?

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