Water level

Salve a tutti sono alle prime armi con arduino e mi sono imbattuto in un problema.
Stavo realizzando un water level con Arduino Nano e un sensore sonar hc-sr04.
Il programma che mi misura il livello d'acqua l'ho scritto senza problemi.
Successivamente ho scritto anche un secondo programmino che,all'attivazione di un pulsante lancia un temporizzatore che mi abilita un relè,il quale al termine del tempo definito lo disattiva.
Il problema è sorto quando ho deciso di voler far fare le due operazioni in contemporanea all'arduino.
Ovvero il sensore legge sempre e comunque il livello d'acqua e me lo visualizza su un lcd,pero a la pressione del pulsante,vorrei che fa partire l'altro programma e mi visualizzi il tempo restante sull'lcd.
A lo scadere del tempo ritorni a la schermata di misurazione del livello continuando a leggere il valore del sensore.
Come posso unire i due codici e risolve?
Ringrazio vivamente a tutti in anticipo per l'aiuto e spero di risolvere

P:S colgo l'occasione per Augurare un Felice 2015 a tutti
Angelo :wink: :wink:

Non usare delay() ma millis()
Ciao Uwe

dmalab:
Salve a tutti sono alle prime armi con arduino

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

ciao nid69ita scusame se gia non lo avevo fatto ma ero nuovo nel forum!
uwefed devo cambiare tutti i delay con millis?

ora ti posto i due programmi da unire:

***********************************************
*             PROGRAMMA SENSORI DISTANZA              *
***********************************************


#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
int level;
int pingPin = 11; //output 10us pulse to this pin
int inPin = 13; //measure return pulse width from this pin
long duration, inches, cm;
int indec, cmdec, leveldec;
int inchconv = 147; // ratio between puls width and inches
int cmconv = 59; // ratio between pulse width and cm
String s1, s2;

void setup() {
  
  lcd.begin(16,2);
  lcd.print("Dmalab ver.1.0");
  lcd.setCursor(0,1);
  lcd.print("Water level ");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Develpment by ");
  lcd.setCursor(0,1);
  lcd.print("Marchetti");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("29/12/2014");
  delay(2000);
  lcd.clear();
  
  
  pinMode(pingPin, OUTPUT);
  pinMode(inPin, INPUT);
}

void loop()
{

  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(pingPin, LOW);

  duration = pulseIn(inPin, HIGH);

  
 
  cm = microsecondsToCentimeters(duration);
  cmdec = (duration - cm * cmconv) * 10 / cmconv;
  
  level = (cm*1.53);
  
 
  s2 = String(level) +"."+String(leveldec) +"%"+"    ";
 
  
  lcd.setCursor(0,0);
  lcd.print("Livello");
  lcd.setCursor(8,0);
  lcd.print(s2);
 

  delay(500);

}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / cmconv;
}
***********************************************
*                       PROGRAMMA TIMER                       *
***********************************************


#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7);
int runTimer = 1; 
int runFor = 6; // time in seconds
int buzzerPin = 13;
int relayPin=4;
int data = 0;

int stato = 0;
 
void setup() {
  
  boolean stato = false;
  
  pinMode(2, INPUT);
   pinMode(buzzerPin, OUTPUT);
   pinMode(relayPin,OUTPUT);
   lcd.begin(16, 2);
}
 
void loop() 

{
 if (digitalRead(2)==HIGH){  
   if (stato == false){  
    stato = true;} 
    if (stato == true){
   if(runTimer == 1){ 
      digitalWrite(relayPin,LOW);
     // relay is OFF during countdown
      /* *change to HIGH if you want the relay to be ON while countdowning */
      lcd.clear();
      
      lcd.print("TIMER=");
      //Start timer
      timer(); 
   } else {
      digitalWrite(relayPin,HIGH); // relay is ON when time expired
      /* *change to LOW if you want the relay to be OFF when the time expired */
   }
   runTimer = 0;
   lcd.noDisplay();
   delay(250);
   
   lcd.display();
   delay(250);
   }
}
} 
void timer() {
   for(int timer = runFor;timer > 0; --timer){
   if(timer >= 10) {
      lcd.setCursor(6,0); 
   } else {   
      lcd.setCursor(6,0);
      lcd.print("0");
      lcd.setCursor(7,0);
   }
   lcd.print(timer);
   
   delay(1000);
   }
   lcd.setCursor(0,0);
   lcd.clear();
   lcd.print(" CFINE DOCCIA");  
}

COME FACCIO PER FARLI FUNZIONARE INSIEME?
GRAZIE

Non usare delay() ma millis()
Ciao Uwe