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@0:42878a8633f5, 2013-06-23 (annotated)
- 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?
User | Revision | Line number | New 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 |