68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
// ------------------- Пины датчиков -------------------
|
|
const int trig1 = 4;
|
|
const int echo1 = 3;
|
|
|
|
const int trig2 = 5;
|
|
const int echo2 = 6;
|
|
|
|
// ------------------- Пин MOSFET -------------------
|
|
const int ledPin = 2; // твоя лента сидит на D2
|
|
|
|
// ------------------- Настройки -------------------
|
|
const int thresholdDistance = 40; // см: меньше = объект рядом
|
|
const unsigned long lightTime = 1000; // мс: сколько светить после срабатывания
|
|
|
|
bool triggered = false;
|
|
unsigned long triggerTime = 0;
|
|
|
|
// -------------------------------------------------
|
|
long readDistance(int trigPin, int echoPin) {
|
|
digitalWrite(trigPin, LOW);
|
|
delayMicroseconds(2);
|
|
|
|
digitalWrite(trigPin, HIGH);
|
|
delayMicroseconds(10);
|
|
digitalWrite(trigPin, LOW);
|
|
|
|
long duration = pulseIn(echoPin, HIGH, 30000);
|
|
if (duration == 0) return 999; // нет эха -> далеко
|
|
|
|
long distance = duration * 0.034 / 2;
|
|
return distance;
|
|
}
|
|
|
|
// -------------------------------------------------
|
|
void setup() {
|
|
pinMode(trig1, OUTPUT);
|
|
pinMode(echo1, INPUT);
|
|
|
|
pinMode(trig2, OUTPUT);
|
|
pinMode(echo2, INPUT);
|
|
|
|
pinMode(ledPin, OUTPUT);
|
|
digitalWrite(ledPin, LOW);
|
|
|
|
Serial.begin(9600);
|
|
}
|
|
|
|
// -------------------------------------------------
|
|
void loop() {
|
|
long d1 = readDistance(trig1, echo1);
|
|
long d2 = readDistance(trig2, echo2);
|
|
|
|
bool eventNow = (d1 < thresholdDistance) || (d2 < thresholdDistance);
|
|
|
|
if (eventNow && !triggered) {
|
|
triggered = true;
|
|
triggerTime = millis();
|
|
digitalWrite(ledPin, HIGH); // включить ленту
|
|
}
|
|
|
|
if (triggered && millis() - triggerTime >= lightTime) {
|
|
triggered = false;
|
|
digitalWrite(ledPin, LOW); // выключить ленту
|
|
}
|
|
|
|
delay(20); // ультразвук иначе не успеет
|
|
}
|