Bien le bonjour,
J'aimerais mettre les donnée reçue du port série dans un tableau, les donnée sont en binaire (010011100011...
J'ais essayer un truc du genre :
char data = Serial.read();
int length = sizeof(data);
for( int i = 0; i <= length; i++)
{
if(int(data[i]) == 1)
Serial.print("OK \n");
else if(int(data[i]) == 0)
Serial.print("No \n");
else
Serial.print("Err \n");
}
Veuillez m'excuser si il y a des erreur mais j'ais vite fait ce code pour pouvoir montrer un example de l'utilisation souhaiter
Bon ben je penses avoir trouver, j'envoi sur le port série byte par byte que je stoque data_b[a] qui a été défini avec 50 valeur possible (j'envoi 50 byte donc 49 donnée + la donnée null(si j'ais bien compris dans la doc))
Ce qui donne :
char data;
char data_b[50];
int a = 0;
data = Serial.read();
if (data != "|")
{
data_b[a] = data;
data_ok = false;
}
else
data_ok = true;
Voila c'est un gros résumer du code j'espère que je ne me trompe pas :~
Je vois plein de GROSSE erreurs dans tes morceaux de code
Serial.read() retourne UN caractére, pas une ligne ou autre (et encore moins un String).
De plus il faut tester avec Serial.available() qu'il ya des données à lire avant de pouvoir faire le moindre Serial.read().
-> Tu devrais (re)prendre le temps de lire la doc de Serial :
--
Dans ton code n°1:
char data = Serial.read(); // Pas de test pour vérifier si il ya quelque chose de disponible avant de lire -> pas bon !
int length = sizeof(data); // Toujours égale à 1, équivalent à un sizeof(char)
for( int i = 0; i <= length; i++) // pas valable à cause de l'erreur ci dessus
{
if(int(data[i]) == 1) // cast char vers int pour faire un test d'égalité à 1 !?
// char = valeur numérique de -127 à +127 donc pas besoin de cast en int ;)
// De plus "data" est déclaré en char et non en tableau de char donc data[i] est une erreur !
Serial.print("OK \n");
else if(int(data[i]) == 0) // Même remarque que ci dessus
Serial.print("No \n");
else
Serial.print("Err \n"); // Ps: équivalent à Serial.println("Err "); (println = print + \n)
}
Bon ben je penses avoir trouver, j'envoi sur le port série byte par byte que je stoque data_b[a] qui a été défini avec 50 valeur possible (j'envoi 50 byte donc 49 donnée + la donnée null(si j'ais bien compris dans la doc))
On ne travaille pas en ASCIIZ (pas de chaine de caractéres en retour de Serial.read(), juste un char) avec Serial.read().
C'est a toi de faire la gestion des fins de chaine comme tu l'entends
char data;
char data_b[50];
int a = 0;
data = Serial.read();
if (data != "|") // double quote (") = chaine de caractéres, simple quote (') = caractére
// Donc ici "|" est une erreur, de plus tu NE PEUT PAS faire un test d'égalité en C entre deux chaine de char (voir la doc de strcmp)
// Dans tout les cas tester un char avec une chaine de char n'as pas de sens ("|" = { '|', '\0' })
{
data_b[a] = data;
data_ok = false;
}
else
data_ok = true;
// a n'est jamais incrémenté, ya comme un soucis ;)
--
Pour lire une valeur de type 00000000 (8 bits envoyé sous forme de chaine ascii) :
/* Variable globales */
char buffer[8]; // Buffer qui stocke les 8 bits en ascii
byte index = 0; // Itérateur qui permet d'indexer le buffer
byte valeur; // Valeur final
/* Loop() */
void loop() {
// Si les huits bits de la valeur ont été recu
if(index == 8) {
valeur = 0; // Initialisation de la valeur à zéro
// Pour chaque bits
for(byte i = 0; i < 8; ++i) {
// Si le bit est à "1" logique
if(buffer[i] == '1')
valeur |= 1 << i; // Mise à "1" du bit dans la valeur final
// A |= B -> A = A (OU logique bit à bit) B
// 1 << i -> 1 décalé de i bits vers la droite (ex: 1 << 4 = 16)
}
// Affichage de la valeur
Serial.print("Valeur: ");
Serial.println(valeur);
}
// Si des données sont disponible en lecture
if(Serial.available() > 0) {
// Lecture d'un octet depuis le port série
char c = Serial.read();
// Vérification de la validité du bit (caractére '1' ou '0')
if(c != '0' && c != '1') {
// En cas d'erreur on reprend du début
index = 0;
Serial.println("Erreur !");
} else { // Si le bit est valide
buffer[index] = c; // On le stocke en mémoire
++index; // On prépare l'index pour le bit suivant
}
}
}