午後は代休を取ったので簡単な工作です。フォトリフレクタを使った非接触スイッチです。
まずまず想定していた動きになりました。
--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 件のコメント:
コメントを投稿