Controllo livello cisterna...

Ciao a tutti :smiley:
Da poco nella mia villetta l'idraulico ha rimesso in funzione la cisterna per l'irrigazione..
Ho pensato di creare un sistema in grado di dirmi il livello dell'acqua
Ho già ordinato su eBay il sensore ad ultrasuoni ed il display ma mi chiedevo se il codice che ho preparato è giusto:

#include <LiquidCrystal.h>      //libreria lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);    //pin lcd

int Impulso(9);
int Lettura(10);
int Distanza;
int Percentuale1;
int Percentuale;
int Tempo;
int Elettrovalvola(8);

void setup() {
  lcd.begin(16, 2);    //dimensioni lcd 16x2 caratteri

  pinMode (Impulso, OUTPUT);  
  pinMode (Lettura, INPUT);
}

void loop() {

  digitalWrite(Impulso ,HIGH); //emetto il segnale a ultrasuoni
  delay(100);
  digitalWrite(Impulso, LOW); //spengo il segnale a ultrasuoni

  Tempo = pulseIn(Lettura, HIGH);  //memorizza il tempo dell'arrivo della risposta

  Distanza = Tempo/58;  //Formula Distanza=tempo*V/2  dove v è 343,5 m/s 
  Percentuale1 = Distanza*3;  //d*tot
  Percentuale = Percentuale1/100; 
  lcd.clear();
  lcd.print("Percent. = ");
  lcd.print(Percentuale, 100);
  lcd.print("%");
  if(Percentuale == 5<1){
    lcd.setCursor(0, 1);
    lcd.print("Rabbocco Acceso");
    digitalWrite(Elettrovalvola, HIGH);
  }
}

Grazie in anticipo
Salvo

  1. Questo è errato, le variabili le inizializzi con var=99;
int Impulso(9);
int Lettura(10);
int Elettrovalvola(8);

Deve essere:

const byte Impulso=9;
const byte Lettura=10;
const byte Elettrovalvola=8;
  1. Poi hai 3 pin, perciò nella setup definisci il pinMode() anche per Elettrovalvola (ti manca).

  2. Accendi la valvola ma una volta fatto, non la spegni più. Manca qualcosa nella logica.
    Vedi questo esempio, qui accende/spegne un led:
    http://arduinobasics.blogspot.it/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html

Quindi così non ci sono errori? :roll_eyes:

#include <LiquidCrystal.h>      //libreria lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);    //pin lcd

const byte Impulso=9;
const byte Lettura=10;
const byte Elettrovalvola=8;
int Distanza;
int Percentuale1;
int Percentuale;
int Tempo;

void setup() {
  lcd.begin(16, 2);    //dimensioni lcd 16x2 caratteri

  pinMode (Impulso, OUTPUT);  
  pinMode (Lettura, INPUT);
  pinMode (Elettrovalvola, OUTPUT);
}

void loop() {

  digitalWrite(Impulso ,HIGH); //emetto il segnale a ultrasuoni
  delay(100);
  digitalWrite(Impulso, LOW); //spengo il segnale a ultrasuoni

  Tempo = pulseIn(Lettura, HIGH);  //memorizza il tempo dell'arrivo della risposta

  Distanza = Tempo/58;  //Formula Distanza=tempo*V/2  dove v è 343,5 m/s 
  Percentuale1 = Distanza*3;  //d*tot
  Percentuale = Percentuale1/100; 
  lcd.clear();
  lcd.print("Percent. = ");
  lcd.print(Percentuale, 100);
  lcd.print("%");
  if(Percentuale == 5<1){
    lcd.setCursor(0, 1);
    lcd.print("Rabbocco Acceso");
    digitalWrite(Elettrovalvola, HIGH);
  }
  else{
    lcd.setCursor(0, 1);
    lcd.print("Rabbocco Spento");
    digitalWrite(Elettrovalvola, LOW);
    }
}

L'ho visto ora, cosa dovrebbe fare questo test? (è errato sintatticamente)

  if(Percentuale == 5<1){

se Percentuale uguale a 5 if(Percentuale==5)
se Percentuale minore di 1 if(Percentuale<1)
se Percentuale minore o uguale a 5 if(Percentuale<=5)

Opsss... Vero :blush: :blush:
Grazie!