1.8 Mélangeons les programmes pour aller plus loin !

Et si on mélangeait les programmes que nous avons créé ?
On va commencer par combiner les programmes Blink led et celui sur l’utilisation du moniteur Série !

Les programmes de base :

Voici les deux programmes sur lesquels on va se baser :

// Blink avec #define
// Pour prendre les bonnes habitudes dès le départ

#define LEDPIN 13 //Associe 13 au mot " LEDPIN " dans le programme 
//ce qui a pour conséquence de tout simplement remplacer tout les LEDPIN dans le programme par  13.


#define PAUSEON 500 //Associe 500 à PAUSEON.

#define PAUSEOFF 500// Associe 500 à PAUSEOFF

void setup() { 

pinMode(LEDPIN, OUTPUT); //Déclare le numéro de pin associé à LEDPIN comme une sortie = pinMode(13, OUTPUT);

} 

void loop() { 

digitalWrite(LEDPIN,HIGH); //Place le pin digital 13 à l'état HAUT (5V) -> Led allumée
delay(PAUSEON); //Met en pause le programme pendant la valeur de PAUSEON en ms

digitalWrite(LEDPIN,LOW); //Place le pin digital 13 à l'état BAS (0V) -> Led éteinte
delay(PAUSEOFF); //Met en pause le programme pendant la valeur de PAUSEOFF en ms
}
// define 
#define TEMPSENMEMEOIRE 3000 // votre arduino est un poisson rouge qui retient votre prénom pendant 3000 secondes

//Variables :
String msg = "  "; //Variable de type suite de caractère qui est initialisé avec un espace vide

void setup()
{
Serial.begin(9600);
Serial.println("Salut ! Quel est ton prenom ?");
}

void loop()
{
if (Serial.available() ) 
{ 
msg = Serial.readString(); //Stocke le message sous forme de String dans msg
Serial.print("--> "); //Affiche une flèche
Serial.println(msg); //Puis votre message
Serial.print( "Salut " ); 
Serial.println(msg); //Puis votre 
Serial.println(""); //Puis on saute une ligne
delay(TEMPSENMEMEOIRE); // on attend que le temps de mémoire qu'on a choisi en defien
msg =" "; //On oublie le prénom , on vide la mémoire
Serial.println("Salut ! Quel est ton prenom ?");
}
}

Le premier programme permet de faire clignoter une led et le second permet d’effectuer une tâche en fonction du texte envoyé, on pourrait donc essayer de faire un programme permettant de changer l’état de la led en fonction du texte envoyé.

Créer un programme à partir de ces programmes :

Pour combiner deux programmes, il vous faut procéder étape par étape, la première étant de vérifier que les variables utilisées dans les programmes ne sont pas les mêmes. Dans notre cas il n’y en a pas donc on va débuter le programme tout en séparant bien ce qui concerne la led et ce qui concerne la communication Série :

//Informations nécessaires pour la led :
#define LED 13

//Informations nécessaires pour la communication série :
#define BAUDRATE 9600 //9600 bauds par défaut
int recep;  //Variable de test pour la réception
String msg; //Variable contenant le message

Puis on remplit le setup() :

void setup() {
  //Déclaration de la led en tant que sortie :
  pinMode(LED, OUTPUT);

  //Initialisation de la liaison Série :
  Serial.begin(BAUDRATE);
}

Et enfin on s’attaque au coeur du programme. Première étape, on vérifie qu’une donnée est disponible dans l’interface Série :

if (Serial.available() > 0) //Si un message a été reçu :
{

}

Et si oui on effectue les actions souhaitées :

if (Serial.available() > 0) //Si un message a été reçu :
  {

  msg = Serial.readString(); //Lit le message reçu comme une suite de caractères
  Serial.print(msg); //Affiche le message dans l'interface Série
  
    if (msg == "on") //Test du message pour on
    {
      digitalWrite(LED, HIGH); //Allume la led
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }

    else if (msg == "off") //Test du message pour off
    {
      digitalWrite(LED, LOW); //Éteint la led
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }
    else //Si le message n'est ni on ni off = Sinon
    {
      Serial.println(" -> Commande inconnue");
    }
  }

