Arduino qui ne sait plus compter correctement

Bonjour, j'aimerai savoir si c'est normal qu'un Arduino ne sais plus compte correctement ?
Même avec des valeurs int et avec des float aussi.

Vraiment je comprend pas trop.

Dans ce calcule je dois trouver 38,57 a peu prêt mais lui me dit -38 pourquoi un résultat négatif ?

void setup() {
  Serial.begin(9600);

}

void loop() {
  float humidite;
  int maxi;
  int mini;
  int capteur;
  int pourcentage;

  capteur = 334;
  maxi = 1024;
  mini = 180;
  pourcentage = 100;
  humidite = ((capteur * pourcentage) / (maxi - mini));
  // (334x100)/(1024-180) = 33400/844 = 39,57

   Serial.println(humidite);
   //resultat -38 dèja pourquoi une valeur négatif ? 

}

Merci d'avance.

Parce que 33400 est supérieur a 32768
int 33400 = -32135
int -32135/844=-38

Bonjour,

Il y a débordement : 33400 ne tient pas sur un int et est interprété comme un nombre négatif.

Fais le calcul en flottant

humidite = ((float)capteur * pourcentage) / (maxi - mini);

Bonjour DieuTopGun

kamill:
Fais le calcul en flottant

humidite = ((float)capteur * pourcentage) / (maxi - mini);

Dans la réponse de kamill, notez bien l'emplacement de (float) !!!!!
Directement devant la première variable.

Pourquoi utiliser :
Serial.begin(9600);
Utilisez Serial.begin(1000000);
C'est 100 fois plus rapide.

Cordialement,
bidouilleelec

Autre "tuyaux" mais qui ne diffère pas des autres :
Kamill t'as initié au débordement d'une variable et c'est important de le comprendre.
Il y a deux façons de gérer les entiers :
_ les entier signés, c'est à dire qui contiennent des valeurs positives et négatives avec 0 au milieu
_ les entiers non signés (unsigned integer) qui ne contiennent que des valeurs positives etoù on commence par 0
Ce type ne peut pas gérer les valeurs négative mais double la valeur positive avant débordement.

Mais faire des calculs avec des entiers ne donnera que des résultats entiers : c'est la règle.
Si tu veux obtenir des résultats décimaux avec des opérandes entiers il faut "forcer" le résultat en décimal.
En programmation on dit qu'on "caste" et c'est ce qu'a fait kamill quand il ajouter (float) devant une des variables entieères pour que le compilateur comprenne qu'il doit faire un calcul en flotant( décimal).

Lire le tuto d'Eskimon.

@DieuTopGun : quand tu poses une question : Micro TF Carte Module de blindage de mémoire Adaptateur de carte de stockage Mic - Français - Arduino Forum

Cela t'arrive t-il de répondre aux demandes d'informations complémentaires ou pas ?
Si tu as résolu le problème par toi-même ce serait bien de donner la solution.
Nous, on veut bien partager, mais ce n'est pas à sens unique ...

Bonjour hbachetti

hbachetti:
@DieuTopGun : quand tu poses une question : Micro TF Carte Module de blindage de mémoire Adaptateur de carte de stockage Mic - Français - Arduino Forum

Cela t'arrive t-il de répondre aux demandes d'informations complémentaires ou pas ?
Si tu as résolu le problème par toi-même ce serait bien de donner la solution.
Nous, on veut bien partager, mais ce n'est pas à sens unique ...

Il n'est que 09h30 (du matin) ! :slight_smile:

Cordialement,
bidouilleelec

Oui mais j'ai posé la question Le 12 juillet.
5 jours donc.