Attiny412でNECフォーマットな赤外線リモコンを使ってみた。このマイコン小さいのにペリフェラルめっちゃついてるし面白い…
とりあえずArduinoのmegaTinyCoreを使ってjtag2updiな書き込み機で試してみた。UPDIは電源とグラウンドとUPDIのピンだけで書き込めるのですごく便利だ。
IRremoteライブラリはtinyAVR1に対応していなかったので、簡易的にメインループ内で実行できるような状態で確認してみた。
#define ir 2 void setup() { pinMode(ir, INPUT); Serial.begin(115200); Serial.println("megaTinyCore IR reciever"); } void loop() { unsigned long int sb, lt, ht; while(digitalRead(ir) == HIGH){;} sb = micros(); while(digitalRead(ir) == LOW){;} lt = micros() - sb; if(lt > 9000){ sb = micros(); while(digitalRead(ir) == HIGH){;} ht = micros() - sb; if(ht > 4500){ ir_decode(); } else if(ht > 2100){ Serial.println("---Repeat Code---"); } } } void ir_decode(){ int i; unsigned int custom; uint8_t data,data_inv; unsigned long int sb, len; i=0; while(1){ sb = micros(); while(digitalRead(ir) == LOW){;} while(digitalRead(ir) == HIGH){;} len = micros() - sb; if(i < 16){ if(len > 2000){ custom = custom << 1 | 1; } else { custom = custom << 1 | 0; } }else if(i < 24){ if(len > 2000){ data = data << 1 | 1; } else { data = data << 1 | 0; } }else if(i < 32){ if(len > 2000){ data_inv = data_inv << 1 | 1; } else { data_inv = data_inv << 1 | 0; } } i++; if(i >= 32){ break; } } if(data == uint8_t(~data_inv)){ Serial.print("Custom Code:0x"); Serial.println(custom,HEX); //Serial.println(data,BIN); Serial.print("Data Code:0x"); Serial.println(data,HEX); //Serial.println(data,BIN); } }
これで一応受信できてるっぽい。サンプルなのでシリアルポートで出力してるけど簡易的な用途だったらAttiny202でも行けるかもしれない。ちなみにこの状態で2237バイト。
シリアルなかったら202に収まるかも?
素晴らしい!
返信削除ありがとうございます!
削除