Hi guys, im trying to get some help on my project, it is a water level monitoring using Ultrasonic sensor HC-SR04. Im having a difficulty in figuring out how to use the millis() function because i didnt get my desired output in my program. Heres my program..
the prob is lets just say in 3 seconds after the prgram start the sensor read an output of <10 the serial monitor will only output the distance but when the time goes in 5 seconds it will output the distance and the message.. but when the distance hit the 2nd condition or >10 distance it didnt print out the next messege until the time when the program start hit 10secs the it will repeat...
i hope guys you get my point. I appreciate any help tnx
i just want to get the proper construction of my code so that if every time either in the condition is met
it will print out an output then it will follow the interval to send again an output...
/**
HC-SR04 Demo
Demonstration of the HC-SR04 Ultrasonic Sensor
Date: August 3, 2016
Description:
Connect the ultrasonic sensor to the Arduino as per the
hardware connections below. Run the sketch and open a serial
monitor. The distance read from the sensor will be displayed
in centimeters and inches.
Hardware Connections:
Arduino | HC-SR04
-------------------
5V | VCC
9 | Trig
10 | Echo
GND | GND
License:
Public Domain
*/
// Pins
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
// Anything over 400 cm (23200 us pulse) is "out of range"
const unsigned int MAX_DIST = 23200;
void setup() {
// The Trigger pin will tell the sensor to range find
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
//Set Echo pin as input to measure the duration of
//pulses coming back from the distance sensor
pinMode(ECHO_PIN, INPUT);
// We'll use the serial monitor to view the sensor output
Serial.begin(9600);
}
void loop() {
unsigned long t1;
unsigned long t2;
unsigned long pulse_width;
float cm;
float inches;
// Hold the trigger pin high for at least 10 us
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Wait for pulse on echo pin
while ( digitalRead(ECHO_PIN) == 0 );
// Measure how long the echo pin was held high (pulse width)
// Note: the micros() counter will overflow after ~70 min
t1 = micros();
while ( digitalRead(ECHO_PIN) == 1);
t2 = micros();
pulse_width = t2 - t1;
// Calculate distance in centimeters and inches. The constants
// are found in the datasheet, and calculated from the assumed speed
//of sound in air at sea level (~340 m/s).
cm = pulse_width / 58.0;
inches = pulse_width / 148.0;
// Print out results
if ( pulse_width > MAX_DIST ) {
Serial.println("Out of range");
} else {
Serial.print(cm);
Serial.print(" cm \t");
Serial.print(inches);
Serial.println(" in");
}
// Wait at least 60ms before next measurement
delay(60);
}
kalyegwapo14:
i dont have any problems about the Ultrasonic Sensor
Good.
“ it happens that when the if conditions hit it will sent out an output if the elapsed time is reached but when the sensor instantly changed from the first condition to second is that it doesnt show an instant output.”
the prob is lets just say in 3 seconds after the prgram start the sensor read an output of <10 the serial monitor will only output the distance but when the time goes in 5 seconds it will output the distance and the message.. but when the distance hit the 2nd condition or >10 distance it didnt print out the next messege until the time when the program start hit 10secs the it will repeat...
Please do not change/update your original post.
Respond to questions in a new post.
When the sensor reads <=10 and stays there, do you want to print "SMS sent 1" every 5 seconds
as long as the level is <=10?
in the image that i attached sir it shows it print message if the distance is <10 and if the distance is >=11 && distance <=25 but it didnt print message every 5 seconds or 10 secs..