Tout d'abord, la configuration: beta Arduino IDE 1.5.7, Nano v3.0Arduino: Serial.find (char) ne fonctionne pas
En bref, mon objectif: utiliser Serial.find() pour attendre les deux normes EOL caractères (ASCII 13, CR et ASCII 10, NL) à trouver dans le tampon série, avant de passer au code suivant.
mon (problématique/raccourci) Code:
char charCr = 13;
char charNl = 10;
void loop(){
do_stuff;
foo();
do_other_stuff;}
void foo()
{
while (true)
{
if (Serial.find(bar1) && Serial.find(bar2))
{
break; // EOL characters found
}
delay(1); // wait to receive EOL
};
}
OK, donc deux problèmes distincts avec ce qui se passe dans bar1
et bar2
Si le bars
sont respectivement charCr
et charNl
alors le code ne compiler tout en se plaignant:
error: call of overloaded 'find(char&)' is ambiguous
note: candidates are:
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:221
trouve une correspondance proche, qui, je, croire est la définition correcte de trouver, comme Serial
inhereits à partir Stream
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:59:8: note: bool Stream::find(char*) <near match>
bool find(char *target); // reads data from the stream until the target string is found
Mais alors plaint aussi que l'entrée char doit être un pointeur (char *):
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:59:8: note: no known conversion for argument 1 from 'char' to 'char*'
La documentation que j'ai lu sur Serial.find() et Stream.find() suggère que char devrait pas être un pointeur, juste pour passer la valeur char. Indépendamment, si bar1
et bar2
sont référencés comme &charCr
et &charNl
le code compile bien, mais le conditionnel n'est jamais rencontré, et je sais que j'envoie les deux caractères EOL, comme confirmé par différents moyens et code de débogage.
Alors ... qu'est-ce qui ne va pas avec mon code?
De commentaire: 'lit les données du flux jusqu'à ce que la cible se trouve STRING' ie. pas char, string, c'est pourquoi il demande des pointeurs. –
oui, mais il dit aussi pour le type de données d'entrée "target: la chaîne à rechercher (char)" ... alors quelle serait la bonne syntaxe? et pourquoi, quand j'utilise l'opérateur de référence et ne le trouve-t-il pas? – brneuro
Essayez-le - recherchez une chaîne CR/LF à terminaison nulle, voir si cela fonctionne. En cas de doute, suspectez la documentation, (surtout si je l'ai écrit :). –