probléme de code

bonjour tout le monde
étant donnée debutant en arduino ! j'ai subit quelques problémes et j'ai besoin de votre aide
j'utilise une carte arduino Mega 2560 connecté avec 4 capteurs (temperature , tension , son , à proximité pour calculer la vitesse) et un afficheur LCD. chaque programme de chaque capteur marche trés bien ! mais le probléme lorsque j'ai fait le programme complet et j'ai mis chaque programme de chaque capteur dans une fonction . quand je fais l'appel de son() et tension() et pourcentagebatterie() il marche trés bien ! mais quand j'ajoute l'appel de vittesse() ou temperature() seulement tension() et pourcentagebatterie() marchent , les autres non !!! la combinaison de son() avec vitesse() et temperature() ne marche pas !! quelle est le probléme s'il vous plait merci !
voici le fichier ino du programme ! j'attend votre aide

pc.ino (2.21 KB)

#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
const int RS=6; //declaration constante de broche
const int E=7; //declaration constante de broche
const int D4=8; //declaration constante de broche
const int D5=9; //declaration constante de broche
const int D6=10; //declaration constante de broche
const int D7=11; //declaration constante de broche
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

float x1;
float v;
float pourc ;
int etat_actuel=0;
int ancien_etat=0;
long chrono_depart=0;
long duree_test=1000;
float nbr_rotation=0;
float rpm ;
boolean flag;
int x=0 ;
float t ;
float km ;
float t1=0 ;
float t2=0 ;
float t3=0 ;
float t4=0 ;
OneWire oneWire(2);

DallasTemperature sensors(&oneWire);
void setup()
{

Serial.begin(9600);
sensors.begin();
lcd.begin(16,4);

pinMode(A1,INPUT);
chrono_depart=0;
pinMode(12, INPUT);
pinMode(4, OUTPUT);
flag=false ;
}
void loop()
{

if(son())
{
t1=temperature();
t2=tension();
t3=pourcentagebatterie();
t4=vitesse();
affiche();
}

}
boolean son()
{

if((digitalRead(12)))
{

if(flag==true)
{
flag=false ;
digitalWrite(4,LOW);
}
else
{
flag=true;
digitalWrite(4,HIGH);

}
delay(50);
}

return(flag);
}
float temperature(){
sensors.requestTemperatures();
t=sensors.getTempCByIndex(0);
return(t);
}
float tension()
{
x1=analogRead(A0);
v=(x1*24)/1024 ;

return(v);
}
float pourcentagebatterie()
{
v=tension();
pourc=(v*100)/24 ;

return(pourc);

}
float vitesse()
{

etat_actuel=digitalRead(A1);
if (millis()-chrono_depart<duree_test){
if (etat_actuel!=ancien_etat){
nbr_rotation=nbr_rotation+1;
ancien_etat=etat_actuel;
}
}
else
{
rpm=(60nbr_rotation);
km=rpm
0.00756;

chrono_depart=millis();
nbr_rotation=0;

}

return(km);

}
void affiche()
{
lcd.setCursor(0,0);
lcd.print("tension=");
lcd.setCursor(8,0);
lcd.print(t2);
lcd.setCursor(13,0);
lcd.print("V ");
lcd.setCursor(0,1);
lcd.print("batterie=");
lcd.setCursor(9,1);
lcd.print(t3);
lcd.setCursor(0,2);
lcd.print("t=");
lcd.setCursor(2,2);
lcd.print(t1);
lcd.setCursor(7,2);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("vitesse=");
lcd.setCursor(8,3);
lcd.print(t4);
lcd.setCursor(12,3);
lcd.print("KM/H");
delay(1000);

}