![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
エレキジャック Web版 mbedで初めてのマイコン開発 センサを使ってみよう 「CHOROQ HYBRIDを使って赤外線リモコン制御の基礎を学ぶ」の記事で作成したCHOROQ HYBRIDのリモコン信号を読み取るプログラムです。 赤外線リモコンの信号を読み取る基礎が分かります。 http://www.eleki-jack.com/arm/2011/06/mbed-35choroq-hybrid.html
main.cpp@0:dce3930917a3, 2011-06-26 (annotated)
- Committer:
- sunifu
- Date:
- Sun Jun 26 13:52:51 2011 +0000
- Revision:
- 0:dce3930917a3
Who changed what in which revision?
User | Revision | Line number | New 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 | } |