Arduino 06arduino_goodfields_64.jpgEcrire plus simplement
 
Sommaire

Ecrire  plus simplement Ecrire plus simplement
La page principale ... La page principale ...
   
Vers le début Vers Page 2 Vers sommaire Ecrire plus simplement
L'écriture de sorties série est un peu rébarbative et longue. Une bibliothèque va nous permettre de simplifier l'écriture .
Cela va aussi nous permettre d'apprendre à intégrer une bibliothèque externe.

Vous avez déjà des bibliothèques (librairies) dans l'arbre de base : regardez dans :
C:\arduino-1.0.3\libraries
ou
C:\Program Files (x86)\Arduino\libraries (version 1.0.5)
selon votre installation du kit de développement.

On va télécharger la bibliothèque STREAMING :
http://arduiniana.org/libraries/streaming/ ou la mienne , modifiée (allez voir dans example, j'ai tout expliqué pourquoi) :
Ma librairie Streaming_modifie.zip Ma librairie Streaming_modifie.zip

Dé-zipper le .zip et copier l'arbre dans C:\...arduino...\libraries\

Ensuite, ajouter cette librairie à votre code par "Croquis, importer bibliothèque, Streaming"
Ceci va vous rajouter la ligne :
#include <Streaming.h>
/*
Note : on peut utiliser des <> ou des ""
Dans le premier cas <>, la librairie dans le répertoire library sera privilégiée
Dans le second cas "", la librairie locale sera privilégiée
*/

Qu'il me semble bon de déplacer après vos titres ... juste avant les déclarations ...


Ensuite, vous allez pouvoir transformer :
Serial.print ("BOUTON appuy\xE9 grafcet_a=");
    Serial.print (grafcet_a);
    Serial.print (" tempo_a=");
    Serial.print (tempo_a);
    Serial.print (" grafcet_b=");
    Serial.print (grafcet_b);
    Serial.print (" tempo_b=");
    Serial.println (tempo_b);

En :
    Serial << "BOUTON appuy\xE9 grafcet_a=" << grafcet_a << " tempo_a=" << tempo_a << " grafcet_b=" << grafcet_b << " tempo_b=" << tempo_b << endl;

Avouez que c'est largement plus clair, et plus facile à écrire !

Voici le listing à jour

/*
  GoodFields 6_Streaming
  Compactage des sorties série (intégration d'une bibliothèque : Streaming)
  GRAFCET
  TEMPORISATION basique
  FRONT MONTANT/DESCENDANT
*/ 
//**********************************************************
// BIBLIOTHEQUES
#include <Streaming.h>

//**********************************************************
// DECLARATIONS
// entrées-sorties
int led_a = 13;
int led_b = 12;
int bp = 2;
int bp_etat, bp_memoire;
// vitesse de clignotement
int tempo_a_reset=10000;
int tempo_b_reset=7000;
// temporisations
int tempo_a,tempo_b;
// GRAFCETS
int grafcet_a,grafcet_b;

//**********************************************************
// INITIALISATIONS
void setup() {                
// initialize the digital pins
  pinMode(led_a, OUTPUT);     
  pinMode(led_b, OUTPUT);     
  pinMode(bp, INPUT);     
// ligne série (pour traces)
  Serial.begin(4800);  // ou 9600 selon votre port COM
// on arme les grafcets
  grafcet_a = 1;
  grafcet_b = 1;
}
//**********************************************************
// PROGRAMME PRINCIPAL
void loop() {

// gestion des TEMPORISATIONS
  if (tempo_a > 0 ) tempo_a--;
  if (tempo_b > 0 ) tempo_b--;
  
//--------------------------------
// GRAFCET A
switch (grafcet_a) {

  case 1:
  if ( tempo_a == 0 ) {        // si la tempo est terminée,
    digitalWrite(led_a, HIGH);   // on allume la LED
    tempo_a = tempo_a_reset;             // on arme la tempo
    grafcet_a++;               // et on passe à l'étape suivante
  }
  break;      // cette instruction vous fait sauter à la fin du "switch"
  // sinon, on continue, et cela fait perdre du temps, et il peut arriver que d'autre "case" fonctionnent ! 

  case 2:
  if ( tempo_a == 0 ) {
    digitalWrite(led_a, LOW);    // turn the LED off by making the voltage LOW
    tempo_a = tempo_a_reset;             // on arme la tempo
    grafcet_a=1;               // on reboucle
  }    
  break;

// si grafcet_a n'a pas une valeur correcte, on passe ici
  default: 
      grafcet_a = 0; // on arrête
  break;
}      // fin du "switch"
// FIN GRAFCET A
//--------------------------------
// GRAFCET B
switch (grafcet_b) {

  case 1:
  if ( tempo_b == 0 ) {        // si la tempo est terminée,
    digitalWrite(led_b, HIGH);   // on allume la LED
    tempo_b = tempo_b_reset;             // on arme la tempo
    grafcet_b++;               // et on passe à l'étape suivante
  }
  break;      // cette instruction vous fait sauter à la fin du "switch"

  case 2:
  if ( tempo_b == 0 ) {
    digitalWrite(led_b, LOW);    // turn the LED off by making the voltage LOW
    tempo_b = tempo_b_reset;             // on arme la tempo
    grafcet_b=1;               // on reboucle
  }    
  break;

// si grafcet_a n'a pas une valeur correcte, on passe ici
  default: 
      grafcet_b = 0; // on arrête
  break;
}      // fin du "switch"
// FIN GRAFCET B
//--------------------------------
// Bouton-poussoir
  bp_etat = !digitalRead(bp);
  if (!bp_memoire && bp_etat){
    Serial << "BOUTON appuy\xE9 grafcet_a=" << grafcet_a << " tempo_a=" << tempo_a << " grafcet_b=" << grafcet_b << " tempo_b=" << tempo_b << endl;
  }
  if (bp_memoire && !bp_etat) {
    Serial << "BOUTON lach\xE9" << endl;
  }
// pour ralentir l'ARDUINO
  if (bp_etat){ delay(1); }
  
// mise en mémoire pour le prochain tour
  bp_memoire = bp_etat;
//--------------------------------

}
//**********************************************************

La page principale ... La page principale ... la suite ... la suite ...

Dernière mise à jour : 16:32:29 04/07/2018