J’ai besoin de tes lumières
Le but : 2 arduino uno relies par en série avec 2 fils (RX/TX) ,récupérer les données
Un arduino uno envoi des valeurs de plusieurs capteurs
L’autre arduino uno récupère les valeurs et travaille avec ces valeurs
La trame comprend du texte, des entiers et des nombre à virgule, séparé par des points virgules
Exemple : A1;260;35;23.55;11.65
Cela correspond à :
A1= numéro d’alarme
260 = profondeur
35 = niveau
23.55 = température
11.65 = voltage
Le séparateur point-virgule il me servira pour créer un fichier texte sur une SD branché sur le 2ieme aduino pour ensuite le lire avec Excel et faire des courbes
En gros transférer et mapper les données et pouvoir utiliser cees données
Quelque chose de simple, mais qui peut être facilement modifiable si on veut mettre, par exemple un fload a la place du premier texte, ou un texte a la place d’un entier
Donc j’envoi
Code : Tout sélectionner
Serial.print("Alarm");Serial.print(Alarm);Serial.print(";");
Serial.print(Val_X - Ang_Milieu);Serial.print(";");
Serial.print(Pression_Relative);Serial.print(";");
Serial.print(bmp.readTemperature());Serial.print(";");
Serial.print(Tension);Serial.print(";");
Serial.println();
Code : Tout sélectionner
#include <SoftwareSerial.h>
SoftwareSerial serial(1, 0); // RX, TX pour Nano
#define TAILLE_MAX 32
char texte[TAILLE_MAX / 2], unite;
int valeur, index, diviseur;
void setup() {
Serial.begin(9600);
}
void loop() {
if(recupInfo(texte, &valeur, &index, &diviseur, &unite)) {
Serial.println("Erreur de trame !");
return;
}
Serial.print("Texte: ");
Serial.println(texte);
Serial.print("Valeur: ");
Serial.println(valeur);
Serial.print("Index: ");
Serial.println(index);
Serial.print("Diviseur: ");
Serial.println(diviseur);
Serial.print("Unité: ");
Serial.println(unite);
}
/*
* Parse une chaine au format $ texte;valeur;index;diviseur;°c/f;
* Et retourne la valeur des differents champs.
*/
int recupInfo(char *texte, int *valeur, int *index, int *diviseur, char *unite) {
char c, buf[TAILLE_MAX + 1];
unsigned char i = 0;
do { /* Attente du $ espace */
while(Serial.available() < 2); /* Attente de 2 char sur le port série */
}
while(Serial.read() != '$' && Serial.read() != ' ');
do{ /* Remplissage du buffer */
if(i == (TAILLE_MAX + 1)) /* Si la chaine a dépassé la taille max du buffer*/
return 1; /* retourne 1 -> erreur */
while(Serial.available() < 1); /* Attente d'un char sur le port série */
}
while((buf[i++] = Serial.read()) != 0x1A);/* Tant que char != 0x1A (fléche) -> boucle */
buf[i] = '\0'; /* Cloture la chaine de char */
i = 0;/* Copie le texte au début de buf[] dans texte[] */
while((texte[i] = buf[i]) != ';') i++;
texte[i] = '\0';
if(sscanf(buf + i, ";%d;%d;%d;%*c%c;", valeur, index, diviseur, unite) != 4) /* Parse la chaine de caractére et extrait les champs */
return 1; /* Si sscanf n'as pas pu extraire les 4 champs -> erreur*/
return 0; /* retourne 0 -> pas d'erreur */
Merci d'avance