IR control car "spinner" 赤外線コントロールラジコン"spinner"の本体&プロポ統合版プログラムです
Dependencies: Motor Propo_RemotoIR mbed
propo.cpp@0:6825e25b7428, 2013-10-16 (annotated)
- Committer:
- suupen
- Date:
- Wed Oct 16 02:45:27 2013 +0000
- Revision:
- 0:6825e25b7428
IR control car "spinner"
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:6825e25b7428 | 1 | /* ir propo |
suupen | 0:6825e25b7428 | 2 | * microcomputer |
suupen | 0:6825e25b7428 | 3 | * LPC1114FN28 |
suupen | 0:6825e25b7428 | 4 | * used pin |
suupen | 0:6825e25b7428 | 5 | * dp1 : irLED output |
suupen | 0:6825e25b7428 | 6 | * dp9 : analog joystic x axis input |
suupen | 0:6825e25b7428 | 7 | * dp10: analog joystic y axis input |
suupen | 0:6825e25b7428 | 8 | * joystic |
suupen | 0:6825e25b7428 | 9 | * akizuki(http://akizukidenshi.com/catalog/g/gP-04048/) |
suupen | 0:6825e25b7428 | 10 | * analog joystic |
suupen | 0:6825e25b7428 | 11 | * <schematic> |
suupen | 0:6825e25b7428 | 12 | * Vcc(3.3[V]) : joystic pin1'(X axis) pin3(Y axis) |
suupen | 0:6825e25b7428 | 13 | * GND(0[V]) : joystic pin3'(X axis) pin1(Y axis) |
suupen | 0:6825e25b7428 | 14 | * LPC1114FN28 dp9 : joystic pin2'(X axis) |
suupen | 0:6825e25b7428 | 15 | * LPC1114FN28 dp10: joystic pin2 (Y axis) |
suupen | 0:6825e25b7428 | 16 | * <joystic fixed data> |
suupen | 0:6825e25b7428 | 17 | * X axis -8 to 7 :int8_t |
suupen | 0:6825e25b7428 | 18 | * Y axis -8 to 7 :int8_t |
suupen | 0:6825e25b7428 | 19 | * |
suupen | 0:6825e25b7428 | 20 | * ir send |
suupen | 0:6825e25b7428 | 21 | * akizuki (http://akizukidenshi.com/catalog/g/gP-04048/) |
suupen | 0:6825e25b7428 | 22 | * OSI5FU3A11C |
suupen | 0:6825e25b7428 | 23 | * <schematic> |
suupen | 0:6825e25b7428 | 24 | * setting If=50[mA] |
suupen | 0:6825e25b7428 | 25 | * LPC1114FN28 dp1 : irLED(anode) |
suupen | 0:6825e25b7428 | 26 | * GND(0[V]) : - 40[ohm] - irLED(cathod) |
suupen | 0:6825e25b7428 | 27 | * <send format> |
suupen | 0:6825e25b7428 | 28 | * SONY format |
suupen | 0:6825e25b7428 | 29 | * send cycle : 100[ms] |
suupen | 0:6825e25b7428 | 30 | * buf[0] :x axis |
suupen | 0:6825e25b7428 | 31 | * buf[1] :y axis |
suupen | 0:6825e25b7428 | 32 | */ |
suupen | 0:6825e25b7428 | 33 | #include "mbed.h" |
suupen | 0:6825e25b7428 | 34 | #include "propo.h" |
suupen | 0:6825e25b7428 | 35 | #include "TransmitterIR.h" |
suupen | 0:6825e25b7428 | 36 | |
suupen | 0:6825e25b7428 | 37 | |
suupen | 0:6825e25b7428 | 38 | void interruptPropo(void); |
suupen | 0:6825e25b7428 | 39 | |
suupen | 0:6825e25b7428 | 40 | //#define DBG_PROPO |
suupen | 0:6825e25b7428 | 41 | |
suupen | 0:6825e25b7428 | 42 | #ifdef DBG_PROPO |
suupen | 0:6825e25b7428 | 43 | DigitalOut myled(LED2); |
suupen | 0:6825e25b7428 | 44 | Serial pc(dp16, dp15); |
suupen | 0:6825e25b7428 | 45 | #endif // DBG_PROPO |
suupen | 0:6825e25b7428 | 46 | //------------------------ |
suupen | 0:6825e25b7428 | 47 | // joystic |
suupen | 0:6825e25b7428 | 48 | AnalogIn Xin(dp9); |
suupen | 0:6825e25b7428 | 49 | AnalogIn Yin(dp10); |
suupen | 0:6825e25b7428 | 50 | |
suupen | 0:6825e25b7428 | 51 | int8_t XinData; |
suupen | 0:6825e25b7428 | 52 | int8_t YinData; |
suupen | 0:6825e25b7428 | 53 | //------------------------- |
suupen | 0:6825e25b7428 | 54 | // ir control |
suupen | 0:6825e25b7428 | 55 | TransmitterIR ir_tx(dp1); |
suupen | 0:6825e25b7428 | 56 | RemoteIR::Format format = RemoteIR::SONY; |
suupen | 0:6825e25b7428 | 57 | uint8_t buf[2] = {0x00, 0x00}; |
suupen | 0:6825e25b7428 | 58 | int bitcount = 16; |
suupen | 0:6825e25b7428 | 59 | |
suupen | 0:6825e25b7428 | 60 | Ticker timer; |
suupen | 0:6825e25b7428 | 61 | |
suupen | 0:6825e25b7428 | 62 | void initialPropo(void) |
suupen | 0:6825e25b7428 | 63 | { |
suupen | 0:6825e25b7428 | 64 | timer.attach(&interruptPropo, 0.1); |
suupen | 0:6825e25b7428 | 65 | } |
suupen | 0:6825e25b7428 | 66 | |
suupen | 0:6825e25b7428 | 67 | void interruptPropo() |
suupen | 0:6825e25b7428 | 68 | { |
suupen | 0:6825e25b7428 | 69 | // analog 16bit unsigned data(uint16_t) to 4bit signed data(int8_t) |
suupen | 0:6825e25b7428 | 70 | XinData = (int8_t)((int16_t)(Xin.read_u16() >> 12) - 0x8); |
suupen | 0:6825e25b7428 | 71 | YinData = (int8_t)((int16_t)(Yin.read_u16() >> 12) - 0x8); |
suupen | 0:6825e25b7428 | 72 | |
suupen | 0:6825e25b7428 | 73 | buf[0] = XinData; |
suupen | 0:6825e25b7428 | 74 | buf[1] = YinData; |
suupen | 0:6825e25b7428 | 75 | |
suupen | 0:6825e25b7428 | 76 | // send data |
suupen | 0:6825e25b7428 | 77 | if(ir_tx.getState() == TransmitterIR::Idle) { |
suupen | 0:6825e25b7428 | 78 | bitcount = ir_tx.setData(format, buf, bitcount); |
suupen | 0:6825e25b7428 | 79 | } |
suupen | 0:6825e25b7428 | 80 | |
suupen | 0:6825e25b7428 | 81 | #ifdef DBG_PROPO |
suupen | 0:6825e25b7428 | 82 | pc.printf("X = %02d, Y = %02d \r\n",XinData,YinData); |
suupen | 0:6825e25b7428 | 83 | myled = !myled; |
suupen | 0:6825e25b7428 | 84 | #endif // DBG_PROPO |
suupen | 0:6825e25b7428 | 85 | } |
suupen | 0:6825e25b7428 | 86 | |
suupen | 0:6825e25b7428 | 87 |