Официальный сайт компании Arduino по адресу arduino.cc
HC-SR04 и delay
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 30/09/2015 - 08:32
Здравствуйте , столкнулся с такой проблемой -в скетче для HC-SR04 есть задержка для коректной работы датчика
float dist_cm = ultrasonic.Ranging(CM);
delay(100);
и при необходимости постоянного мониторинга расстояния из за задержки ритмично срабатывает реле , хотя расстояние не меняется . Можно перед реле поставить реле с задержкой включения , но есть ли программный способ убрать это ?
Способ есть, скетч покажите.
Способ есть, скетч покажите.
#include "Ultrasonic.h"
int FAN = 7; // пин вытяжка
int Light = 8; // пин свет
long OnTime = 10000; // время работы вытяжки , мс
int ledState = LOW;
int pinButton = 2; // пин, вход от датчика движения
int Flag = 0;
unsigned long previousMillis = 0;
// sensor connected to:
// Trig - 3, Echo - 4
Ultrasonic ultrasonic(3,4);
void setup()
{
pinMode(FAN, OUTPUT);
pinMode(Light, OUTPUT);
digitalWrite(FAN, HIGH);
digitalWrite(Light, HIGH);
digitalWrite(pinButton, LOW );
pinMode(3, OUTPUT);
pinMode(4, INPUT);
Serial.begin(9600);
}
void loop()
{
float dist_cm = ultrasonic.Ranging(CM); // get distance
Serial.println(dist_cm);
delay(100);
unsigned long currentMillis;
if ((dist_cm)<100 && (Flag == 0))
{
digitalWrite(FAN, HIGH);// выключаем вытяжку
digitalWrite(Light, LOW);//включаем свет
delay (2000);
Flag = 1;
} else {
digitalWrite(Light, HIGH);
Flag = 0;
}
//if (digitalRead (pinButton) == LOW)
{
currentMillis = millis();
// проверяем сколько прошло времени,
// если больше заданного - выключаем
if (currentMillis - previousMillis >= OnTime)
{
ledState = LOW;
previousMillis = 0;
digitalWrite(FAN, HIGH);
}
}
// если кнопка не нажата и Flag=1
if (digitalRead (pinButton) == LOW && (Flag == 1))
{
previousMillis = currentMillis; // запоминаем время
ledState = HIGH;
digitalWrite(FAN, LOW);
}
}
раньше этот скетч был под датчик движения, еще не переделал полностью, так как не могу решить проблему с задержкой для SR04 .
Не думаю, что причина бед в delay(100);
Вставьте перед нужными digitalWrite() вывод отладочных сообщений в консоль ( Serial.println("message 1"); ), чтобы видеть, каким путем выполняется код и посмотрите в мониторе порта, что происходит при выполнении скетча.