Tadao Iida
/
choroq_remocon
mbed/ARM 活用事例 第4章 チョロQハイブリッドで赤外線リモコン制御の基礎を学ぼう
main.cpp@0:1dbc1f10077d, 2011-06-26 (annotated)
- Committer:
- sunifu
- Date:
- Sun Jun 26 13:34:01 2011 +0000
- Revision:
- 0:1dbc1f10077d
- Child:
- 1:69d85918eaf8
Who changed what in which revision?
User | Revision | Line number | New 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 | } |