IRC Helicopter "HonyBee" Propo decode test program

Dependencies:   RemoteIR mbed

これは、赤外線コントロールヘリコプター"HonyBee"のPropoからの送信データを解析して、PCに表示させるテストプログラムです。 詳しくは、 http://suupen-make.blogspot.jp/2013/06/irc-helicopter-honybeembedtest-program.html を参照してください。

Committer:
suupen
Date:
Sun Jun 23 07:28:06 2013 +0000
Revision:
0:f9e49220c97a
IRC Helicopter "HonyBee" Propo decode test program

Who changed what in which revision?

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