Arduino 06
Ecrire plus simplement
Sommaire
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) :
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;
//--------------------------------
}
//**********************************************************
Dernière mise à jour : 16:32:29 04/07/2018