190605
ReceiverIR.cpp@23:f67e514c52b3, 2019-06-29 (annotated)
- Committer:
- ssuda
- Date:
- Sat Jun 29 14:31:17 2019 +0000
- Revision:
- 23:f67e514c52b3
- Parent:
- 22:3e732988bf3f
19.6.29 1:05 / add statements of <if and else if> in <tr_ready>
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:ec264f4ce158 | 1 | #include "ReceiverIR.h" |
jinyoung_KIL | 12:96209c979a7f | 2 | |
shintamainjp | 10:c54fb1204d1e | 3 | #define LOCK() |
shintamainjp | 10:c54fb1204d1e | 4 | #define UNLOCK() |
jinyoung_KIL | 12:96209c979a7f | 5 | |
shintamainjp | 0:ec264f4ce158 | 6 | #define InRange(x,y) ((((y) * 0.7) < (x)) && ((x) < ((y) * 1.3))) |
Jeonghoon | 17:6d2532146627 | 7 | |
shintamainjp | 9:dcfdac59ef74 | 8 | /** |
shintamainjp | 9:dcfdac59ef74 | 9 | * Constructor. |
shintamainjp | 9:dcfdac59ef74 | 10 | * |
shintamainjp | 9:dcfdac59ef74 | 11 | * @param rxpin Pin for receive IR signal. |
shintamainjp | 9:dcfdac59ef74 | 12 | */ |
Jeonghoon | 17:6d2532146627 | 13 | |
jinyoung_KIL | 12:96209c979a7f | 14 | ReceiverIR::ReceiverIR(PinName rxpin, float _speed, PinName _pwma,PinName _pwmb, PinName _ain0, PinName _ain1, PinName _bin0, PinName _bin1) |
jinyoung_KIL | 12:96209c979a7f | 15 | : evt(rxpin), pwma(_pwma), pwmb(_pwmb),ain1(_ain1),ain0(_ain0), bin0(_bin0),bin1(_bin1) { |
shintamainjp | 9:dcfdac59ef74 | 16 | init_state(); |
shintamainjp | 0:ec264f4ce158 | 17 | evt.fall(this, &ReceiverIR::isr_fall); |
shintamainjp | 0:ec264f4ce158 | 18 | evt.rise(this, &ReceiverIR::isr_rise); |
shintamainjp | 0:ec264f4ce158 | 19 | evt.mode(PullUp); |
jinyoung_KIL | 12:96209c979a7f | 20 | ticker.attach_us(this, &ReceiverIR::isr_wdt, 10 * 1000); |
ssuda | 23:f67e514c52b3 | 21 | Speed_L = 1.0; |
ssuda | 23:f67e514c52b3 | 22 | Speed_R = 0.995 ; |
Jeonghoon | 20:bbedc231c6a9 | 23 | |
Jeonghoon | 21:f963ccdb48d1 | 24 | init_sp_l = Speed_L; |
Jeonghoon | 21:f963ccdb48d1 | 25 | init_sp_r = Speed_R; |
shintamainjp | 0:ec264f4ce158 | 26 | } |
jinyoung_KIL | 12:96209c979a7f | 27 | |
shintamainjp | 9:dcfdac59ef74 | 28 | /** |
shintamainjp | 9:dcfdac59ef74 | 29 | * Destructor. |
shintamainjp | 9:dcfdac59ef74 | 30 | */ |
shintamainjp | 1:4adf16017a0f | 31 | ReceiverIR::~ReceiverIR() { |
shintamainjp | 1:4adf16017a0f | 32 | } |
jinyoung_KIL | 12:96209c979a7f | 33 | |
shintamainjp | 9:dcfdac59ef74 | 34 | /** |
shintamainjp | 9:dcfdac59ef74 | 35 | * Get state. |
shintamainjp | 9:dcfdac59ef74 | 36 | * |
shintamainjp | 9:dcfdac59ef74 | 37 | * @return Current state. |
shintamainjp | 9:dcfdac59ef74 | 38 | */ |
shintamainjp | 0:ec264f4ce158 | 39 | ReceiverIR::State ReceiverIR::getState() { |
shintamainjp | 9:dcfdac59ef74 | 40 | LOCK(); |
shintamainjp | 9:dcfdac59ef74 | 41 | State s = work.state; |
shintamainjp | 9:dcfdac59ef74 | 42 | UNLOCK(); |
shintamainjp | 0:ec264f4ce158 | 43 | return s; |
shintamainjp | 0:ec264f4ce158 | 44 | } |
jinyoung_KIL | 12:96209c979a7f | 45 | |
shintamainjp | 9:dcfdac59ef74 | 46 | /** |
shintamainjp | 9:dcfdac59ef74 | 47 | * Get data. |
shintamainjp | 9:dcfdac59ef74 | 48 | * |
shintamainjp | 9:dcfdac59ef74 | 49 | * @param format Pointer to format. |
shintamainjp | 9:dcfdac59ef74 | 50 | * @param buf Buffer of a data. |
shintamainjp | 9:dcfdac59ef74 | 51 | * @param bitlength Bit length of the buffer. |
shintamainjp | 9:dcfdac59ef74 | 52 | * |
shintamainjp | 9:dcfdac59ef74 | 53 | * @return Data bit length. |
shintamainjp | 9:dcfdac59ef74 | 54 | */ |
shintamainjp | 4:2304646f6ff5 | 55 | int ReceiverIR::getData(RemoteIR::Format *format, uint8_t *buf, int bitlength) { |
shintamainjp | 9:dcfdac59ef74 | 56 | LOCK(); |
jinyoung_KIL | 12:96209c979a7f | 57 | |
shintamainjp | 4:2304646f6ff5 | 58 | if (bitlength < data.bitcount) { |
shintamainjp | 9:dcfdac59ef74 | 59 | UNLOCK(); |
shintamainjp | 0:ec264f4ce158 | 60 | return -1; |
shintamainjp | 0:ec264f4ce158 | 61 | } |
jinyoung_KIL | 12:96209c979a7f | 62 | |
shintamainjp | 9:dcfdac59ef74 | 63 | const int nbits = data.bitcount; |
shintamainjp | 6:e57504fc802e | 64 | const int nbytes = data.bitcount / 8 + (((data.bitcount % 8) != 0) ? 1 : 0); |
shintamainjp | 0:ec264f4ce158 | 65 | *format = data.format; |
shintamainjp | 5:e158c85c55ff | 66 | for (int i = 0; i < nbytes; i++) { |
shintamainjp | 0:ec264f4ce158 | 67 | buf[i] = data.buffer[i]; |
shintamainjp | 0:ec264f4ce158 | 68 | } |
jinyoung_KIL | 12:96209c979a7f | 69 | |
jinyoung_KIL | 12:96209c979a7f | 70 | move(buf); |
shintamainjp | 0:ec264f4ce158 | 71 | init_state(); |
jinyoung_KIL | 12:96209c979a7f | 72 | |
shintamainjp | 9:dcfdac59ef74 | 73 | UNLOCK(); |
shintamainjp | 9:dcfdac59ef74 | 74 | return nbits; |
shintamainjp | 0:ec264f4ce158 | 75 | } |
jinyoung_KIL | 12:96209c979a7f | 76 | |
jinyoung_KIL | 12:96209c979a7f | 77 | void ReceiverIR::move(uint8_t *buf){ |
jinyoung_KIL | 12:96209c979a7f | 78 | char buffer[64]; |
jinyoung_KIL | 12:96209c979a7f | 79 | sprintf(buffer, "%02X%02X%02X%02X", buf[0], buf[1], buf[2], buf[3]); |
jinyoung_KIL | 12:96209c979a7f | 80 | //start |
jinyoung_KIL | 12:96209c979a7f | 81 | // if(!strncmp(buffer, "00FF09F6",8)){ |
jinyoung_KIL | 12:96209c979a7f | 82 | // //pc.printf("forward!\r\n"); |
jinyoung_KIL | 12:96209c979a7f | 83 | // start = 1; |
jinyoung_KIL | 12:96209c979a7f | 84 | // //forward(); |
jinyoung_KIL | 12:96209c979a7f | 85 | // } |
jinyoung_KIL | 12:96209c979a7f | 86 | // forward |
jinyoung_KIL | 12:96209c979a7f | 87 | if(!strncmp(buffer, "00FF18E7",8)){ |
jinyoung_KIL | 12:96209c979a7f | 88 | //pc.printf("forward!\r\n"); |
jinyoung_KIL | 12:96209c979a7f | 89 | forward(); |
jinyoung_KIL | 12:96209c979a7f | 90 | } |
jinyoung_KIL | 12:96209c979a7f | 91 | // back |
jinyoung_KIL | 12:96209c979a7f | 92 | if(!strncmp(buffer, "00FF52AD",8)){ |
jinyoung_KIL | 12:96209c979a7f | 93 | //pc.printf("back!\r\n"); |
jinyoung_KIL | 12:96209c979a7f | 94 | backward(); |
jinyoung_KIL | 12:96209c979a7f | 95 | } |
jinyoung_KIL | 12:96209c979a7f | 96 | // left |
jinyoung_KIL | 12:96209c979a7f | 97 | if(!strncmp(buffer, "00FF08F7",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 98 | //pc.printf("left!\r\n"); |
jinyoung_KIL | 13:5e445169cf83 | 99 | left(); |
jinyoung_KIL | 12:96209c979a7f | 100 | } |
jinyoung_KIL | 12:96209c979a7f | 101 | // right |
jinyoung_KIL | 12:96209c979a7f | 102 | if(!strncmp(buffer, "00FF5AA5",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 103 | //pc.printf("right!\r\n"); |
jinyoung_KIL | 13:5e445169cf83 | 104 | right(); |
jinyoung_KIL | 12:96209c979a7f | 105 | } |
jinyoung_KIL | 12:96209c979a7f | 106 | // stop |
jinyoung_KIL | 12:96209c979a7f | 107 | if(!strncmp(buffer, "00FF0CF3",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 108 | speedup_l(); |
jinyoung_KIL | 12:96209c979a7f | 109 | } |
jinyoung_KIL | 12:96209c979a7f | 110 | if(!strncmp(buffer, "00FF5EA1",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 111 | speedup_r(); |
jinyoung_KIL | 12:96209c979a7f | 112 | } |
jinyoung_KIL | 12:96209c979a7f | 113 | if(!strncmp(buffer, "00FF42BD",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 114 | speeddown_l(); |
jinyoung_KIL | 12:96209c979a7f | 115 | } |
jinyoung_KIL | 12:96209c979a7f | 116 | if(!strncmp(buffer, "00FF4AB5",8)){ |
jinyoung_KIL | 13:5e445169cf83 | 117 | speeddown_r(); |
jinyoung_KIL | 12:96209c979a7f | 118 | } |
jinyoung_KIL | 12:96209c979a7f | 119 | if(!strncmp(buffer, "00FF1CE3",8)){ |
jinyoung_KIL | 12:96209c979a7f | 120 | stop(); |
jinyoung_KIL | 13:5e445169cf83 | 121 | } |
jinyoung_KIL | 13:5e445169cf83 | 122 | if(!strncmp(buffer, "00FF45BA", 8)){ |
jinyoung_KIL | 13:5e445169cf83 | 123 | cal_start = 1; |
jinyoung_KIL | 13:5e445169cf83 | 124 | } |
jinyoung_KIL | 13:5e445169cf83 | 125 | if(!strncmp(buffer, "00FF47B8", 8)){ |
jinyoung_KIL | 13:5e445169cf83 | 126 | cal_stop = 1; |
Jeonghoon | 20:bbedc231c6a9 | 127 | } |
Jeonghoon | 20:bbedc231c6a9 | 128 | if(!strncmp(buffer, "00FF44BB", 8)){ |
Jeonghoon | 20:bbedc231c6a9 | 129 | max -= 5; |
Jeonghoon | 21:f963ccdb48d1 | 130 | |
Jeonghoon | 20:bbedc231c6a9 | 131 | //method2 |
Jeonghoon | 20:bbedc231c6a9 | 132 | // base_spl -= 0.01; |
Jeonghoon | 20:bbedc231c6a9 | 133 | // base_spr = base_spl - 0.005; |
Jeonghoon | 20:bbedc231c6a9 | 134 | // |
Jeonghoon | 20:bbedc231c6a9 | 135 | // if(base_spr < 0 || base_spl < 0){ |
Jeonghoon | 20:bbedc231c6a9 | 136 | // base_spr = 0; |
Jeonghoon | 20:bbedc231c6a9 | 137 | // base_spl = 0; |
Jeonghoon | 20:bbedc231c6a9 | 138 | // } |
Jeonghoon | 20:bbedc231c6a9 | 139 | } |
Jeonghoon | 20:bbedc231c6a9 | 140 | if(!strncmp(buffer, "00FF40BF", 8)){ |
Jeonghoon | 20:bbedc231c6a9 | 141 | max += 5; |
Jeonghoon | 21:f963ccdb48d1 | 142 | |
Jeonghoon | 20:bbedc231c6a9 | 143 | //method2 |
Jeonghoon | 20:bbedc231c6a9 | 144 | // base_spl += 0.01; |
Jeonghoon | 20:bbedc231c6a9 | 145 | // base_spr = base_spl - 0.005; |
Jeonghoon | 20:bbedc231c6a9 | 146 | // if(base_spr < 0){ |
Jeonghoon | 20:bbedc231c6a9 | 147 | // base_spr = 0; |
Jeonghoon | 20:bbedc231c6a9 | 148 | // } |
Jeonghoon | 20:bbedc231c6a9 | 149 | } |
Jeonghoon | 20:bbedc231c6a9 | 150 | if(!strncmp(buffer, "00FF07F8", 8)){ |
Jeonghoon | 22:3e732988bf3f | 151 | s_left_turn(); |
Jeonghoon | 20:bbedc231c6a9 | 152 | } |
Jeonghoon | 20:bbedc231c6a9 | 153 | if(!strncmp(buffer, "00FF15EA", 8)){ |
Jeonghoon | 22:3e732988bf3f | 154 | s_right_turn(); |
Jeonghoon | 20:bbedc231c6a9 | 155 | } |
Jeonghoon | 20:bbedc231c6a9 | 156 | if(!strncmp(buffer, "00FF19E6", 8)){ |
Jeonghoon | 22:3e732988bf3f | 157 | left_turn(); |
Jeonghoon | 22:3e732988bf3f | 158 | wait_ms(300); |
Jeonghoon | 22:3e732988bf3f | 159 | stop(); |
Jeonghoon | 20:bbedc231c6a9 | 160 | } |
Jeonghoon | 20:bbedc231c6a9 | 161 | if(!strncmp(buffer, "00FF0DF2", 8)){ |
Jeonghoon | 22:3e732988bf3f | 162 | right_turn(); |
Jeonghoon | 22:3e732988bf3f | 163 | wait_ms(300); |
Jeonghoon | 22:3e732988bf3f | 164 | stop(); |
Jeonghoon | 20:bbedc231c6a9 | 165 | } |
jinyoung_KIL | 12:96209c979a7f | 166 | } |
Jeonghoon | 22:3e732988bf3f | 167 | |
Jeonghoon | 22:3e732988bf3f | 168 | void ReceiverIR::s_left_turn(void){ |
Jeonghoon | 22:3e732988bf3f | 169 | pwma = 0.13; |
Jeonghoon | 22:3e732988bf3f | 170 | pwmb = 0.11; |
Jeonghoon | 22:3e732988bf3f | 171 | |
Jeonghoon | 22:3e732988bf3f | 172 | ain0 = 1; |
Jeonghoon | 22:3e732988bf3f | 173 | ain1 = 0; |
Jeonghoon | 22:3e732988bf3f | 174 | |
Jeonghoon | 22:3e732988bf3f | 175 | bin0 = 0; |
Jeonghoon | 22:3e732988bf3f | 176 | bin1 = 0; |
Jeonghoon | 22:3e732988bf3f | 177 | } |
Jeonghoon | 22:3e732988bf3f | 178 | |
Jeonghoon | 22:3e732988bf3f | 179 | void ReceiverIR::s_right_turn(void){ |
Jeonghoon | 22:3e732988bf3f | 180 | pwma = 0.11; |
Jeonghoon | 22:3e732988bf3f | 181 | pwmb = 0.13; |
Jeonghoon | 22:3e732988bf3f | 182 | |
Jeonghoon | 22:3e732988bf3f | 183 | ain0 = 0; |
Jeonghoon | 22:3e732988bf3f | 184 | ain1 = 0; |
Jeonghoon | 22:3e732988bf3f | 185 | |
Jeonghoon | 22:3e732988bf3f | 186 | bin0 = 1; |
Jeonghoon | 22:3e732988bf3f | 187 | bin1 = 0; |
Jeonghoon | 22:3e732988bf3f | 188 | } |
Jeonghoon | 22:3e732988bf3f | 189 | |
Jeonghoon | 22:3e732988bf3f | 190 | void ReceiverIR::left_turn(void){ |
Jeonghoon | 22:3e732988bf3f | 191 | pwma = 0.10; |
Jeonghoon | 22:3e732988bf3f | 192 | pwmb = 0.10; |
Jeonghoon | 22:3e732988bf3f | 193 | |
Jeonghoon | 22:3e732988bf3f | 194 | ain0 = 1; |
Jeonghoon | 22:3e732988bf3f | 195 | ain1 = 0; |
Jeonghoon | 22:3e732988bf3f | 196 | |
Jeonghoon | 22:3e732988bf3f | 197 | bin0 = 0; |
Jeonghoon | 22:3e732988bf3f | 198 | bin1 = 1; |
Jeonghoon | 22:3e732988bf3f | 199 | } |
Jeonghoon | 22:3e732988bf3f | 200 | |
Jeonghoon | 22:3e732988bf3f | 201 | void ReceiverIR::right_turn(void){ |
Jeonghoon | 22:3e732988bf3f | 202 | pwma = 0.10; |
Jeonghoon | 22:3e732988bf3f | 203 | pwmb = 0.10; |
Jeonghoon | 22:3e732988bf3f | 204 | |
Jeonghoon | 22:3e732988bf3f | 205 | ain0 = 0; |
Jeonghoon | 22:3e732988bf3f | 206 | ain1 = 1; |
Jeonghoon | 22:3e732988bf3f | 207 | |
Jeonghoon | 22:3e732988bf3f | 208 | bin0 = 1; |
Jeonghoon | 22:3e732988bf3f | 209 | bin1 = 0; |
Jeonghoon | 22:3e732988bf3f | 210 | } |
Jeonghoon | 17:6d2532146627 | 211 | |
jinyoung_KIL | 13:5e445169cf83 | 212 | void ReceiverIR::speedup_l(void){ |
jinyoung_KIL | 13:5e445169cf83 | 213 | //Speed_L += 0.0005; |
jinyoung_KIL | 13:5e445169cf83 | 214 | // if(Speed_L > 0.5){ |
jinyoung_KIL | 13:5e445169cf83 | 215 | // Speed_L = 0.5; |
jinyoung_KIL | 13:5e445169cf83 | 216 | // } |
jinyoung_KIL | 13:5e445169cf83 | 217 | // pwma = Speed_L; |
Jeonghoon | 20:bbedc231c6a9 | 218 | kp += 0.01; |
jinyoung_KIL | 12:96209c979a7f | 219 | } |
jinyoung_KIL | 13:5e445169cf83 | 220 | void ReceiverIR::speeddown_l(void){ |
jinyoung_KIL | 13:5e445169cf83 | 221 | //Speed_L -= 0.0005; |
jinyoung_KIL | 13:5e445169cf83 | 222 | // if(Speed_L < 0){ |
jinyoung_KIL | 13:5e445169cf83 | 223 | // Speed_L = 0; |
jinyoung_KIL | 13:5e445169cf83 | 224 | // } |
jinyoung_KIL | 13:5e445169cf83 | 225 | // pwma = Speed_L; |
Jeonghoon | 20:bbedc231c6a9 | 226 | kp -= 0.01; |
jinyoung_KIL | 12:96209c979a7f | 227 | } |
jinyoung_KIL | 13:5e445169cf83 | 228 | void ReceiverIR::speedup_r(void){ |
jinyoung_KIL | 13:5e445169cf83 | 229 | // Speed_R += 0.0005; |
jinyoung_KIL | 13:5e445169cf83 | 230 | // if(Speed_R > 0.5){ |
jinyoung_KIL | 13:5e445169cf83 | 231 | // Speed_R = 0.5; |
jinyoung_KIL | 13:5e445169cf83 | 232 | // } |
jinyoung_KIL | 13:5e445169cf83 | 233 | // pwmb = Speed_R; |
Jeonghoon | 17:6d2532146627 | 234 | |
Jeonghoon | 14:2fafd2e7dea8 | 235 | //max += 5; |
Jeonghoon | 20:bbedc231c6a9 | 236 | kd += 0.01; |
jinyoung_KIL | 12:96209c979a7f | 237 | } |
jinyoung_KIL | 13:5e445169cf83 | 238 | void ReceiverIR::speeddown_r(void){ |
jinyoung_KIL | 13:5e445169cf83 | 239 | // Speed_R -= 0.0005; |
jinyoung_KIL | 13:5e445169cf83 | 240 | // if(Speed_R < 0){ |
jinyoung_KIL | 13:5e445169cf83 | 241 | // Speed_R = 0; |
jinyoung_KIL | 13:5e445169cf83 | 242 | // } |
jinyoung_KIL | 13:5e445169cf83 | 243 | // pwmb = Speed_R; |
Jeonghoon | 14:2fafd2e7dea8 | 244 | |
Jeonghoon | 20:bbedc231c6a9 | 245 | // max -= 5; |
Jeonghoon | 20:bbedc231c6a9 | 246 | kd -= 0.01; |
jinyoung_KIL | 12:96209c979a7f | 247 | } |
Jeonghoon | 17:6d2532146627 | 248 | |
jinyoung_KIL | 12:96209c979a7f | 249 | void ReceiverIR::speed_l(float sp_l){ |
jinyoung_KIL | 12:96209c979a7f | 250 | Speed_L = sp_l; |
jinyoung_KIL | 13:5e445169cf83 | 251 | if(Speed_L > 0.6){ |
jinyoung_KIL | 13:5e445169cf83 | 252 | Speed_L = 0.6; |
jinyoung_KIL | 13:5e445169cf83 | 253 | } |
jinyoung_KIL | 13:5e445169cf83 | 254 | pwma = Speed_L; |
jinyoung_KIL | 12:96209c979a7f | 255 | } |
Jeonghoon | 17:6d2532146627 | 256 | |
jinyoung_KIL | 12:96209c979a7f | 257 | void ReceiverIR::speed_r(float sp_r){ |
jinyoung_KIL | 12:96209c979a7f | 258 | Speed_R = sp_r; |
jinyoung_KIL | 13:5e445169cf83 | 259 | if(Speed_R > 0.6){ |
jinyoung_KIL | 13:5e445169cf83 | 260 | Speed_R = 0.6; |
jinyoung_KIL | 13:5e445169cf83 | 261 | } |
jinyoung_KIL | 13:5e445169cf83 | 262 | pwmb = Speed_R; |
jinyoung_KIL | 12:96209c979a7f | 263 | } |
Jeonghoon | 17:6d2532146627 | 264 | |
Jeonghoon | 16:3922b10d4606 | 265 | void ReceiverIR:: forward(void){ |
Jeonghoon | 22:3e732988bf3f | 266 | pwma = 0.105; |
Jeonghoon | 22:3e732988bf3f | 267 | pwmb = 0.1; |
Jeonghoon | 17:6d2532146627 | 268 | |
jinyoung_KIL | 12:96209c979a7f | 269 | ain0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 270 | ain1 = 0; |
Jeonghoon | 17:6d2532146627 | 271 | |
jinyoung_KIL | 12:96209c979a7f | 272 | bin0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 273 | bin1 = 0; |
jinyoung_KIL | 12:96209c979a7f | 274 | } |
jinyoung_KIL | 12:96209c979a7f | 275 | void ReceiverIR::backward(void){ |
jinyoung_KIL | 12:96209c979a7f | 276 | |
Jeonghoon | 22:3e732988bf3f | 277 | pwma = 0.105; |
Jeonghoon | 22:3e732988bf3f | 278 | pwmb = 0.1; |
Jeonghoon | 22:3e732988bf3f | 279 | |
jinyoung_KIL | 12:96209c979a7f | 280 | ain0 = 0; |
jinyoung_KIL | 12:96209c979a7f | 281 | ain1 = 1; |
Jeonghoon | 17:6d2532146627 | 282 | |
jinyoung_KIL | 12:96209c979a7f | 283 | bin0 = 0; |
jinyoung_KIL | 12:96209c979a7f | 284 | bin1 = 1; |
jinyoung_KIL | 12:96209c979a7f | 285 | } |
Jeonghoon | 17:6d2532146627 | 286 | |
jinyoung_KIL | 12:96209c979a7f | 287 | void ReceiverIR::left(void){ |
Jeonghoon | 22:3e732988bf3f | 288 | pwma = 0.105*0.8; |
Jeonghoon | 22:3e732988bf3f | 289 | pwmb = 0.1; |
Jeonghoon | 17:6d2532146627 | 290 | |
jinyoung_KIL | 12:96209c979a7f | 291 | ain0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 292 | ain1 = 0; |
Jeonghoon | 17:6d2532146627 | 293 | |
jinyoung_KIL | 12:96209c979a7f | 294 | bin0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 295 | bin1 = 0; |
jinyoung_KIL | 12:96209c979a7f | 296 | } |
jinyoung_KIL | 12:96209c979a7f | 297 | void ReceiverIR::right(void){ |
Jeonghoon | 22:3e732988bf3f | 298 | pwma = 0.105; |
Jeonghoon | 22:3e732988bf3f | 299 | pwmb = 0.1*0.85; |
Jeonghoon | 17:6d2532146627 | 300 | |
jinyoung_KIL | 12:96209c979a7f | 301 | ain0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 302 | ain1 = 0; |
Jeonghoon | 17:6d2532146627 | 303 | |
jinyoung_KIL | 12:96209c979a7f | 304 | bin0 = 1; |
jinyoung_KIL | 12:96209c979a7f | 305 | bin1 = 0; |
jinyoung_KIL | 12:96209c979a7f | 306 | } |
jinyoung_KIL | 12:96209c979a7f | 307 | void ReceiverIR::stop(void){ |
jinyoung_KIL | 12:96209c979a7f | 308 | |
jinyoung_KIL | 12:96209c979a7f | 309 | pwma = 0; |
jinyoung_KIL | 12:96209c979a7f | 310 | pwmb = 0; |
Jeonghoon | 17:6d2532146627 | 311 | |
jinyoung_KIL | 12:96209c979a7f | 312 | ain0 = 0; |
jinyoung_KIL | 12:96209c979a7f | 313 | ain1 = 0; |
Jeonghoon | 17:6d2532146627 | 314 | |
jinyoung_KIL | 12:96209c979a7f | 315 | bin0 = 0; |
jinyoung_KIL | 12:96209c979a7f | 316 | bin1 = 0; |
jinyoung_KIL | 12:96209c979a7f | 317 | } |
Jeonghoon | 17:6d2532146627 | 318 | |
shintamainjp | 0:ec264f4ce158 | 319 | void ReceiverIR::init_state(void) { |
shintamainjp | 0:ec264f4ce158 | 320 | work.c1 = -1; |
shintamainjp | 0:ec264f4ce158 | 321 | work.c2 = -1; |
shintamainjp | 0:ec264f4ce158 | 322 | work.c3 = -1; |
shintamainjp | 0:ec264f4ce158 | 323 | work.d1 = -1; |
shintamainjp | 0:ec264f4ce158 | 324 | work.d2 = -1; |
shintamainjp | 9:dcfdac59ef74 | 325 | work.state = Idle; |
shintamainjp | 0:ec264f4ce158 | 326 | data.format = RemoteIR::UNKNOWN; |
shintamainjp | 0:ec264f4ce158 | 327 | data.bitcount = 0; |
shintamainjp | 0:ec264f4ce158 | 328 | timer.stop(); |
shintamainjp | 0:ec264f4ce158 | 329 | timer.reset(); |
shintamainjp | 0:ec264f4ce158 | 330 | for (int i = 0; i < sizeof(data.buffer); i++) { |
shintamainjp | 0:ec264f4ce158 | 331 | data.buffer[i] = 0; |
shintamainjp | 0:ec264f4ce158 | 332 | } |
shintamainjp | 0:ec264f4ce158 | 333 | } |
jinyoung_KIL | 12:96209c979a7f | 334 | |
shintamainjp | 0:ec264f4ce158 | 335 | void ReceiverIR::isr_wdt(void) { |
shintamainjp | 9:dcfdac59ef74 | 336 | LOCK(); |
shintamainjp | 0:ec264f4ce158 | 337 | static int cnt = 0; |
shintamainjp | 9:dcfdac59ef74 | 338 | if ((Idle != work.state) || ((0 <= work.c1) || (0 <= work.c2) || (0 <= work.c3) || (0 <= work.d1) || (0 <= work.d2))) { |
shintamainjp | 0:ec264f4ce158 | 339 | cnt++; |
shintamainjp | 0:ec264f4ce158 | 340 | if (cnt > 50) { |
shintamainjp | 0:ec264f4ce158 | 341 | init_state(); |
shintamainjp | 0:ec264f4ce158 | 342 | cnt = 0; |
shintamainjp | 0:ec264f4ce158 | 343 | } |
shintamainjp | 0:ec264f4ce158 | 344 | } else { |
shintamainjp | 0:ec264f4ce158 | 345 | cnt = 0; |
shintamainjp | 0:ec264f4ce158 | 346 | } |
shintamainjp | 9:dcfdac59ef74 | 347 | UNLOCK(); |
shintamainjp | 0:ec264f4ce158 | 348 | } |
jinyoung_KIL | 12:96209c979a7f | 349 | |
shintamainjp | 0:ec264f4ce158 | 350 | void ReceiverIR::isr_fall(void) { |
shintamainjp | 9:dcfdac59ef74 | 351 | LOCK(); |
shintamainjp | 9:dcfdac59ef74 | 352 | switch (work.state) { |
shintamainjp | 0:ec264f4ce158 | 353 | case Idle: |
shintamainjp | 0:ec264f4ce158 | 354 | if (work.c1 < 0) { |
shintamainjp | 0:ec264f4ce158 | 355 | timer.start(); |
shintamainjp | 0:ec264f4ce158 | 356 | work.c1 = timer.read_us(); |
shintamainjp | 0:ec264f4ce158 | 357 | } else { |
shintamainjp | 0:ec264f4ce158 | 358 | work.c3 = timer.read_us(); |
shintamainjp | 0:ec264f4ce158 | 359 | int a = work.c2 - work.c1; |
shintamainjp | 0:ec264f4ce158 | 360 | int b = work.c3 - work.c2; |
shintamainjp | 11:268cc2ab63bd | 361 | if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 8)) { |
shintamainjp | 0:ec264f4ce158 | 362 | /* |
shintamainjp | 0:ec264f4ce158 | 363 | * NEC. |
shintamainjp | 0:ec264f4ce158 | 364 | */ |
shintamainjp | 0:ec264f4ce158 | 365 | data.format = RemoteIR::NEC; |
shintamainjp | 9:dcfdac59ef74 | 366 | work.state = Receiving; |
shintamainjp | 0:ec264f4ce158 | 367 | data.bitcount = 0; |
shintamainjp | 11:268cc2ab63bd | 368 | } else if (InRange(a, RemoteIR::TUS_NEC * 16) && InRange(b, RemoteIR::TUS_NEC * 4)) { |
shintamainjp | 0:ec264f4ce158 | 369 | /* |
shintamainjp | 0:ec264f4ce158 | 370 | * NEC Repeat. |
shintamainjp | 0:ec264f4ce158 | 371 | */ |
shintamainjp | 3:dfed23b157e6 | 372 | data.format = RemoteIR::NEC_REPEAT; |
shintamainjp | 9:dcfdac59ef74 | 373 | work.state = Received; |
shintamainjp | 0:ec264f4ce158 | 374 | data.bitcount = 0; |
shintamainjp | 3:dfed23b157e6 | 375 | work.c1 = -1; |
shintamainjp | 3:dfed23b157e6 | 376 | work.c2 = -1; |
shintamainjp | 3:dfed23b157e6 | 377 | work.c3 = -1; |
shintamainjp | 3:dfed23b157e6 | 378 | work.d1 = -1; |
shintamainjp | 3:dfed23b157e6 | 379 | work.d2 = -1; |
shintamainjp | 0:ec264f4ce158 | 380 | } else { |
shintamainjp | 0:ec264f4ce158 | 381 | init_state(); |
shintamainjp | 0:ec264f4ce158 | 382 | } |
shintamainjp | 0:ec264f4ce158 | 383 | } |
shintamainjp | 0:ec264f4ce158 | 384 | break; |
shintamainjp | 0:ec264f4ce158 | 385 | case Receiving: |
shintamainjp | 0:ec264f4ce158 | 386 | if (RemoteIR::NEC == data.format) { |
shintamainjp | 0:ec264f4ce158 | 387 | work.d2 = timer.read_us(); |
shintamainjp | 0:ec264f4ce158 | 388 | int a = work.d2 - work.d1; |
shintamainjp | 11:268cc2ab63bd | 389 | if (InRange(a, RemoteIR::TUS_NEC * 3)) { |
shintamainjp | 0:ec264f4ce158 | 390 | data.buffer[data.bitcount / 8] |= (1 << (data.bitcount % 8)); |
shintamainjp | 11:268cc2ab63bd | 391 | } else if (InRange(a, RemoteIR::TUS_NEC * 1)) { |
shintamainjp | 0:ec264f4ce158 | 392 | data.buffer[data.bitcount / 8] &= ~(1 << (data.bitcount % 8)); |
shintamainjp | 0:ec264f4ce158 | 393 | } |
shintamainjp | 0:ec264f4ce158 | 394 | data.bitcount++; |
shintamainjp | 0:ec264f4ce158 | 395 | /* |
shintamainjp | 0:ec264f4ce158 | 396 | * Set timeout for tail detection automatically. |
shintamainjp | 0:ec264f4ce158 | 397 | */ |
shintamainjp | 0:ec264f4ce158 | 398 | timeout.detach(); |
shintamainjp | 11:268cc2ab63bd | 399 | timeout.attach_us(this, &ReceiverIR::isr_timeout, RemoteIR::TUS_NEC * 5); |
shintamainjp | 0:ec264f4ce158 | 400 | } |
shintamainjp | 0:ec264f4ce158 | 401 | break; |
shintamainjp | 0:ec264f4ce158 | 402 | case Received: |
shintamainjp | 0:ec264f4ce158 | 403 | break; |
shintamainjp | 0:ec264f4ce158 | 404 | default: |
shintamainjp | 0:ec264f4ce158 | 405 | break; |
shintamainjp | 0:ec264f4ce158 | 406 | } |
shintamainjp | 9:dcfdac59ef74 | 407 | UNLOCK(); |
shintamainjp | 0:ec264f4ce158 | 408 | } |
jinyoung_KIL | 12:96209c979a7f | 409 | |
shintamainjp | 0:ec264f4ce158 | 410 | void ReceiverIR::isr_rise(void) { |
shintamainjp | 9:dcfdac59ef74 | 411 | LOCK(); |
shintamainjp | 9:dcfdac59ef74 | 412 | switch (work.state) { |
shintamainjp | 0:ec264f4ce158 | 413 | case Idle: |
shintamainjp | 0:ec264f4ce158 | 414 | if (0 <= work.c1) { |
shintamainjp | 0:ec264f4ce158 | 415 | work.c2 = timer.read_us(); |
shintamainjp | 0:ec264f4ce158 | 416 | int a = work.c2 - work.c1; |
shintamainjp | 0:ec264f4ce158 | 417 | } else { |
shintamainjp | 0:ec264f4ce158 | 418 | init_state(); |
shintamainjp | 0:ec264f4ce158 | 419 | } |
shintamainjp | 0:ec264f4ce158 | 420 | break; |
shintamainjp | 0:ec264f4ce158 | 421 | case Receiving: |
shintamainjp | 0:ec264f4ce158 | 422 | if (RemoteIR::NEC == data.format) { |
shintamainjp | 0:ec264f4ce158 | 423 | work.d1 = timer.read_us(); |
jinyoung_KIL | 12:96209c979a7f | 424 | } |
shintamainjp | 0:ec264f4ce158 | 425 | break; |
shintamainjp | 0:ec264f4ce158 | 426 | case Received: |
shintamainjp | 0:ec264f4ce158 | 427 | break; |
shintamainjp | 0:ec264f4ce158 | 428 | default: |
shintamainjp | 0:ec264f4ce158 | 429 | break; |
shintamainjp | 0:ec264f4ce158 | 430 | } |
shintamainjp | 9:dcfdac59ef74 | 431 | UNLOCK(); |
shintamainjp | 0:ec264f4ce158 | 432 | } |
jinyoung_KIL | 12:96209c979a7f | 433 | |
shintamainjp | 0:ec264f4ce158 | 434 | void ReceiverIR::isr_timeout(void) { |
shintamainjp | 9:dcfdac59ef74 | 435 | LOCK(); |
Jeonghoon | 17:6d2532146627 | 436 | |
shintamainjp | 9:dcfdac59ef74 | 437 | if (work.state == Receiving) { |
shintamainjp | 9:dcfdac59ef74 | 438 | work.state = Received; |
shintamainjp | 0:ec264f4ce158 | 439 | work.c1 = -1; |
shintamainjp | 0:ec264f4ce158 | 440 | work.c2 = -1; |
shintamainjp | 0:ec264f4ce158 | 441 | work.c3 = -1; |
shintamainjp | 0:ec264f4ce158 | 442 | work.d1 = -1; |
shintamainjp | 0:ec264f4ce158 | 443 | work.d2 = -1; |
shintamainjp | 0:ec264f4ce158 | 444 | } |
shintamainjp | 9:dcfdac59ef74 | 445 | UNLOCK(); |
Jeonghoon | 17:6d2532146627 | 446 | } |