Une toute fois toutes les parties assemblées on obtient ce programme :

//Informations nécessaires pour la led :
#define LED 13

//Informations nécessaires pour la communication série :
String msg; //Variable contenant le message

void setup() {
  //Déclaration de la led en tant que sortie :
  pinMode(LED, OUTPUT);

  //Initialisation de la liaison Série :
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) //Si un message a été reçu :
  {

  msg = Serial.readString(); //Lit le message reçu comme une suite de caractère
  Serial.print(msg); //Affiche le message dans l'interface Série
  
    if (msg == "on") //Test du message pour on
    {
      digitalWrite(LED, HIGH); //Allume la led
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }

    else if (msg == "off") //Test du message pour off
    {
      digitalWrite(LED, LOW); //Éteint la led
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }
    else //Si le message n'est ni on ni off = Sinon
    {
      Serial.println(" -> Commande inconnue");
    }
  }
}
Programme complet

Maintenant que le programme est terminé, vérifiez que rien ne court-circuite votre carte, branchez-la à votre PC et téléversez le programme. Une fois ceci fait, ouvrez le moniteur série, il vous permettra de commander la led grâce aux commandes on et off comme ceci :

ss (2016-07-20 at 01.34.40)

 

Vous voici maintenant capable de faire réagir votre carte à des messages envoyés par l’interface Série !

 

Maintenant si on incluait une librairie aussi pour corser la chose ? 

C’est parti !

Vous vous rappelez du dernier  code du chapitre précédent avec la table d’ordonnancement ? Et bien on va le combiner avec le code qui est juste au dessus !

Voici donc un autre exemple de codes combinés, avec cette fois incluant une librairie, la librairie ScheduleTable !

#include <ScheduleTable.h>  // on inclue la librairie

#define LED 13  // On définie le pin sur laquelle est la led qu'on va faire clignoter

// On définie la table d'ordonnancement 
ScheduleTable blinkLED(2,1000); //(Nombres d'actions, sur 1000ms)



//Informations nécessaires pour la communication série :
String msg; //Variable contenant le message

void setup() {

  
  //Initialisation de la liaison Série :
  Serial.begin(9600);

  
  pinMode(LED, OUTPUT);

  blinkLED.at(100,ledON);
  blinkLED.at(600,ledOFF);

}

void loop() {
  ScheduleTable::update(); //Met à jour la table
  if (Serial.available() > 0) //Si un message a été reçu :
  {

  msg = Serial.readString(); //Lit le message reçu comme une suite de caractère
  Serial.print(msg); //Affiche le message dans l'interface Série
  
    if (msg == "on") //Test du message pour on
    {
      blinkLED.start(); //Fais tourner la table infiniment
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }

    else if (msg == "off") //Test du message pour off
    {
        blinkLED.stop(); // arrête la table
      Serial.println(" OK"); //Affiche OK sur l'interface Série afin de montrer que l'opération est terminée
    }
    else //Si le message n'est ni on ni off = Sinon
    {
      Serial.println(" -> Commande inconnue");
    }
  }
}

//Les actions :
void ledON()             //Allumer la led
{
  digitalWrite(LED, HIGH);
}

void ledOFF()            //Eteindre la led
{
  digitalWrite(LED, LOW);
}

 

Si vous êtes arrivés jusque là Bravo ! N’hésitez pas à combiner d’autres parties de code vu dans l’ouvrage 😉 On apprend jamais mieux qu’en expérimentant ! Donc allez y essayez !

Pour ceux qui le souhaitent on va finir ce tome par un petit récapitulatif de tout ce qu’on a vu dans cet ouvrage !

 

<- Retourner à la page précédente | Passer à la page suivante ->

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *