Modifier à la volée une variable dans une boucle
Bonjour,
j'ai réalisé un petit programme qui me permet de lire les data lorsqu'elles se présentent sur le port série.
Je récupère le contenu des variables, le convertis en "int" et là mes données sont prêtes à être utilisées, mais.....c'est aussi là que je bloque.
Dans la boucle "void loop" je ne sais pas comment interroger le port série et modifier l'état d'une sortie en fonction de la valeur reçue, tout cela de façon aléatoire.
voici le programme, avec les dernières lignes en commentaires car elle ne fonctionnent pas comme prévu.
Merci d'avance pour vos explications.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); // RX, TX
/*------------------DECLARATION DES VARIABLES-----------------*/
int Reception=0;
String data="";
int a=0;
char *tableau[5];
String On="";
String Off="";
char buff[64];
int CO2_ON;
int CO2_OFF;
/*------------------------------------------------------------*/
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
delay(1000);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
if (!ds3231.begin()) {
Serial.println("[ERREUR] Impossible d'établir la connexion avec le module DS3231");
Serial.flush();
while (1);
}
}
void loop()
{
if (mySerial.available()>0) /*Interrogation du port serie*/
{
Reception=mySerial.read();
if (char(Reception) != '\n')
{
data+=(char)Reception;
}
else
{
int Taille = data.length() + 1; /*---Longueur de la chaîne-----------------------------------------------------------------*/
char tab_char[Taille]; /*---Tableau de type char dont les dimenssions sont égales à la longueur de la chaîne------*/
data.toCharArray(tab_char,Taille); /*---On passe les caractères de la chaîne dans le tableau créé précedement-----------------*/
for (a=0; a<=4; a++)
{
if (a > 0)
{
tableau[a]=strtok(0,";"); /*découpage de la chaine au niveau des points virgules*/
if (a == 1){Off = tableau[1];}
} /* */
else /* chaque ligne du tableau */
{ /* */
tableau[a]=strtok(tab_char,";"); /* contient un bout de la chaine */
On = tableau[0];
}
}
}
}
if (char(Reception) == '\n')
{
Reception=0;
data="";
/*------------------------CO2_ON--------------------------------------------------*/
String strCO2;
Taille=On.length();
index = On.indexOf("=");
index++;
strCO2=On.substring(index, Taille);
CO2_ON = strCO2.toInt();
/*------------------------CO2_OFF--------------------------------------------------*/
Taille=Off.length();
index = Off.indexOf("=");
index++;
strCO2=Off.substring(index, Taille);
CO2_OFF = strCO2.toInt();
/*-------------------------------------------------------------------------------*/
sprintf(buff, "CO2_ON:%02d CO2_OFF:%02d", CO2_ON, CO2_OFF);
Serial.println(buff); /*Affichage des valeurs de CO2_ON et CO2_OFF*/
Serial.flush();
}
// digitalWrite(LED_BUILTIN, HIGH) ;
// delay (CO2_ON);
// digitalWrite(LED_BUILTIN, LOW) ;
// delay (CO2_OFF);
} |