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 にまとめてあります。

Committer:
suupen
Date:
Sun Jun 23 09:43:15 2013 +0000
Revision:
0:42878a8633f5
IRC Helicopter "Swift" ?Propo??test program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:42878a8633f5 1 /**
suupen 0:42878a8633f5 2 * Swift Propo Decode test program
suupen 0:42878a8633f5 3 * 130623
suupen 0:42878a8633f5 4 *
suupen 0:42878a8633f5 5 * Writer:suupen
suupen 0:42878a8633f5 6 *
suupen 0:42878a8633f5 7 * <circuit diagram>
suupen 0:42878a8633f5 8 * VU(mbed)
suupen 0:42878a8633f5 9 * |
suupen 0:42878a8633f5 10 * |Vcc
suupen 0:42878a8633f5 11 * --- (PL-IRM2161) IR Reciver
suupen 0:42878a8633f5 12 * | |Vout
suupen 0:42878a8633f5 13 * | |--- p5(mbed)
suupen 0:42878a8633f5 14 * | |
suupen 0:42878a8633f5 15 * ---
suupen 0:42878a8633f5 16 * |GND
suupen 0:42878a8633f5 17 * |
suupen 0:42878a8633f5 18 * GND(mbed)
suupen 0:42878a8633f5 19 *
suupen 0:42878a8633f5 20 * <PC termnal soft>
suupen 0:42878a8633f5 21 * tera term
suupen 0:42878a8633f5 22 * baudrate:38400[bps]
suupen 0:42878a8633f5 23 * data:8[bit]
suupen 0:42878a8633f5 24 * parity:none
suupen 0:42878a8633f5 25 * stopbit:1[bit]
suupen 0:42878a8633f5 26 */
suupen 0:42878a8633f5 27
suupen 0:42878a8633f5 28 #define PROPO_RAW_DATA // ari: zyusin data hyoji nasi:Swift kaiseki data hyoji
suupen 0:42878a8633f5 29 #define SWIFT_NORMALIZE // ari: Swift data seikika hyoji nasi: Swift data tujyo hyoji
suupen 0:42878a8633f5 30
suupen 0:42878a8633f5 31
suupen 0:42878a8633f5 32 #include "mbed.h"
suupen 0:42878a8633f5 33 #include "ReceiverIR.h"
suupen 0:42878a8633f5 34
suupen 0:42878a8633f5 35 #include "CodecSwift.h"
suupen 0:42878a8633f5 36 #include "DecodeSwift.h"
suupen 0:42878a8633f5 37
suupen 0:42878a8633f5 38
suupen 0:42878a8633f5 39 #define SWIFT_USE
suupen 0:42878a8633f5 40
suupen 0:42878a8633f5 41 void display_format(RemoteIR::Format format);
suupen 0:42878a8633f5 42 void display_binary(uint8_t *buf, uint8_t cnt);
suupen 0:42878a8633f5 43
suupen 0:42878a8633f5 44 Serial pc(USBTX,USBRX);
suupen 0:42878a8633f5 45
suupen 0:42878a8633f5 46
suupen 0:42878a8633f5 47 ReceiverIR ir_rx(p5);
suupen 0:42878a8633f5 48 RemoteIR::Format format;
suupen 0:42878a8633f5 49
suupen 0:42878a8633f5 50
suupen 0:42878a8633f5 51 #ifndef PROPO_RAW_DATA
suupen 0:42878a8633f5 52 DecodeSwift swift;
suupen 0:42878a8633f5 53 CodecSwift::swiftPropo_t swiftData;
suupen 0:42878a8633f5 54
suupen 0:42878a8633f5 55 #ifdef SWIFT_NORMALIZE
suupen 0:42878a8633f5 56 CodecSwift::normalizePropo_t normalize;
suupen 0:42878a8633f5 57 #endif // SWIFT_USE
suupen 0:42878a8633f5 58
suupen 0:42878a8633f5 59 #endif // PROPO_RAW_DATA
suupen 0:42878a8633f5 60
suupen 0:42878a8633f5 61 uint8_t buf[32];
suupen 0:42878a8633f5 62 int bitcount;
suupen 0:42878a8633f5 63
suupen 0:42878a8633f5 64 DigitalOut myled(LED1);
suupen 0:42878a8633f5 65 DigitalOut led2(LED2);
suupen 0:42878a8633f5 66 DigitalIn irtest(p20);
suupen 0:42878a8633f5 67
suupen 0:42878a8633f5 68
suupen 0:42878a8633f5 69 int main(){
suupen 0:42878a8633f5 70 pc.baud(38400);
suupen 0:42878a8633f5 71 while(1){
suupen 0:42878a8633f5 72
suupen 0:42878a8633f5 73 myled =~myled;
suupen 0:42878a8633f5 74 led2 = irtest;
suupen 0:42878a8633f5 75
suupen 0:42878a8633f5 76
suupen 0:42878a8633f5 77
suupen 0:42878a8633f5 78 #ifdef PROPO_RAW_DATA
suupen 0:42878a8633f5 79 if (ir_rx.getState() == ReceiverIR::Received) {
suupen 0:42878a8633f5 80 bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8);
suupen 0:42878a8633f5 81
suupen 0:42878a8633f5 82 display_format(format);
suupen 0:42878a8633f5 83 display_binary(buf, ((bitcount + 7) / 8));
suupen 0:42878a8633f5 84 }
suupen 0:42878a8633f5 85 else{
suupen 0:42878a8633f5 86 #if 0
suupen 0:42878a8633f5 87 switch(ir_rx.getState()){
suupen 0:42878a8633f5 88
suupen 0:42878a8633f5 89 case ReceiverIR::Idle:
suupen 0:42878a8633f5 90 printf("Idele\n");
suupen 0:42878a8633f5 91 break;
suupen 0:42878a8633f5 92 case ReceiverIR::Receiving:
suupen 0:42878a8633f5 93 printf("Receiveing\n");
suupen 0:42878a8633f5 94 break;
suupen 0:42878a8633f5 95 case ReceiverIR::Received:
suupen 0:42878a8633f5 96 printf("Received\n");
suupen 0:42878a8633f5 97 break;
suupen 0:42878a8633f5 98 }
suupen 0:42878a8633f5 99 #endif
suupen 0:42878a8633f5 100 }
suupen 0:42878a8633f5 101 #endif // PROPO_RAW_DATA
suupen 0:42878a8633f5 102
suupen 0:42878a8633f5 103 #ifndef PROPO_RAW_DATA
suupen 0:42878a8633f5 104
suupen 0:42878a8633f5 105 if (ir_rx.getState() == ReceiverIR::Received) {
suupen 0:42878a8633f5 106 bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8);
suupen 0:42878a8633f5 107 #ifdef SWIFT_NORMALIZE
suupen 0:42878a8633f5 108 bool ans = swift.normalize(buf, &normalize);
suupen 0:42878a8633f5 109 if(ans == true){
suupen 0:42878a8633f5 110 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);
suupen 0:42878a8633f5 111 }
suupen 0:42878a8633f5 112 else{
suupen 0:42878a8633f5 113 printf("NG\n");
suupen 0:42878a8633f5 114 }
suupen 0:42878a8633f5 115 #else // ~SWIFT_NORMALIZE
suupen 0:42878a8633f5 116 bool ans = swift.decode(buf, &swiftData);
suupen 0:42878a8633f5 117 if(ans == true){
suupen 0:42878a8633f5 118 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);
suupen 0:42878a8633f5 119 }
suupen 0:42878a8633f5 120 else{
suupen 0:42878a8633f5 121 printf("NG\n");
suupen 0:42878a8633f5 122 }
suupen 0:42878a8633f5 123 #endif
suupen 0:42878a8633f5 124 }
suupen 0:42878a8633f5 125 #endif // SWIFT_NORMALIZE
suupen 0:42878a8633f5 126
suupen 0:42878a8633f5 127 }
suupen 0:42878a8633f5 128
suupen 0:42878a8633f5 129 }
suupen 0:42878a8633f5 130
suupen 0:42878a8633f5 131 /**
suupen 0:42878a8633f5 132 * Display a format of a data.
suupen 0:42878a8633f5 133 */
suupen 0:42878a8633f5 134 void display_format(RemoteIR::Format format) {
suupen 0:42878a8633f5 135 switch (format) {
suupen 0:42878a8633f5 136 case RemoteIR::UNKNOWN:
suupen 0:42878a8633f5 137 pc.printf("????????");
suupen 0:42878a8633f5 138 break;
suupen 0:42878a8633f5 139 case RemoteIR::NEC:
suupen 0:42878a8633f5 140 pc.printf("NEC ");
suupen 0:42878a8633f5 141 break;
suupen 0:42878a8633f5 142 case RemoteIR::NEC_REPEAT:
suupen 0:42878a8633f5 143 pc.printf("NEC (R)");
suupen 0:42878a8633f5 144 break;
suupen 0:42878a8633f5 145 case RemoteIR::AEHA:
suupen 0:42878a8633f5 146 pc.printf("AEHA ");
suupen 0:42878a8633f5 147 break;
suupen 0:42878a8633f5 148 case RemoteIR::AEHA_REPEAT:
suupen 0:42878a8633f5 149 pc.printf("AEHA (R)");
suupen 0:42878a8633f5 150 break;
suupen 0:42878a8633f5 151 case RemoteIR::SONY: //HONEY_BEE:
suupen 0:42878a8633f5 152 pc.printf("SONY or HONEY_BEE ");
suupen 0:42878a8633f5 153 break;
suupen 0:42878a8633f5 154 #ifdef SWIFT_PROTCOL
suupen 0:42878a8633f5 155 case RemoteIR::SWIFT:
suupen 0:42878a8633f5 156 pc.printf("SWIFT ");
suupen 0:42878a8633f5 157 break;
suupen 0:42878a8633f5 158 #endif // SWIFT_PROTCOL
suupen 0:42878a8633f5 159 default:
suupen 0:42878a8633f5 160 pc.printf("unknown ");
suupen 0:42878a8633f5 161 break;
suupen 0:42878a8633f5 162 }
suupen 0:42878a8633f5 163 }
suupen 0:42878a8633f5 164
suupen 0:42878a8633f5 165 void display_binary(uint8_t *buf, uint8_t cnt){
suupen 0:42878a8633f5 166 uint8_t i;
suupen 0:42878a8633f5 167 uint8_t bitcnt;
suupen 0:42878a8633f5 168 uint8_t dat;
suupen 0:42878a8633f5 169 uint16_t checkbit;
suupen 0:42878a8633f5 170
suupen 0:42878a8633f5 171 for(i = 0; i < cnt; i++){
suupen 0:42878a8633f5 172 checkbit = 0x0080;
suupen 0:42878a8633f5 173 dat = *(buf + i);
suupen 0:42878a8633f5 174 printf("%02x:",dat);
suupen 0:42878a8633f5 175 for(bitcnt = 0; bitcnt < 8; bitcnt++){
suupen 0:42878a8633f5 176 if( checkbit & dat){printf("1");}
suupen 0:42878a8633f5 177 else {printf("0");}
suupen 0:42878a8633f5 178
suupen 0:42878a8633f5 179 checkbit = checkbit >> 1;
suupen 0:42878a8633f5 180 if(bitcnt == 3){printf(" ");}
suupen 0:42878a8633f5 181 }
suupen 0:42878a8633f5 182 printf(" ");
suupen 0:42878a8633f5 183 }
suupen 0:42878a8633f5 184 printf("\n");
suupen 0:42878a8633f5 185 }
suupen 0:42878a8633f5 186
suupen 0:42878a8633f5 187