IR control car "spinner" 赤外線コントロールラジコン"spinner"の本体&プロポ統合版プログラムです

Dependencies:   Motor Propo_RemotoIR mbed

propo.cpp

Committer:
suupen
Date:
2013-10-16
Revision:
0:6825e25b7428

File content as of revision 0:6825e25b7428:

/* ir propo
 * microcomputer
 *      LPC1114FN28
 *          used pin
 *          dp1 : irLED output
 *          dp9 : analog joystic x axis input
 *          dp10: analog joystic y axis input
 * joystic
 *      akizuki(http://akizukidenshi.com/catalog/g/gP-04048/)
 *      analog joystic
 *      <schematic>
 *          Vcc(3.3[V]) : joystic pin1'(X axis)  pin3(Y axis)
 *          GND(0[V])   : joystic pin3'(X axis)  pin1(Y axis)
 *          LPC1114FN28 dp9 : joystic pin2'(X axis)
 *          LPC1114FN28 dp10: joystic pin2 (Y axis)
 *      <joystic fixed data>
 *              X axis -8 to 7  :int8_t
 *              Y axis -8 to 7  :int8_t
 *
 * ir send
 *      akizuki (http://akizukidenshi.com/catalog/g/gP-04048/)
 *      OSI5FU3A11C
 *      <schematic>
 *          setting If=50[mA]
 *          LPC1114FN28 dp1 : irLED(anode)
 *          GND(0[V])       : - 40[ohm] - irLED(cathod)
 *      <send format>
 *          SONY format
 *          send cycle : 100[ms]
 *          buf[0] :x axis
 *          buf[1] :y axis
*/
#include "mbed.h"
#include "propo.h"
#include "TransmitterIR.h"


void interruptPropo(void);

//#define DBG_PROPO

#ifdef DBG_PROPO
DigitalOut myled(LED2);
Serial pc(dp16, dp15);
#endif // DBG_PROPO
//------------------------
// joystic
AnalogIn Xin(dp9);
AnalogIn Yin(dp10);

int8_t XinData;
int8_t YinData;
//-------------------------
// ir control
TransmitterIR ir_tx(dp1);
RemoteIR::Format format = RemoteIR::SONY;
uint8_t buf[2] = {0x00, 0x00};
int bitcount = 16;

Ticker timer;

void initialPropo(void)
{
    timer.attach(&interruptPropo, 0.1);
}

void interruptPropo()
{
    // analog 16bit unsigned data(uint16_t) to 4bit signed data(int8_t)
    XinData = (int8_t)((int16_t)(Xin.read_u16() >> 12) - 0x8);
    YinData = (int8_t)((int16_t)(Yin.read_u16() >> 12) - 0x8);

    buf[0] = XinData;
    buf[1] = YinData;

    // send data
    if(ir_tx.getState() == TransmitterIR::Idle) {
        bitcount = ir_tx.setData(format, buf, bitcount);
    }

#ifdef DBG_PROPO
    pc.printf("X = %02d, Y = %02d \r\n",XinData,YinData);
    myled = !myled;
#endif // DBG_PROPO 
}