Résoudre des problèmes mathématiques

Les mathématiques sont partout et utilisé pour évaluer, comparer ou calculer la valeur de votre prochaine consigne pour le déplacement de votre robot. Vous allez voir ici, comment utiliser, avec Arduino, les nombres et les manipuler avec des opérateurs arithmétiques.

Les opérateurs arithmétiques

Les opérateurs arithmétiques sont utiles pour faire des calculs dans votre programme. Dans cette section nous allons nous concentrer sur les opérateurs essentiels :

  • l'affectation (=),
  • l'addition (+),
  • la soustraction (-),
  • la multiplication (*),
  • la division (/),
  • le modulo (%), c'est le reste d'un calcul de division).

Si vous ouvrez la référence du langage Arduino, vous trouverz la liste complète des opérateurs.

Programme simple : une addition

Le programme suivant, addition_simple, ajoute les variables a et b entre elles et stocke le résultat dans c. Il affiche également le résultat dans le moniteur série.
La ligne d'instruction " int c = a + b; " utilise l'opérateur d'affectation "=" pour copier le résultat de l'addition.

Notez que c est maintenant déclaré comme un int, ce n'est plus une variable de type char.

La figure ci-dessous montre le résultat attendu de 89 + 42 = 131 dans le moniteur série.
Affichage du résultat de l'addition dans le moniteur série

Travaux pratiques : afficher le résultat dans le moniteur série

  • Entrez, enregistrer et télécharger le programme addition_simple vers votre Arduino,
  • vérifiez le résultat dans le moniteur série,
  • est-il exact ?

// La robotique avec le BOE Shield
// addition_simple

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

  int a = 89;
  int b = 42;
  int c = a + b;

  Serial.print("a + b = ");
  Serial.println(c);  
}

void loop()
{
  // Vide, pas de code à répéter.
}

Conseils d'optimisation

Adaptez le type de vos variables aux valeurs de résultats attendues.
Cela permettra d'utiliser moins de mémoire et d'écrire des programmes qui s'exécuteront de manière plus efficace.

  • Si vous avez besoin de travailler avec des valeurs décimales, utilisez le type float,
  • si vous utilisez des valeurs entières (nombres entiers), choisissez byte, int ou long,
  • si votre résultat est toujours un nombre non signé de 0 à 255, utiliser le type octet,
  • Si vos résultats sont compris dans les bornes [-32768] à [32767], utiliser de type int,
  • Si vous avez besoin d'une valeur supérieure à celle du type int, essayez une variable de type long à la place. Le type long peut stocker des valeurs de -2147483648 à 2147483647 (il prend plus de place en mémoire !).

Expériences avec les autres opérateurs arithmétiques

Vous avez encore -, *, / et % à essayer !

  • Remplacer les signes plus (+) par l'opérateur de soustraction (-),
  • téléchargez et vérifiez le résultat dans le moniteur série,
  • Répétez l'exercice pour la multiplication (*), la division (/) et le modulo (%).

Caculs en virgule flottante

Imaginez que votre robot BOE shield-Bot participe à un concours où vous devez le faire évoluer dans un cercle. Le rayon du cercle est annoncé quelques minutes avant le début de l'épreuve. Dans cette situation, vous aurez un avantage si votre code peut calculer à la demande, la circonférence du cercle. La circonférence est égal à 2 fois pi fois r, où r est le rayon du cercle et pi = 3,14159. Ce genre de calcul est beaucoup plus facile à faire avec des nombres représentés en virgule flottante.

Voici un extrait de code qui effectue le travail. Remarquez qu'il utilise PI au lieu de 3,14159. PI est une constante intégrée au langage C (une valeur nommée qui ne change pas dans le programme). Notez également que toutes les valeurs sont décimales. Cela implique quelles sont représentées comme des nombres en virgule flottante.

float r = 0.75;
float c = 2.0 * PI * r;

Calcul de la circonférence d'un cercle

  • Entrez le programme circonférence dans l'éditeur Arduino et enregistrer le,
  • assurez-vous d'utiliser les valeurs 0.75 et 2.0 ; ne pas essayer d'utiliser 2 au lieu de 2.0 ,
  • téléchargez votre programme et vérifier les résultats dans le moniteur série.

// La robotique avec le BOE Shield
// circonférence

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

  float r = 0,75;
  float c = 2.0 * PI * r;
 
  Serial.print("Circonférence = ");
  Serial.println(c);
}

void loop ()
{
// Vide, aucun code à répéter
}

Exercice : calculer l'aire d'un cercle

L'aire d'un cercle est égale à pi×r2. Astuce : r2 peut être aussi exprimé simplement par r * r.

  • Enregistrer votre programme circonference sous aire_du_cercle,
  • ajouter une variable "a" de type float, pour stocker le résultat du calcul de la superficie,
  • mettre une ligne de code pour afficher la superficie,
  • exécutez le programme et comparez la réponse avec une calculatrice.

Une autre manière de calculer l'aire d'un cercle : S = (pi D2) / 4 .
Regardez la figure suivante et cherchez la solution pour obtenir la même chose.
Affichage du résultat du calcul de l'aire du cercle dans le moniteur série
[ Voir la solution ].