I finished the code for water-level device and everything work great..
I want to put more data on the display the first line (0,0) for bars, the second will be the measuring in CM (0,1)
bars work great but still have problem with CM reading
this is my code
#include <LiquidCrystal.h>
#define ECHOPIN 3 // Pin to receive echo pulse
#define TRIGPIN 4 // Pin to send trigger pulse
#define STATUSPIN 13 // Use for troubleshooting
int highWater = 30; // high
int lowWater = 95; // low
byte symbol[8] = {
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
};
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// Utility function for flashing STATUS-PIN
void flashLed(int pin, int times, int wait) {
for (int i = 0; i < times; i++) {
digitalWrite(pin, HIGH);
delay(wait);
digitalWrite(pin, LOW);
if (i + 1 < times) {
delay(wait);
}
}
}
void setup() {
lcd.begin(16,2);
lcd.print(" AQUA LEVEL ");
lcd.createChar(0, symbol);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
delay(3000); // Show application name for 3 seconds.
}
void loop() {
// Measure distance
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
int distance = pulseIn(ECHOPIN, HIGH);
distance= distance/58;
// Convert measured value to value between 0-16, to display on LCD
// Use Arduino built-in map and constrain functions
int scaledValue = map(constrain(distance, highWater, lowWater), lowWater, highWater, 0, 16);
lcd.clear();
lcd.setCursor(0,0);
while (scaledValue > 0) {
lcd.print((char)0);
scaledValue--;
}
lcd.setCursor(0, 1);
lcd.print(scaledValue);
lcd.print(" cm - ");
delay(3000); // Wait 3 seconds before measuring again. We're no hurry! :P
}
update
ok i changed things in the code, but now showing weird number it says in the display 44CM ?! what is that supposed to be !!
#include <LiquidCrystal.h>
#define ECHOPIN 3 // Pin to receive echo pulse
#define TRIGPIN 4 // Pin to send trigger pulse
#define STATUSPIN 13 // Use for troubleshooting
int highWater = 30; // These values allow to calculate % of full
int lowWater = 95; // SRF04 hangs above water (lower distance = more water)
byte symbol[8] = { // Custom character for LCD display
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
};
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // Assign pins
// Utility function for flashing STATUSPIN
void flashLed(int pin, int times, int wait) {
for (int i = 0; i < times; i++) {
digitalWrite(pin, HIGH);
delay(wait);
digitalWrite(pin, LOW);
if (i + 1 < times) {
delay(wait);
}
}
}
void setup() {
lcd.begin(16,2);
lcd.print(" AQUA LEVEL ");
lcd.createChar(0, symbol);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
delay(3000); // Show application name for 3 seconds.
}
void loop() {
long hWatherCm;
int litres;
// Measure distance
digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW); // Send pin low again
int distance = pulseIn(ECHOPIN, HIGH); // Read in times pulse
distance= distance/58; // divide by 58 gives cm.
// Convert measured value to value between 0-16, to display on LCD
// Use Arduino built-in map and constrain functions
int scaledValue = map(constrain(distance, highWater, lowWater), lowWater, highWater, 0, 16);
lcd.clear();
lcd.setCursor(0,0);
while (scaledValue > 0) {
lcd.print((char)0);
scaledValue--;
}
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" cm - ");
// litres = SUPERFICE_BASE * (hWather / 100.0) * 1000
lcd.print(litres);
lcd.print(" 95 ");
delay(3000); // Wait 2 seconds before measuring again. We're in no hurry!
}
Info
the high of water tank 1M
the Length of water tank 2M
the width 1M
the highest water level can be 70CM
the lowest water level 5CM
last update
everything work now i was confused about numbers that's the right number
If some can help me to convert "distance" to Liters" that's will be great