Que ce soit pour un humain, un animal ou un robot, la prise de décision est une activité permanente. Nous pouvons donc dire que la prise de décision fait partie du comportement biologique ou robotique de l'intelligence en question. Pour un robot, l'étendue de la réflexion (et donc de sa profondeur) pourrait être mesurée par un degré plus ou moins élevé de prise de décision.
Programmation des choix conditionnels
La comparaison
La comparaison est très utilisée pour la prise de décision.
Par exemple : si il pleut, je pars en autobus.
Nous voyons dans cet formulation que si la condition est vrai une action est engagée et pour cela nous utilisons le mot "si".
Par contre rien n'est dit concernant le cas ou il ne pleut pas.
Pour compléter notre formulation nous devons spécifier une autre action. Et notre phrase se transforme ainsi : si il pleut je pars en autobus, autrement je pars à pied.
La structure conditionnelle en if... else
En informatique nous avons des mots réservés pour programmer les prises de décisions et les choix multiples. Le langage Arduino ne fait pas exception puiqu'il est issu du langage C.
Nous avons donc if (si) et else (autre).
Votre robot BOE-Shield-Bot aura souvent besoin de prendre des décisions fondées sur des données issuent de capteurs. Voici un programme simple qui montre le concept de la prise de décision. Il compare la valeur de deux nombres a et de b, et envoie un message pour vous dire si oui ou non a est plus grand que b.
Si la condition (a > b) est vraie, il exécute le bloc de code if : Serial.print("a est plus grand que b"). Si a n'est pas plus grand que b, il exécute alors le bloc de code else : Serial.print("a n'est pas supérieur à b").
- Entrez le code dans l'éditeur, enregistrer le sous "decision_simple" et téléchargez vers la carte Arduino,
- ouvrez le moniteur série et testez pour vous assurer que vous obtenez le bon message,
- essayez d'échanger les valeurs de a et b,
- télécharger à nouveau le programme et vérifier qu'il affiche l'autre message.
// La robotique avec le BOE Shield-bot
// decision_simple
void setup()
{
Serial.begin(9600);
int a = 89;
int b = 42;
if(a > b)
{
Serial.print("a est plus grand que b");
}
else
{
Serial.print("a n'est pas plus grand que b");
}
}
void loop()
{
// Vide, rien à répété
}
Remarque
Peut-être que vous avez seulement besoin d'un message lorsque a est supérieur à b. Si c'est le cas, vous pouvez retirer l'instruction else et son bloc de code comme ceci :
void setup()
{
Serial.begin(9600);
int a = 89;
int b = 42;
if(a > b)
{
Serial.print("a est plus grand que b");
}
}
Le fonctionnement du programme est tout de même assurez car dans la programmation du compilateur et les largesses du langage, il est prévu ce genre de manquement à la discipline de la part du codeur. Mais quand est il vraiment ?
Contre-remarque et avis d'expert
Pour lever le doute et ne pas laisser la machine décider pour nous, nous devons spécifier une autre action. Il vaut mieux en effet détruire le gateau ou le mettre à la poubelle plutôt que de laisser sur la table de la cuisine.
Dans certain langage informatique il existe des instructions pour dire "ne rien faire" (NOP). Dans notre exemple, nous avons deux solutions à notre portée :
- Demandez un affichage vide : else { Serial.print(""); } ,
- ou intitialisé une variable à zéro : else { boolean z = false; }
C'est mon Mentor (c'est lui l'expert) en programmation informatique du labo de recherche en traitement d'image de Poitiers qui me réprimendait fortement quand les blocs "else" de mes codes VHDL passaient à la trappe…
...
if(a > b)
{
Serial.print("a est plus grand que b");
}
else if(a < b)
{
Serial.print("b est plus grand que a");
}
else
{
Serial.print("a est égal à b");
}
...
if((a > 50) && (b < 50))
{
Serial.print("Valeurs normales dans les limites définies");
}
if((a > 100) || (b < 0))
{
Serial.print("Attention danger !");
}
if(a == b)
{
Serial.print("a et b sont égaux");
}
Astuces : utilisé des variables globales, delay(1000) et b = b + 1 à la fin de votre bloc. Bonne programmation !
Introduction : le cerveau de la carte BOE Shield, vocabulaire et prérequis,
étape 3 : stocker et récupérer des valeurs,
étape 5 : Prendre des décisions,
Post a Comment