LEÇON 5: Contrôller Arduino à partir du port Serie

Jusqu’à présent, dans notre programme, nous avons défini les variables, généralement en haut. Afin de modifier le nombre de fois que les LED doivent clignoter, nous modifions les lignes de code qui définissent ces variables. C’est correct pour jouer, mais vous pouvez voir que si vous voulez que d’autres personnes utilisent vos programmes, vous ne pouvez pas les faire jouer avec votre code. Vous devez être capable de recevoir des commandes de l’utilisateur sans modifier le code. Nous pouvons le faire en utilisant le port série. Tout comme nous pouvons imprimer des informations à l’utilisateur à l’aide du port série, nous pouvons également obtenir des informations auprès de l’utilisateur via le port série.

Dans ces exercices, nous continuerons d’utiliser le circuit créé dans Arduino leçon 3. Si vous avez besoin d’aide pour assembler le circuit, revenez en arrière et passez en revue cette leçon. Voici un schéma du circuit avec lequel nous travaillons.

Pour rappel, voici le code avec lequel nous avons travaillé qui intègre toutes les choses que nous avons apprises jusqu’à présent. J’inclus ce code afin que vous puissiez le regarder si vous êtes bloqué et servir d’exemple pour le travail que vous faites. Cependant, pour apprendre la programmation, vous devez taper votre propre code, faire des erreurs et ensuite corriger vos erreurs. Vous n’apprendrez pas la programmation si vous suivez simplement ces leçons en copiant et en collant mon code.

 
int redLED=9;             //Déclarez redLED comme entier (int) et connectez au port 9 
int greenLED=10;          //Déclarez greenLED comme entier (int) et connectez au port 10 
int redOnTime=250;        //Ceci définie la durée donc la LED rouge restera allumé (250ms) 
int redOffTime=250;       //Ceci définie la durée donc la LED rouge restera étteinte (250ms) 
int greenOnTime=250;      //Ceci définie la durée donc la LED verte restera allumé (250ms) 
int greenOffTime=250;     //Ceci définie la durée donc la LED verte restera étteinte (250ms) 
int numgreenBlinks=5;     //Nombre de fois que la LED verte va clignoter (5) 
int numRedBlinks=5;       //Nombre de fois que la LED rouge va clignoter (5) 

String redMessage = "La LED rouge clignote"; 
String greenMessage = "La LED verte clignote";

void setup() { 
Serial.begin(115200); 
pinMode(redLED, OUTPUT);        // Dites à Arduino que redLED est un port de sortie 
pinMode(greenLED, OUTPUT);      //Dites à Arduino que greenLED est un port de sortie 
} 
void loop() 
{ 
Serial.println(redMessage); 
    for (int j=1; j<=numRedBlinks; j=j+1) 
      { 
         // Commencez votre loupe pour la LED rouge 
         digitalWrite(redLED, HIGH);       //Allumez la LED rouge 
         delay(redOnTime);                 //Laissez allumé pendant redOnTime 
         digitalWrite(redLED, LOW);        //Éteindre la LED rouge 
         delay(redOffTime);                //Laissez étteint pendant redOffTime 
     } 
 Serial.println(" " );
 Serial.println(greenMessage );
  for (int j=1; j<=numgreenBlinks; j=j+1)
    { 
      // Commencez votre loupe pour la LED verte 
      digitalWrite(greenLED,HIGH); //Allumez la LED 
      delay(greenOnTime); //Laissez allumé pendant greenOnTime 
      digitalWrite(greenLED,LOW); //Éteindre la LED 
      delay(greenOffTime); //Laissez étteint pendant greenOffTime 
    } 
 Serial.println(" " ); 
} 

Maintenant, examinez ce code et évaluer ce que nous avons appris jusqu’à présent. En haut du programme, nous déclarons nos variables et nous leur attribuons des valeurs. Jusqu’à présent, nous avons travaillé avec des variables de type int et de type String. Ensuite, dans le void setup, nous démarrons notre port série et nous plaçons nos deux sorties Arduino sur OUTPUT. Dans le void loop, nous avons construit deux loupes (for loop) . une pour faire clignoter la LED rouge et ensuite autre pour faire clignoter la LED verte. Les paramètres utilisés dans la loupe( for loop), tels que le nombre de clignotements et la durée de chaque clignotement, sont tous définis en haut du programme.

Comme nous l’avons mentionné au début, il est correct de commencer à faire les choses de cette façon, mais à un moment donné, vous devez obtenir les valeurs des paramètres de la part de l’utilisateur, et pas les coder dans le programme. Vous souhaitez que le programme demande à l’utilisateur combien de fois il souhaite faire clignoter la LED rouge, puis demande combien de fois il souhaite faire clignoter la LED jaune. C’est très facile à faire et nous le faisons via le port série, très similaire à la manière dont nous avons appris à imprimer dans la leçon 3.

Afin d’obtenir les données de l’utilisateur, vous devez vous assurer que vous avez activé votre port série dans votre configuration (void setup). Vous le faites avec la commande Serial.begin (115200); , comme vu dans le code ci-dessus. Vous devez toujours avoir cette commande dans votre configuration (void setup() ) pour imprimer sur le port série ou en lire. Maintenant, pour obtenir les données de l’utilisateur, vous devez faire trois choses:

Demander à l’utilisateur d’entrée la valeur
Attendez que l’utilisateur la saisisse
Lire les informations du port série venant de l’utilisateur

Dans le programme ci-dessus, disons que dans notre void loop(), chaque fois que nous parcourons la loupe, nous voulons demander à l’utilisateur combien de fois il veut que la LED rouge clignote et ensuite lui demander combien de fois pour la LED verte. Dans ce scénario, nous obtenons maintenant les paramètres de l’utilisateur au lieu de les fixer dans le programme. Dans ce cas, nous devons toujours déclarer nos varialbes, mais nous n’avons pas besoin de leur attribuer de valeurs. Donc dans l’exemple du code ci-dessus,

 

int numgreenBlinks=5;           //Nombre de fois que la LED verte va clignoter (5) 
int numRedBlinks=5;             //Nombre de fois que la LED rouge va clignoter (5) 

Devrait être retiré et remplacé par:

 
int numgreenBlinks;           //Nombre de fois que la LED verte va clignoter 
int numRedBlinks;             //Nombre de fois que la LED rouge va clignoter

Vous voyez, maintenant nous déclarons seulement nos variables. Nous ne leur attribuons pas de valeurs, car nous obtiendrons les valeurs de l’utilisateur. Cependant, il est important que toutes les variables que nous utiliserons soient déclarées.

Maintenant, dans notre void loop (), ce serait le code pour obtenir de l’utilisateur le nombre de fois qu’il voudrait faire clignoter la LED.


Serial.println("Combien de fois voulez-vous clignoter la LED rouge?"); //Entrez la valeur ici
while(Serial.available()==0) 
{ 
  // Attendez que l'utilisateur saisisse la valeur
}
numRedBlinks=Serial.parseInt();         //Lire les données que l'utilisateur a introduit

Il y a beaucoup de choses à faire dans ces quelques lignes de code et beaucoup de nouvelles choses à apprendre. La première ligne devrait vous être familière. Vous imprimez simplement sur le port série de l’arduino un message à l’utilisateur que vous attendez qu’il entre une valeur. Dans ce cas, il verra un message lui demandant de mettre un nombre. Maintenant, nous devons nous rappeler que l’ordinateur peut fonctionner beaucoup plus rapidement qu’une personne, alors quand un ordinateur demande à une personne de faire quelque chose, il est important que l’ordinateur s’assoie et attende que la personne l’achève. Ceci est fait dans les deuxième et troisième lignes du code ci-dessus. Ceci est un exemple de loupe while. Vous pouvez voir que la loupe while a une clause associée qui commence et se termine par les accolades. Le programme continuera à exécuter ce qui se trouve entre ces accolades tant que la condition entre parenthèses est vraie. Donc, une loupe while est en quelque sorte une loupe for, sauf que la loupe while peut continuer à tourner indéfiniment tant que la condition entre parenthèses est vraie. Nous devons donc comprendre la partie “condition” du code ci-dessus, qui est Serial.available () == 0. Ce n’est pas aussi évident que cela en a l’air. Serial.available () est une fonction qui, lorsque vous l’appelez, renvoie un «1» si l’utilisateur a des données d’entrée et un «0» si l’utilisateur n’a pas saisi de données. Ainsi, si l’utilisateur n’a pas saisi de données, Seraial.available () sera  0, la condition sera vraie et le programme restera dans la loupe while.

Ce qui faut retenir c’est que:


while(Serial.available()==0) { }

tournera pour toujours en attendant que l’utilisateur entre les données. Lorsque l’utilisateur entrera les données, il passera aux lignes de code suivantes. Notez que nous ne faisons rien dans la loupe while car il n’y a pas de commandes entre les deux accolades. Le but de cette ligne de code est simplement de laisser le programme rester à ce point jusqu’à ce que l’utilisateur entre ses données.

Maintenant que l’utilisateur entre les données, Serial.avaialbe () devient ‘1’ et le programme passe à la ligne de code suivante. La ligne de code suivante,

 
numRedBlinks=Serial.parseInt();

est la ligne qui lit réellement les données. Serial.parseInt () lit le nombre est saisi par l’utilisateur, puis ce nombre est attribué à la variable numRedBlinks. Lorsque vous lisez un entier à partir du port série, vous utilisez Serial.parseInt (). Il existe différentes commandes pour lire d’autres types de variables. Vous pouvez imaginer que si vous lisiez un nombre decimal, vous utiliseriez Serial.parseFloat (). Pour lire une chaîne de charactère, vous devez utiliser Serial.readString (). Le point important est que vous devez utiliser la commande correctement précise pour le type de données que vous essayez de lire.

OK, alors mettez ce code dans votre programme au début de la void loop () et créez une séquence de code similaire pour obtenir de l’utilisateur le numgreenBlinks. Après cela, vous obtenez également d’autres paramètres de l’utilisateur, comme les différentes variables de temps de clignotement. Vous devriez jouer avec cela et être à l’aise en optenant les valeurs de l’utilisateur. Lorsque vous exécutez le code, n’oubliez pas de cliquer sur l’icône en haut à droite de l’IDE Arduino pour faire apparaître le moniteur série. Vous devriez voir l’invite dans le Moniteur série et entrer votre numéro dans la petite case, puis cliquer sur Envoyer ou appuyer sur la touche Entrée.

Leave a Reply

Your email address will not be published. Required fields are marked *