Ультразвуковой датчик управления реле (помогите новичку)
- Войдите на сайт для отправки комментариев
Ср, 08/01/2014 - 16:04
Здравствуйте, сразу попрошу не пинать если что не так. Появилась необходимость в устройстве которое замыкало бы реле (на некоторое время) после того как перед датчиком на расстоянии 40 см находилось препятствие в течении 30сек скажем. Ультразвуковой датчик HC - SR04. Приблизительный скетч набросал (пока вместо реле светодиоды). Теперь вопрос. Подскажите как мне теперь описать счетчик который будет тикать секунды? И второй вопрос. Правильным ли путем я иду? Или нужно было делать по прерыванию?
#include "Ultrasonic.h"
int ledPin_1 = 13,
ledPin_2 = 2;
// Trig - 3, Echo - 4
Ultrasonic ultrasonic(3, 4);
void setup()
{
pinMode(ledPin_1, OUTPUT);
pinMode(ledPin_2, OUTPUT);
}
void loop()
{
float dist_cm = ultrasonic.Ranging(CM); // get distance
if (dist_cm < 40)
{
digitalWrite(ledPin_2, HIGH);
digitalWrite(ledPin_1, LOW);
}
else
{
digitalWrite(ledPin_1, HIGH);
digitalWrite(ledPin_2, LOW);
}
delay(100);
}
void loop() { float dist_cm = ultrasonic.Ranging(CM); // get distance static unsigned long start = 0; if (dist_cm < 40) { if(!start) start = millis(); } else { start = 0; digitalWrite(ledPin_1, HIGH); digitalWrite(ledPin_2, LOW); } if(start && (millis()-start > 30000)) { digitalWrite(ledPin_2, HIGH); digitalWrite(ledPin_1, LOW); } delay(100); }Спасибо огромное не знал что на ардуино это так просто. Только теперь при появлении препятствия реле срабатывает, а после исчезания не выключается. до тех пор пока кратковременно препятствие снова не появится. Возник вопрос Как теперь указать время на которое необходимо включать ?
не знал что на ардуино это так просто.
Так же просто будет где угодно, но небольшое количество строк не равно простота.
Как теперь указать время на которое необходимо включать ?
Только теперь при появлении препятствия реле срабатывает, а после исчезания не выключается. до тех пор пока кратковременно препятствие снова не появится.
void loop() { float dist_cm = ultrasonic.Ranging(CM); // get distance static unsigned long start = 0; static unsigned long on = 0; if (dist_cm < 40) { if(!start) start = millis(); } else { start = 0; on = 0; digitalWrite(ledPin_1, HIGH); digitalWrite(ledPin_2, LOW); } if(start && (millis()-start > 30000)) { if(!on) { on = millis(); digitalWrite(ledPin_2, HIGH); digitalWrite(ledPin_1, LOW); } if(on && (millis()-on > 5000)) { digitalWrite(ledPin_1, HIGH); digitalWrite(ledPin_2, LOW); } } delay(100); }