how to make led stay for 5 seconds without delay command
i am using ultra sonic sensor but the led cannot stay on for few seconds
#define trigPin 7
#define echoPin 6
#define led3 11
#define led4 10
#define led5 9
#define led6 8
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58;
if (distance < 15) {
digitalWrite(led3, HIGH);
}
else {
digitalWrite(led3, LOW);
}
if (distance < 12) {
digitalWrite(led4, HIGH);
}
else {
digitalWrite(led4,LOW);
}
if (distance < 8) {
digitalWrite(led5, HIGH);
}
else {
digitalWrite(led5,LOW);
}
if (distance < 5) {
digitalWrite(led6, HIGH);
}
else {
digitalWrite(led6,LOW);
}
if (distance > 30 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(50);
}
Wawa
2
Untested.
const byte trigPin = 7;
const byte echoPin = 6;
const byte led3 = 11;
const byte led4 = 10;
const byte led5 = 9;
const byte led6 = 8;
unsigned long duration, distance;
boolean printed; // for 'out of range'
boolean ledState; // on or off
unsigned long ledTime; // when leds were turned on
unsigned long interval = 5000; // burn time
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 58;
if (distance > 30 || distance <= 0) {
if (!printed) { // if not printed
Serial.println(F("Out of range"));
printed = true; // print once
}
}
else { // if in range
Serial.print(F("Distance is "));
Serial.print(distance);
Serial.println(F(" cm"));
if (distance < 15) digitalWrite(led3, HIGH);
if (distance < 12) digitalWrite(led4, HIGH);
if (distance < 8) digitalWrite(led5, HIGH);
if (distance < 5) digitalWrite(led6, HIGH);
ledState = true; // remember led(s) are on
ledTime = millis(); // note the time
printed = false; // enable printing 'out of range'
}
if (ledState && millis() - ledTime > interval) { // if a led is on and time is up
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
ledState = false; // leds are off
}
delay(50);
}
Thanks a lot it’s working very well