Pages: 1 2 [3]   Go Down
Author Topic: Transferts de données entre arduino par la liaison série  (Read 4115 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pourquoi bloquer le programme tant qu'on ne reçoit pas de caractère ?   =>while(Serial.available() < 1); // Block until Serial data available
Je fait toute mes fonctions de réception en tant que fonction bloquante, aprés c'est un choix tu peut aussi conditionner l'appel à la fonction avec un if(Serial.available() > 0) juste avant.

Pourquoi tester le caractère '\0' qui correspond au code NULL?
J'ai réfléchi comme si c'était une chaine de caractéres smiley-roll-sweat un test avec '\n' serais plus malin ... Nobody is perfect ...

Pourquoi initialiser la valeur de str dans la fonction alors que l'on gagne 36 octets de prg en le faisant dans les définitions =>   *str = ""; // Init String 1°ligne de la fct
(...)
Ne peut-on pas faire une addition composée sur une valeur pointée et gagner 126 octets de prg ?  =>*str = *str + c; // Append char to string  =>(*str += c;)
... Là c'est du vraiment du grappillage ... oui tu peut faire un += et faire l'initialisation avant l'appel, mais à ce moment si tu veut vraiment gratter le moindre octets de ram/flash c'est un char[] qu'il faut utiliser ...

Euh, une dernière remarque  smiley-roll-sweat ça ne fonctionne pas smiley-zipper
A pars le if(c == 10) que j'ai repris de ta fonction sans chercher à comprendre je vois pas ce qui pourrai planter ...

Code:
void decode_rx(String *str){
  char c = Serial.read();
  while(Serial.available() > 0 && c != '\n'){
    *str += c;
    c = Serial.read();
  }
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

FR
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Perdu dans le médoc
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Merci pour la réponse  smiley-sweat
Je viens de lire que le '\0' est le caractère qui même si on ne le voit pas, fini chaque chaîne de caractère implicitement:
- comme  justement je travaille sur des chaînes de caractères  smiley-sweat, ça me fait le '\n' en moins a envoyer ...
Pour le grapillage : 36+126=162 octets pour 2 instructions smiley-eek A l'échelle d'un programme, je trouve ça  smiley-eek-blue
Pour le char[], la 2° solution, la taille  divisée par 2, ça me plait  smiley-wink

Quote
Euh, une dernière remarque  smiley-roll-sweat ça ne fonctionne pas smiley-zipper
A pars le if(c == 10) que j'ai repris de ta fonction sans chercher à comprendre je vois pas ce qui pourrai planter ...
Ben justement, vu que j'envoie le '\n' juste après (...le '\0' que je ne savais pas qu'on envoyais!), on rentre jamais dans cette partie de boucle...

-La 2°solution, bien la fct "memset" pour faire une init de chaine, mais la fct "decode_rx" ne marche pas comme mon prg, je peux pas faire de test de la chaine
complète dans la suite, je vais voir ça de plus près...
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

-La 2°solution, bien la fct "memset" pour faire une init de chaine, mais la fct "decode_rx" ne marche pas comme mon prg, je peux pas faire de test de la chaine
complète dans la suite, je vais voir ça de plus près...
hu? Peut pas faire de test sur la chaine ?
-> strcmp ?
Code:
if(strcmp(chaine_recu, "blabla") == 0)
  Serial.print("balbla recu !");
Je vois pas ce qui te pose probléme, enfin j'ai pas compris ou tu avait un probléme smiley-sweat
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

FR
Offline Offline
Newbie
*
Karma: 0
Posts: 49
Perdu dans le médoc
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Raah, trop rapide !
Au départ, je voulais juste savoir si il était possible d'écrire ma fonction "mieux" (plus "programmeur" => optimisé, moins de place  smiley-sweat)
La version 2 va dans ce sens: le problème, si je veux faire le test dans mon prg: if (hein == "ben_alors"){
"ben_alors" est la chaine de caractère que j'envoie depuis l'autre côté (ou le Serial Monitor ou un autre arduino!), decode_rx la décode smiley-grin
et comme j'en envoie plein (de chaines de caractères), je conditionne des branchements derrière "en fonction de".
M'exprime-je bien smiley-sweat
Logged

PARIS
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
 peut être pourriez vous m'aider, j ai un clavier PS/2 connecté sur un arduino alimentation sur broch +5 volt et Grnd et broche 8 et 2 pour les data et l irq. Je recois bien les données mais je voudrais envoyer au clavier deux octet F3 et 00. POurriez vous m indiquer si il faut utiliser Serial.write tet comment, merci d avance
Logged

Pages: 1 2 [3]   Go Up
Jump to: