午後は代休を取ったので簡単な工作です。フォトリフレクタを使った非接触スイッチです。
まずまず想定していた動きになりました。
--21.06.27追記
回路図とスケッチです。無保証です。
//-----------------------------------------------------------------
// 21.06.26 naka
// フォトリフレクタを使った非接触スイッチ
//-----------------------------------------------------------------
#define PHOTO1 2
#define PHOTO2 3
#define LED_PIN 4
#define TIMELAG_MIN 6
#define TIMELAG_MAX 100
int stat;
void setup(){
// IOポート設定
pinMode(PHOTO1, INPUT);
pinMode(PHOTO2, INPUT);
pinMode(LED_PIN, OUTPUT);
// モニタLEDオフ
digitalWrite(LED_PIN, LOW);
stat = 0;
}
void loop(){
int time_1st,timelag;
int p1 = digitalRead(PHOTO1);
int p2 = digitalRead(PHOTO2);
int po;
if (p1+p2==1) { // どちらか一方のみactive
time_1st = millis();
while(1) {
if (p1==0) po = digitalRead(PHOTO2); // 他方のphoto refrector
else po = digitalRead(PHOTO1);
timelag = millis() - time_1st;
if (timelag > TIMELAG_MAX) // 時間差が大きいので無効
break;
else if (po==0) {
if (timelag < TIMELAG_MIN) // 時間差が小さいので無効
break;
if (p1==0) stat = 1; // オン
else stat = 0; // オフ
break;
}
}
while(digitalRead(PHOTO1)==0);
while(digitalRead(PHOTO2)==0);
}
if (stat==1) digitalWrite(LED_PIN, HIGH);
else digitalWrite(LED_PIN, LOW);
}
0 件のコメント:
コメントを投稿