IRC Helicopter "Swift"Propoの受信test program.
Dependencies: CodecIRPropoSwift Propo_RemotoIR mbed
IRC Helicopter "SWIFT"のPropoからの送信データをmbedで受信解析して、パソコンにUSB-COMでデータを送信するプログラムです。
使い方は、 http://suupen-make.blogspot.jp/2013/06/irc-helicopter-swiftmbedtest-program.html にまとめてあります。
main.cpp
- Committer:
- suupen
- Date:
- 2013-06-23
- Revision:
- 0:42878a8633f5
File content as of revision 0:42878a8633f5:
/** * Swift Propo Decode test program * 130623 * * Writer:suupen * * <circuit diagram> * VU(mbed) * | * |Vcc * --- (PL-IRM2161) IR Reciver * | |Vout * | |--- p5(mbed) * | | * --- * |GND * | * GND(mbed) * * <PC termnal soft> * tera term * baudrate:38400[bps] * data:8[bit] * parity:none * stopbit:1[bit] */ #define PROPO_RAW_DATA // ari: zyusin data hyoji nasi:Swift kaiseki data hyoji #define SWIFT_NORMALIZE // ari: Swift data seikika hyoji nasi: Swift data tujyo hyoji #include "mbed.h" #include "ReceiverIR.h" #include "CodecSwift.h" #include "DecodeSwift.h" #define SWIFT_USE void display_format(RemoteIR::Format format); void display_binary(uint8_t *buf, uint8_t cnt); Serial pc(USBTX,USBRX); ReceiverIR ir_rx(p5); RemoteIR::Format format; #ifndef PROPO_RAW_DATA DecodeSwift swift; CodecSwift::swiftPropo_t swiftData; #ifdef SWIFT_NORMALIZE CodecSwift::normalizePropo_t normalize; #endif // SWIFT_USE #endif // PROPO_RAW_DATA uint8_t buf[32]; int bitcount; DigitalOut myled(LED1); DigitalOut led2(LED2); DigitalIn irtest(p20); int main(){ pc.baud(38400); while(1){ myled =~myled; led2 = irtest; #ifdef PROPO_RAW_DATA if (ir_rx.getState() == ReceiverIR::Received) { bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8); display_format(format); display_binary(buf, ((bitcount + 7) / 8)); } else{ #if 0 switch(ir_rx.getState()){ case ReceiverIR::Idle: printf("Idele\n"); break; case ReceiverIR::Receiving: printf("Receiveing\n"); break; case ReceiverIR::Received: printf("Received\n"); break; } #endif } #endif // PROPO_RAW_DATA #ifndef PROPO_RAW_DATA if (ir_rx.getState() == ReceiverIR::Received) { bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8); #ifdef SWIFT_NORMALIZE bool ans = swift.normalize(buf, &normalize); if(ans == true){ printf("count = %02x band = %1d slottle = %f trim = %f ladder = %f elevator = %f\n",normalize.count,normalize.band,normalize.slottle,normalize.trim,normalize.ladder, normalize.elevator); } else{ printf("NG\n"); } #else // ~SWIFT_NORMALIZE bool ans = swift.decode(buf, &swiftData); if(ans == true){ printf("count = %02x band = %02x slottle = %03d trim = %03d ladder = %03d elevator = %03d\n",swiftData.count,swiftData.band,swiftData.slottle,swiftData.trim,swiftData.ladder, swiftData.elevator); } else{ printf("NG\n"); } #endif } #endif // SWIFT_NORMALIZE } } /** * Display a format of a data. */ void display_format(RemoteIR::Format format) { switch (format) { case RemoteIR::UNKNOWN: pc.printf("????????"); break; case RemoteIR::NEC: pc.printf("NEC "); break; case RemoteIR::NEC_REPEAT: pc.printf("NEC (R)"); break; case RemoteIR::AEHA: pc.printf("AEHA "); break; case RemoteIR::AEHA_REPEAT: pc.printf("AEHA (R)"); break; case RemoteIR::SONY: //HONEY_BEE: pc.printf("SONY or HONEY_BEE "); break; #ifdef SWIFT_PROTCOL case RemoteIR::SWIFT: pc.printf("SWIFT "); break; #endif // SWIFT_PROTCOL default: pc.printf("unknown "); break; } } void display_binary(uint8_t *buf, uint8_t cnt){ uint8_t i; uint8_t bitcnt; uint8_t dat; uint16_t checkbit; for(i = 0; i < cnt; i++){ checkbit = 0x0080; dat = *(buf + i); printf("%02x:",dat); for(bitcnt = 0; bitcnt < 8; bitcnt++){ if( checkbit & dat){printf("1");} else {printf("0");} checkbit = checkbit >> 1; if(bitcnt == 3){printf(" ");} } printf(" "); } printf("\n"); }