je suis en T°STI2D (SIN) et pour mon projet de fin d'année, parmi mes differentes problematiques. je dois donner le pourcentage de batterie restant. j'ai rechercher un peu sur internet et j'ai compris qu'il fallait utiliser un pont diviseur de tension afin dabaisser la tension de la batterie de 12V à ``5V. mais le probléme est que lorsque je fait la compilation,j'ai beau changer la tension sa reste bloquer sur 100%
unsigned int mesure;
float tension;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
{
mesure = analogRead(0);
tension = mesure * 5.0 / 1023 ;
Serial.print(tension);
delay(500);
}
if (4.10<tension<4.21)
{
Serial.println ("90%");
}
else if (3.97<tension<4.10)
{
Serial.println ("80%");
}
else if (3.92<tension<3.97)
{
Serial.println ("70%");
}
else if (3.87<tension<3.92)
{
Serial.println ("60%");
}
else if (3.83<tension<3.87)
{
Serial.println ("50%");
}
else if (3.79<tension<3.83)
{
Serial.println ("40%");
}
else if (3.75<tension<3.79)
{
Serial.println ("30%");
}
else if (3.10<tension<3.75)
{
Serial.println ("20%");
}
else
{
Serial.print ("batterie faible");
}
}
Ce genre de test if (4.10 < tension < 4.21)ne fait pas ce que vous croyez... d'ailleurs si vous activez les warnings le compilateur devrait vous dire
</sub> <sub>[color=orange].../sketch_feb11a.ino:18:12: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses] if (4.10 < tension < 4.21)[/color]</sub> <sub>
il faut séparer le test en 2 parties, (4.10 < tension) [b][color=red]&&[/color][/b] (tension < 4.21)
Bonjour a tous,
J'ai essayé la première méthode de J-M-L, je ne sais pas pourquoi mais sa m'affiche une erreur a chaque ligne " expected identifier before '(' token "
merci d'avance
unsigned int mesure;
float tension;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
{
mesure = analogRead(0);
tension = mesure * 5.0 / 1023 ;
Serial.print(tension);
delay(500);
}
if (4.10<tension)&&(tension<4.21)
{
Serial.println ("90%");
}
else if (3.97<tension)&&(tension<4.10)
{
Serial.println ("80%");
}
else if (3.92<tension)&&(tension<3.97)
{
Serial.println ("70%");
}
else if (3.87<tension)&&(tension<3.92)
{
Serial.println ("60%");
}
else if (3.83<tension)&&(tension<3.87)
{
Serial.println ("50%");
}
else if (3.79<tension)&&(tension<3.83)
{
Serial.println ("40%");
}
else if (3.75<tension)&&(tension<3.79)
{
Serial.println ("30%");
}
else if (3.10<tension)&&(tension<3.74)
{
Serial.println ("20%");
}
else
{
Serial.print ("batterie faible");
}
}
et pour la deuxième méthode de infobarquee qui est beaucoup plus simple ( je te remercie ^^). J'ai deux questions.
La première,peut tu m'explique brièvement ce que signifie la partie que tu m'as passé stp
et la deuxième pourquoi sa m'affiche 125% lorsque je met sur 5 v
Cordialement
j'ai une autre question je dois faire sonner un buzzer et faire clignoter une LED lorsque la batterie sera faible .Lorsque la batterie est faible cela fonctionne très mais lorsque le pourcentage de batterie augment le buzzer sonne toujours et la LED ne s’éteint pas pouvez vous m'aidez svp
unsigned int mesure;
float tension;
const int Buzzer = 10; //declaration constante de broche
int i = 0, j = 0, k = 0; // variables de boucle
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Buzzer, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
{
mesure = analogRead(0);
tension = mesure * 5.0 / 1023 ;
delay(500);
}
if ((5.00>=tension)&&(tension>4.21))
{
Serial.println ("100%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((4.10<tension)&&(tension<=4.21))
{
Serial.println ("90%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.97<tension)&&(tension<=4.10))
{
Serial.println("80%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.92<tension)&&(tension<=3.97))
{
Serial.println ("70%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.87<tension)&&(tension<=3.92))
{
Serial.println ("60%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.83<tension)&&(tension<=3.87))
{
Serial.println ("50%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.79<tension)&&(tension<=3.83))
{
Serial.println ("40%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.75<tension)&&(tension<=3.79))
{
Serial.println ("30%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if ((3.10<tension)&&(tension<=3.75))
{
Serial.println ("20%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if((3.10>tension))
{
Serial.println ("batterie faible");
digitalWrite(8, HIGH); // allume la LED
delay(1000); // ne fait rien pendant 1 seconde
digitalWrite(13, LOW); // éteint la LED
delay(1000);
for (i = 500; i < 1000; i++) {
tone(Buzzer, i);
delay(1);
} // fin boucle for
for (i = 1000; i > 500; i--) {
tone(Buzzer, i);
delay(1);
} // fin boucle for
}
}
Bonjour,merci pour vos réponses je tâcherai d’y faire attention ^^
Mais cela ne répond pas à ma question (qui consisté à arrêter le buzzer et la led lorsque la batterie n’est plus faible )
J-M-L je ne vois pas de quel accolades inutile vous parlez :-(,sachant que si je les enlève les
« if » et « else if » ne fonctionne plus.
Cordialement.
c'est vrai que c'est beaucoup mieux comme sa, je vous remercie ^^
j'ai réussi a éteindre la led lorsque la batterie n'est plus faible, mais rien a faire pour le buzzer, il sonne toujours même quand la batterie est a 100%.
Merci d'avance.
unsigned int mesure;
float tension;
const int Buzzer = 10; //declaration constante de broche
int i = 0, j = 0, k = 0; // variables de boucle
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Buzzer, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
mesure = analogRead(0);
tension = mesure * 5.0 / 1023 ;
delay(500);
Serial.print (tension);
Serial.print (" ");
if (tension >4.21)
{
Serial.println ("100%");
digitalWrite(8, LOW); // éteint la LED
(i=0);
}
else if (tension > 4.10)
{
Serial.println ("90%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.97)
{
Serial.println ("80%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.92)
{
Serial.println ("70%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.87)
{
Serial.println ("60%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.83)
{
Serial.println ("50%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.79)
{
Serial.println ("40%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.75)
{
Serial.println ("30%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else if (tension > 3.10)
{
Serial.println ("20%");
digitalWrite(13, LOW); // éteint la LED
digitalWrite(Buzzer, LOW);
}
else
{
Serial.println ("batterie faible");
digitalWrite(13, HIGH); // allume la LED
delay(500); // ne fait rien pendant 1 seconde
digitalWrite(13, LOW); // éteint la LED
delay(500);
for (i = 500; i < 1000; i++) {
tone(Buzzer, i);
delay(1);
} // fin boucle for
for (i = 1000; i > 500; i--) {
tone(Buzzer, i);
delay(1);
}
}
}