Obtenir un grand nombre [Résolu]

Bonjour, j'aimerai récupérer un nombre sur le moniteur série et le multiplier par 1000 pour avoir ce nombre en seconde. Lorsque je multiplie le "frequency" par 100 tout va bien, mais lorsque je le multiplie par 1000, je reçcois une valeur aléatoire.. Je me doute que je sors de la plage de réglage du unsigned int mais je ne comprend pas pourquoi.
Par exemple si je met 100 dans le moniteur série, il m'affiche bien 100 comme fréquence et puis après la multiplication il m'affiche 34467.....

while(true)
  {
    if(Serial.available())
    {
      int frequency = Serial.parseInt();
      Serial.println(frequency);
      unsigned int tempo=frequency * 1000;
      Serial.print("La valeur de la tempo est de : ");
      Serial.println(tempo);
      break;
    }
    }

Utilise des unsigned long qui plafonnent à 4 294 967 295 (2^32 - 1).

J'avais déjà essayé. Je met tempo en unsigned long et quand je met 100 dans le moniteur série il me ressort 4294....... alors que je ne sors pas de la plage de mesure. Il devrait me donner 100 000
D'ou peut venir le problème?

Serial.println(frequency);

ça te donne bien 100 ?

Essaye

unsigned long tempo=frequency * 1000ul;

Oui ça me donne bien 100. Et avec le 'ul' en plus ca fonctionne. Par contre j'aimerai bien savoir pourquoi? :slight_smile:

Felicien9:
Oui ça me donne bien 100. Et avec le 'ul' en plus ca fonctionne. Par contre j'aimerai bien savoir pourquoi? :slight_smile:

les maths par défaut en C sont fait en int

si f est un int et que vous écrivez long toto = f * 1000; alors f * 1000 est d'abord calculé en entier (sur 2 octets sur un arduino de base), puis converti en 4 octets pour être mis dans un long. si ça déborde lors du premier calcul, c'est la misère...

en mettant 1000l vous avez un des 2 éléments dans le calcul long toto = f * 1000[color=red][b]l[/b][/color]; qui est un long et donc tout le calcul se fera en long et pas de soucis

Merci beaucoup de votre aide.

Comment est-ce que je peux mettre le post en "résolu"?

Vous éditez le premier post et rajoutez [Résolu] dans le titre

(profitez en aussi pour lire les messages épinglés en haut du forum sur les bonnes pratiques d’usage du forum)