for my project i am making a tank system that has controllable level in each of the two tanks using ultrasonic sensors, but i am getting stumped on the filling and emptying section (using relays to go and power 12v pumps). i have tried Do, While commands, If, For commands and a couple of others.
i was trying to set the marks at 20% intervals so i have full control over how full or empty it is.
i also have two screens one 20x4 I2C lcd which shows sounding level and another 16x2 serial lcd which shows a percentage bar of how full each tank is.
Anyone have anyone have and ideas or things i'm missing greatly appreciated.
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
LiquidCrystal_I2C lcd2(0x27, 20, 4);
#define length 16.0
double percent = 100.0;
unsigned char b;
unsigned char b2;
unsigned int peace;
unsigned int peace2;
const int in = 8, out = 9, x = 10, inn = 11, out2 = 12;
int count1 = 0;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
const int but1 = 22, but2 = 23, but3 = 24, r2 = 30, r4 = 32, r6 = 34, LED = 38, LED2 = 40;
unsigned char i;
byte p20[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte p40[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte p60[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte p80[8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte p100[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
void setup() {
pinMode (in, INPUT);
pinMode (out, OUTPUT);
pinMode (inn, INPUT);
pinMode (out2, OUTPUT);
lcd.begin (16, 2);
lcd.setCursor (0, 0);
lcd.createChar (0, p20);
lcd.createChar (1, p40);
lcd.createChar (2, p60);
lcd.createChar (3, p80);
lcd.createChar (4, p100);
Serial.begin (9600);
lcd2.init();
lcd2.backlight();
pinMode (but1, INPUT);
pinMode (but2, INPUT);
pinMode (but3, INPUT);
pinMode (r2, OUTPUT);
pinMode (r4, OUTPUT);
pinMode (r6, OUTPUT);
pinMode (LED, OUTPUT);
pinMode (LED2, OUTPUT);
lcd2.setCursor(0, 0);
lcd2.print("Sound T1:");
lcd2.setCursor(10, 0);
lcd2.print("Sound T2:");
}
void loop() {
lcd.setCursor (0, 0);
count1 ++;
buttonState1 = digitalRead(but1);
buttonState2 = digitalRead(but2);
buttonState3 = digitalRead(but3);
digitalWrite (LED, LOW);
digitalWrite (LED2, LOW);
digitalWrite (r2, HIGH);
digitalWrite (r4, HIGH);
digitalWrite (r6, HIGH);
//sensor Tx, Rx and calc:
digitalWrite(out, LOW);
delayMicroseconds(2);
digitalWrite(out, HIGH);
delayMicroseconds(10);
digitalWrite(out, LOW);
float dur = pulseIn(in, HIGH);
float dur_sec = dur / 1000000;
float dis_time = dur_sec / 2;
float ullage = dis_time * 34300;
delay (10);
//No.2 sensor Tx, Rx and calc:
digitalWrite(out2, LOW);
delayMicroseconds(2);
digitalWrite(out2, HIGH);
delayMicroseconds(10);
digitalWrite(out2, LOW);
float dur2 = pulseIn(inn, HIGH);
float dur_sec2 = dur2 / 1000000;
float dis_time2 = dur_sec2 / 2;
float ullage2 = dis_time2 * 34300;
delay (10);
//percentage calc:
long Rullage = ullage - 2;
long per = x * Rullage;
long finalper = per / 100;
long sounding = x * ullage;
long Finalsound = 125 - sounding;
//No.2 percentage calc:
long Rullage2 = ullage2 - 2;
long per2 = x * Rullage2;
long finalper2 = per2 / 100;
long sounding2 = x * ullage2;
long Finalsound2 = 125 - sounding2;
//tank one and two write:
//lcd2.setCursor(0, 0);
//lcd2.print("Sound T1:");
//lcd2.setCursor(10, 0);
//lcd2.print("Sound T2:");
lcd2.setCursor(0, 1);
lcd2.print(String(Finalsound));
lcd2.print(" % ");
lcd2.setCursor(10, 1);
lcd2.print(String(Finalsound2));
lcd2.print(" % ");
delay (50);
//write info:
//lcd.print(ullage);
//lcd.print(" - ");
//lcd.print(per);
//lcd.print(" % ");
//lcd.setCursor(0, 1);
//testing part and print bar
lcd.setCursor (0, 0);
double a = length / 100 * Finalsound;
if (a >= 1) {
for (int i = 1; i < a; i++) {
lcd.write(4);
b = i;
}
a = a - b;
}
peace = a * 5;
switch (peace) {
case 0:
break;
case 1:
lcd.print((char)0);
break;
case 2:
lcd.write(1);
break;
case 3:
lcd.write(2);
break;
case 4:
lcd.write(3);
break;
}
for (int i = 0; i < (length - b); i++) {
lcd.print (" ");
delay (50);
}
//No.2 testing part and print bar
lcd.setCursor (0, 1);
double a2 = length / 100 * Finalsound2;
if (a2 >= 1) {
for (int i2 = 1; i2 < a2; i2++) {
lcd.write(4);
b2 = i2;
}
a2 = a2 - b2;
}
peace2 = a2 * 5;
switch (peace2) {
case 0:
break;
case 1:
lcd.print((char)0);
break;
case 2:
lcd.write(1);
break;
case 3:
lcd.write(2);
break;
case 4:
lcd.write(3);
break;
}
for (int i2 = 0; i2 < (length - b2); i2++) {
lcd.print (" ");
delay (50);
};
//100% port tank
if (buttonState1 == HIGH) {
digitalWrite (LED, HIGH);
digitalWrite (r2, LOW);
digitalWrite (LED, HIGH);
delay (1000);
while (finalper == 95) {
//sensor Tx, Rx and calc:
digitalWrite(out, LOW);
delayMicroseconds(2);
digitalWrite(out, HIGH);
delayMicroseconds(10);
digitalWrite(out, LOW);
float dur = pulseIn(in, HIGH);
float dur_sec = dur / 1000000;
float dis_time = dur_sec / 2;
float ullage = dis_time * 34300;
delay (10);
//percentage calc:
long Rullage = ullage - 2;
long per = x * Rullage;
long finalper = per / 100;
long sounding = x * ullage;
long Finalsound = 125 - sounding;
digitalWrite (r2, HIGH);
digitalWrite (r4, HIGH);
}
}
// digitalWrite (LED, HIGH);
// delay (50);
// //sensor Tx, Rx and calc:
// digitalWrite(out, LOW);
// delayMicroseconds(2);
// digitalWrite(out, HIGH);
// delayMicroseconds(10);
// digitalWrite(out, LOW);
// float dur = pulseIn(in, HIGH);
// float dur_sec = dur / 1000000;
// float dis_time = dur_sec / 2;
// float ullage = dis_time * 34300;
// delay (10);
// //percentage calc:
// long Rullage = ullage - 2;
// long per = x * Rullage;
// long finalper = per / 100;
// long sounding = x * ullage;
// long Finalsound = 125 - sounding;
// digitalWrite (r2, HIGH);
// digitalWrite (r4, HIGH);
}
Final_testing_08.06.20.ino (6.17 KB)