Problème de téléversement avec mon projet

Bonjour, bonsoir!

Je suis actuellement sur mon projet d’alarme et j’ai dans l’idée de faire afficher la tension de ma batterie sur mon écran LCD (Nokia 5110). La tension s’affiche bien, malgré imprécision des calculs.

J’arrive à téléverser mon code, mais des erreurs apparaissent:

Il relit deux fois le code, et affiche des erreurs.
Avant toute réponse inutile, OUI j’ai débranché le port D0 de mon arduino (ce qui est très chiant avec un module bluetooth…).

Voici le bout de code qui me fait buger:

void Alarm::BatteryCheck()
{
 unsigned int raw_bat = analogRead(A0);
 float real_bat = ((raw_bat * (5.0 / 1024) * 4.65));
 
 String vBat;
 vBat = String(real_bat);
 
 screen.SendString("Bat: ", 3);
 const char * v = vBat.c_str();
 screen.SendString(const_cast<char *>(v), 3, 4*8);
 screen.SendString("v", 3, 8*8);
 
 Serial.print("analogRead: ");
 Serial.println(analogRead(A0));
 Serial.print("real_bat: ");
 Serial.println(real_bat);
 Serial.print("vBat: ");
 Serial.println(vBat);
}

Si je commente l’intérieur de la fonction, plus de problème.

J’explique un peu:
La mesure s’effectue sur le port A0 avec un pont de résistance qui réduit la tension (batterie 9.6v). Ensuite j’ai fait un calcul trouvé sur internet dont j’ai modifié les valeurs.

Je met d’abord la valeur float en string, puis je la met en const char*. Je finis par la mettre en char* (la fonction pour l’écran LCD ne prend que du char*).

Ensuite je fais que des print. (même problème sans)

Il y a t-il une fonction qu’il n’aime pas ?

Et aussi, dans la soirée mon arduino a “bugé” pendant un transfert (même erreurs) et il rebootait toutes les secondes.
Les erreurs ne sont parfois pas les mêmes, c’est aléatoire.

Voilà, merci d’avance !

Cordialement, Damien.

Bonjour !

Après mes propres recherches, j’ai constaté que les valeurs float ne sont pas très apprécié de l’arduino. En fait quand on manipule une valeur décimale, le code envoyé à l’arduino est partiellement aléatoire, et donc renvoi des erreurs car du coup lors de la relecture, l’IDE ne trouve pas le bon code…

J’ai donc crée une fonction qui permet d’afficher une valeur décimale sur mon écran LCD:

void LCD::SendFloat(float floatToWrite, int line, int pos)
{
	if(floatToWrite >= 0.0 && floatToWrite <= 9.99)
	{
		int u = int(floatToWrite);
		float tmp = floatToWrite*100;
		int decimal = int(tmp)-u*100;
		int _d = decimal / 10;
		int _c = decimal % 10;
		this->SendInt(u, line, pos);
		this->SendString(".", line, pos+8);
		this->SendInt(_d, line, pos+(2*8));
		this->SendInt(_c, line, pos+(3*8));
	}
}

u contient la valeur avant le point
_d contient le dixième
_c contient le centième

On prend pour exemple: 4.56
u = 4
_d = 5
_c = 6

SendInt est une autre fonction de mon include (que je partagerai ;)) qui affiche des chiffres sur mon écran.

Voilà !
Si vous avez des questions sur mon projet ou sur les bouts de code que je vous ai partagé, n’hésitez pas !

Damien.