Tadao Iida
/
choroq_signal
mbed/ARM 活用事例 第4章 チョロQハイブリッドで赤外線リモコン制御の基礎を学ぼう
main.cpp@0:323914d43f7e, 2011-10-04 (annotated)
- Committer:
- sunifu
- Date:
- Tue Oct 04 13:16:24 2011 +0000
- Revision:
- 0:323914d43f7e
Who changed what in which revision?
User | Revision | Line number | New 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 | } |