Précision varaiable

Bonjour,

Quelqu'un peut me corriger ?

void setup()
{
  pinMode(3,OUTPUT);
  Serial.begin(9600);
  
}
 
void loop()
{

  analogWrite(3, 255);
  
  for (float i=0; i <= 40; i=i+1){
      analogWrite(3, 255 - (255/40)*i);
      Serial.println(255 - (255/40)*i);
      delay (25);
   }
  delay(2000);
}

Je ne comprends pas pourquoi la led ne s'éteinds pas, en effet, 255 - (255/40)*i prend pour valeur finale 15.

Dsl de vous déranger pour cela ^^

Tout simplement parce que 255 n'est pas un multiple de 40 donc il te reste 15 à la fin.

Je voudrais justement qu'il ne reste rien a la fin d'où mon envie d'utiliser des nombres décimaux.

Je pensais que mon code était facile à comprendre.

"255 - (255/40)*i" doit atteindre la valeur 0 quand i=40 mais le problème est que 255/40 est arrondi à 6 et n'est pas une valeur exacte...

Essaye avec des int et 255-255*i/40
Ça restera des int donc ça sera arrondi mais ça devrait marcher

Calvin-duino:
"255 - (255/40)*i" doit atteindre la valeur 0 quand i=40 mais le problème est que 255/40 est arrondi à 6 et n'est pas une valeur exacte...

Si tu veux que le calcul se fasse avec des flottants, utilise des constantes flottantes

255.0 - (255.0/40.0)*i

Mais il ne faut pas oublier de convertir le résultat pour passer un entier à analogWrite.

Mais la solution donnée par le sept d'effectuer la multiplication d'abord et la division à la fin devrait te donner un résultat correct.