water level

I am trying to read water tank water level but i stuck with the code its showing some time right and some time wrong value
can any one help me where am i wrong
thanks

#define tank1level10       A0
#define tank1level25      A1
#define tank1level50      A2
#define tank1level75      A3
#define tank1levelfull    A4

void setup() {
  Serial.begin(9600);
  pinMode(tank1level10, INPUT);
  pinMode(tank1level25, INPUT);
  pinMode(tank1level50, INPUT);
  pinMode(tank1level75, INPUT);
  pinMode(tank1levelfull, INPUT);
}

void loop() {
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  delay(500);
  if(digitalRead(tank1levelfull)==HIGH && 
     digitalRead(tank1level75)==HIGH && 
     digitalRead(tank1level50)==HIGH && 
     digitalRead(tank1level25)==HIGH && 
     digitalRead(tank1level10)==HIGH){
     const char text[] = "Tank 1 is Full";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==LOW && 
          digitalRead(tank1level75)==HIGH && 
          digitalRead(tank1level50)==HIGH && 
          digitalRead(tank1level25)==HIGH && 
          digitalRead(tank1level10)==HIGH){
    const char text[] = "Tank 1 is 75%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==LOW && 
          digitalRead(tank1level75)==LOW && 
          digitalRead(tank1level50)==HIGH && 
          digitalRead(tank1level25)==HIGH && 
          digitalRead(tank1level10)==HIGH){
            const char text[] = "Tank 1 is 50%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==LOW && 
          digitalRead(tank1level75)==LOW && 
          digitalRead(tank1level50)==LOW && 
          digitalRead(tank1level25)==HIGH && 
          digitalRead(tank1level10)==HIGH){
    const char text[] = "Tank 1 is 25%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==LOW && 
          digitalRead(tank1level75)==LOW && 
          digitalRead(tank1level50)==LOW && 
          digitalRead(tank1level25)==LOW && 
          digitalRead(tank1level10)==HIGH){
    const char text[] = "Tank 1 is 10%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==LOW && 
          digitalRead(tank1level75)==LOW && 
          digitalRead(tank1level50)==LOW && 
          digitalRead(tank1level25)==LOW && 
          digitalRead(tank1level10)==LOW){
    const char text[] = "Tank 1 is Empty%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  delay(500);
}

What are you using to sense the water level and what is holding the inputs at a known state all of the time ?

What sensors are you using on the tank (link please) to measure the levels. I suspect the problem is floating pins and this can maybe be solved with wiring the sensors differently (depending on what type they are) and flipping the code logic or adding pull down resistors to prevent the pins from floating.

floating pins/water level sensor
I like the sound of that :slight_smile:

UKHeliBob:
floating pins/water level sensor
I like the sound of that :slight_smile:

No pun intended. :slight_smile:

Riva:
What sensors are you using on the tank (link please) to measure the levels. I suspect the problem is floating pins and this can maybe be solved with wiring the sensors differently (depending on what type they are) and flipping the code logic or adding pull down resistors to prevent the pins from floating.

UKHeliBob:
What are you using to sense the water level and what is holding the inputs at a known state all of the time ?

UKHeliBob:
floating pins/water level sensor
I like the sound of that :slight_smile:

i am just using digital pins of arduino no any other sensor any nothing is holding the inputs at a known state all of the time

nothing is holding the inputs at a known state all of the time

That is almost certainly the cause of the problem. The inputs could be at any state, HIGH or LOW, when not in contact with the water

A suggestion : Change the pinMode() of the inputs to INPUT_PULLUP to activate the built in pullup resistors so that they are held HIGH unless in contact with the water. When in contact with the water arrange the circuit so that the pins are connected to GND. In the program change the logic to test for the inputs being HIGH to indicate that they are out of the water. Do not write to the pins in the program

UKHeliBob:
That is almost certainly the cause of the problem. The inputs could be at any state, HIGH or LOW, when not in contact with the water

A suggestion : Change the pinMode() of the inputs to INPUT_PULLUP to activate the built in pullup resistors so that they are held HIGH unless in contact with the water. When in contact with the water arrange the circuit so that the pins are connected to GND. In the program change the logic to test for the inputs being HIGH to indicate that they are out of the water. Do not write to the pins in the program

its working now

#define tank1level10       A0
#define tank1level25       A1
#define tank1level50       A2
#define tank1level75       A3
#define tank1levelfull     A4
#define tank2level10       A5
#define tank2level25       0
#define tank2level50       1
#define tank2level75       2
#define tank2levelfull     3
#define tank3level10       4
#define tank3level25       5
#define tank3level50       6
#define tank3level75       7
#define tank3levelfull     8

void setup() {
  Serial.begin(9600);
  pinMode(tank1level10,   INPUT_PULLUP);
  pinMode(tank1level25,   INPUT_PULLUP);
  pinMode(tank1level50,   INPUT_PULLUP);
  pinMode(tank1level75,   INPUT_PULLUP);
  pinMode(tank1levelfull, INPUT_PULLUP);
  pinMode(tank2level10,   INPUT_PULLUP);
  pinMode(tank2level25,   INPUT_PULLUP);
  pinMode(tank2level50,   INPUT_PULLUP);
  pinMode(tank2level75,   INPUT_PULLUP);
  pinMode(tank2levelfull, INPUT_PULLUP);
  pinMode(tank3level10,   INPUT_PULLUP);
  pinMode(tank3level25,   INPUT_PULLUP);
  pinMode(tank3level50,   INPUT_PULLUP);
  pinMode(tank3level75,   INPUT_PULLUP);
  pinMode(tank3levelfull, INPUT_PULLUP);
}

void loop() {
  digitalWrite(tank1levelfull,HIGH);
  digitalWrite(tank1level75,HIGH);
  digitalWrite(tank1level50,HIGH);
  digitalWrite(tank1level25,HIGH);
  digitalWrite(tank1level10,HIGH);
  delay(500);
  if(digitalRead(tank1levelfull)==LOW && 
     digitalRead(tank1level75)==LOW && 
     digitalRead(tank1level50)==LOW && 
     digitalRead(tank1level25)==LOW && 
     digitalRead(tank1level10)==LOW){
     const char text[] = "Tank 1 is Full";
      Serial.println(text);
  }
  else if(digitalRead(tank1levelfull)==HIGH && 
          digitalRead(tank1level75)==LOW && 
          digitalRead(tank1level50)==LOW && 
          digitalRead(tank1level25)==LOW && 
          digitalRead(tank1level10)==LOW){
    const char text[] = "Tank 1 is 75%";
      Serial.println(text);
  }
  else if(digitalRead(tank1levelfull)==HIGH && 
          digitalRead(tank1level75)==HIGH && 
          digitalRead(tank1level50)==LOW && 
          digitalRead(tank1level25)==LOW && 
          digitalRead(tank1level10)==LOW){
            const char text[] = "Tank 1 is 50%";
      Serial.println(text);
  }
  else if(digitalRead(tank1levelfull)==HIGH && 
          digitalRead(tank1level75)==HIGH && 
          digitalRead(tank1level50)==HIGH && 
          digitalRead(tank1level25)==LOW && 
          digitalRead(tank1level10)==LOW){
    const char text[] = "Tank 1 is 25%";
      Serial.println(text);
  }
  else if(digitalRead(tank1levelfull)==HIGH && 
          digitalRead(tank1level75)==HIGH && 
          digitalRead(tank1level50)==HIGH && 
          digitalRead(tank1level25)==HIGH && 
          digitalRead(tank1level10)==LOW){
    const char text[] = "Tank 1 is 10%";
      Serial.println(text);
  digitalWrite(tank1levelfull,LOW);
  digitalWrite(tank1level75,LOW);
  digitalWrite(tank1level50,LOW);
  digitalWrite(tank1level25,LOW);
  digitalWrite(tank1level10,LOW);
  }
  else if(digitalRead(tank1levelfull)==HIGH && 
          digitalRead(tank1level75)==HIGH && 
          digitalRead(tank1level50)==HIGH && 
          digitalRead(tank1level25)==HIGH && 
          digitalRead(tank1level10)==HIGH){
    const char text[] = "Tank 1 is Empty";
      Serial.println(text);
  }
}