「TinyIRReceiver」ライブラリ使用でなぜか信号を取りこぼす件(
こちら)
(←これは
ダメな例)
原因は「TinyIRReceiverData.justWritten = false;」の位置でした。
これは「次の信号の受取OK」という動作指定に使う命令だった。
標準「IRremote.h」の「receiver.resume(); 」相当(同じ命令にしろよ)
LEDの制御コードの終わった後でこの記述を書かないと、リモコン連打された場合、次の信号処理に入りたいが入れない状態になり結果信号を取り逃す。
あほですね。
ATtiny85はメモリが小さいからこのライブラリでないと
動かんのよ。
これでダイソー電車制御も何とかなりそう。
調子こいて以前モーター暴走してた回路を組み直した。
まずはArduinoで。これはちゃんと動いってるぽかった。
続いてATTiny85に置き換え。
初めはちゃんと信号を受けてたが、しばらくあれこれやってるとまた暴走を始めた。
は???
M基盤の暴走か????
信号システムもイマイチ妙な反応をする。
ちっくしょう
もうやめた。
=======================
/*
2024/4/16
ATtiny85 にIRセンサーを付けて、Tiny:bitリモコンの
IRはPB2に接続
*/
#include "TinyIRReceiver.hpp" // include the code
//#define IR_RECEIVE_PIN PB2
#define RED PB0
#define YELLOW PB3
#define GREEN PB4
//#define ENABLE_LED_FEEDBACK false tinyでは無効でした
void setup() {
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
//pinMode(IR_RECEIVE_PIN, INPUT); // 記述不要
for (int i=0; i<4; i++){
digitalWrite(RED, HIGH); digitalWrite(YELLOW, HIGH); digitalWrite(GREEN, HIGH);
delay(300);
digitalWrite(RED, LOW); digitalWrite(YELLOW, LOW); digitalWrite(GREEN, LOW);
delay(300);
}
delay(3000);
if (!initPCIInterruptForTinyReceiver()) {
digitalWrite(RED, HIGH); digitalWrite(YELLOW, LOW); digitalWrite(GREEN, LOW);
if(true){
// 無限ループ
}
}
}
int cmd = 0xFF;
void loop() {
if (TinyIRReceiverData.justWritten) {
cmd = TinyIRReceiverData.Command;
if (cmd == 0x00){
digitalWrite( RED, HIGH );
digitalWrite( YELLOW, HIGH);
digitalWrite( GREEN, HIGH);
} else
if (cmd == 0x02){
digitalWrite( RED, LOW );
digitalWrite( YELLOW, LOW);
digitalWrite( GREEN, LOW);
} else
if (cmd == 0x10){
digitalWrite( RED, HIGH );
digitalWrite( YELLOW, LOW);
digitalWrite( GREEN, LOW);
} else
if (cmd == 0x11){
digitalWrite( RED, LOW );
digitalWrite( YELLOW, HIGH);
digitalWrite( GREEN, LOW);
} else
if (cmd == 0x12){
digitalWrite( RED, LOW );
digitalWrite( YELLOW, LOW);
digitalWrite( GREEN, HIGH);
} else{
digitalWrite(RED, LOW); digitalWrite(YELLOW, LOW); digitalWrite(GREEN, LOW);
}
TinyIRReceiverData.justWritten = false; // ここな!
}
}