Serial.begin(9600);
On conseille sur ce forum de passer en 115200 bauds, il faut changer la console une fois pour toutes. Si personne ne teste ton code, pas de problèmes, tu peut mettre ce que tu veux, Mai cela décourage ceux qui veulent tester ton code car il faut que ce soit eux qui changent deux fois leur console.
lcd.print (x) ;
lcd.print (F(" Bq")) ;
Les Bq c'est pas désintégrations par secondes? Auquel cas il faut afficher et remettre x à 0 toutes les secondes
Dans cas, c'est un peu plus compliqué de mettre x à 0.
Au lieu de
si x<10 ....;
si 10<=x<100 ....;
si 100<=x<1000 ...;
si 1000<=x<10000 ...;
si 10000<=x<100000 ...;
on peut faire
si x<10 ....;
sinon si x<100 ....;
sinon si 100<=x<1000 ...;
sinon si x<10000 ...;
sinon si x<100000 ...;
Cela fait moins de tests
if ( (x >= 100) && (x < 1000) )
{
lcd.setCursor(4, 3);
lcd.print (x) ;
}
Ce genre est répété souvent. On fait alors une fonction
void affiche(uint8_t ligne, uint8_t colonne, unsigned long nb)
{
if (nb<10)
{
lcd.setCursor(colonne+4, ligne);
lcd.print (nb) ;
}
else if (nb<100)
{
lcd.setCursor(colonne+3, ligne);
lcd.print (nb) ;
}
else if (nb<1000)
{
lcd.setCursor(colonne+2, ligne);
lcd.print (nb) ;
}
else if (nb<10000)
{
lcd.setCursor(colonne+1, ligne);
lcd.print (nb) ;
}
else if (nb<100000)
{
lcd.setCursor(colonne, ligne);
lcd.print (nb) ;
}
}
On peut aussi faire une fonction
void affiche1((uint8_t ligne, uint8_t colonne, unsigned long nb)
{
lcd.setCursor(colonne, ligne);
lcd.print (nb) ;
}
et ainsi:
void affiche(uint8_t ligne, uint8_t colonne, unsigned long nb)
{
if (nb<10) affiche1(ligne, colonne+4, nb);
else if (nb<100) affiche1(ligne, colonne+3, nb);
else if (nb<100) affiche1(ligne, colonne+2, nb);
else if (nb<100) affiche1(ligne, colonne+1, nb);
else if (nb<100) affiche1(ligne, colonne, nb);
}
attention 1000 est un entier 16 bits. Pour avoir un unsigned long il faut mettre UL derrière, sinon le nombre est tronqué
x<10000000 // non
x<10000000UL // oui
Pour afficher BQ, kBQ ou MBq, au lieu de tout répéter, on peut faire
if (x>10000000000UL) then
{
unite=F("GBq");
x/=1000000000UL
}
else if (x>10000000UL) then
{
unite=F("GBq");
x/=1000000UL
}
else if (x>10000UL) then
{
unite=F("GBq");
x/=1000UL
}
else unite=F("Bq");
et afficher les nombres x qui sont entre 1 et 10000 avec comme unité "unite"
Il en est de même pour l'autre unité de mesure. on peut faire comme au dessus utiliser deux variables, l'une prefixe qui contient 0, 1, 2, 3, ou 4 et unite qui contient "Bq" ou "Sv" puis:
if (unite=="Bq")
case (prefixe)
{
//0: unite="Bq";
// break
1: unite="kBq";
break
2: unite="MBq";
break
3: unite="GBq";
break
}
else // (unite=="Sv")
case (prefixe)
{
0: unite="nSv";
break
1: unite="µSv";
break
2: unite="mSv";
break
//3: unite="Sv";
// break
4: unite="kSv";
break
}
Ce sont des idées. Rien n'est testé, et je n'ai pas défini les variables