Go Down

Topic: Aide pour Transformer une String (prov.lecture serie) en Int pour arduino ! (Read 648 times) previous topic - next topic

gef13

Bonjour les Arduinotte!

malgré tous les essais et recherches je suis bloquer sur un truc tout bête !

je reçois de mon pc (port série) une désignation codé (style aaa123456) 3 alpha et reste numérique.

je parviens bien a mettre dans des string TX2 les 3 alpha et TX3 les numerique.

Mon code:
Txt1+=char(incomingByte);}
Txt2=Txt1.substring(0,3);
Txt3=Txt1.substring(3);

jusque la tous vas bien !

mais quand je veux traduire Txt3 en INT (pour pouvoir effectuer des calcul ou transférer dans d'autre int, j'ai erreur !!)

j'ai essayé :  toInt()   et atoi(myChar)  mais mes traduit pas la même valeur de ma chaîne...

j'ai essayé aussi toutes les traduction en HEC,BIN, DEC etc.

mais toujours pas trouvé !!

si vous avez une idée suis preneur !!

merci a tous
cdlt
gerard
Arduino leonard

lolo81

Bonjour,
essai comme ceci:
int MonInt =  Convert.ToInt16(Txt3);
@+
Débutant mais acharné!!

gef13

Merci lolo81 !  pour  int MonInt =  Convert.ToInt16(Txt3);

mais marche pas non plus ! erreur suivante 'Convert' was not declared in this scope

j'ai essayé avec    //  int d=Txt3.toInt[font=Verdana]16[/font]();      car  int d=Txt3.toInt(); 'sans le 16 ne fait pas d'erreur mais me donne pas la bonne valeur.
mais me fait aussi une erreur!

si non y a t'il un notre moyen de récupérer une données en provenance d'un port série et de les garder en INT ou FLOAT ?
je m'explique mon pc m'envoi la donnée 105 mais en lecture sur arduino je suis obligé de récupérer avec read 3 bufer et de les recomposer en 105 peut etre existe t'il un autre moyen pour recréer 105 en int avec autre fonction!!?

je mis prend probablement mal car il me semble que récupérer une donnée autre qu'un simple caractère est la base de communication entre PC et arduino!

je sais plus trop la j'avoue être bloqué !

suis toujours preneur d'info ou de piste a étudier...

cdlt
Gerard


Arduino leonard

skywodd

Bonjour,

Les Strings c'est le mal incarner !
Ça a l'air facile, c'est pratique, mais au final c'est chiant et ça peut foutre un bordel pas possible avec la mémoire RAM.

Utilise les bonnes vielles fonctions de la libc tel que sscanf() ;)

Exemple de code (à adapter suivant ton cas):
http://skyduino.wordpress.com/2012/03/22/arduino-parser-une-chaine-de-caracteres/
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

lolo81

Débutant mais acharné!!

fdufnews

Voilà un code qui fonctionne
Code: [Select]
String Txt1 ="aaa23456";
String Txt2 ="";
String Txt3 ="";
char buffer[7];


void setup(void){
 
  Serial.begin(9600);
 
  Txt2=Txt1.substring(0,3);
  Txt3=Txt1.substring(3);
 
  Serial.println(Txt1);
  Serial.println(Txt2);
  Serial.println(Txt3);
  Txt3.toCharArray(buffer,7);
  Serial.println(atoi(buffer));
}


void loop(void){
}


Maintenant, il fonctionne avec un int comme tu l'as demandé. Seulement 123456 c'est plus grand qu'un int (entre -32768 et +32767) ce qui explique peut être le résultat que tu obtenais. Si tu remplaces le atoi par un atol alors le résultat est correct mais tu dois travailler avec des long

gef13

Merci les amies !

Merci skywodd !
Pour cette solution que je trouve pas mal !
j'ai testé mais j'ai toujours une erreur de trame malgres plusieurs essais de formatage...
(http://skyduino.wordpress.com/2012/03/22/arduino-parser-une-chaine-de-caracteres/)

Merci lolo81 ! ca aussi j'avais testé mais toujours erreur!

et Merci fdufnews !

Effectivement cette solution fonctionne bien ! et j'ai bien compris le problème de la taille et je pense aussi que la différence que j'avais dans mes 1er test était en rapport avec la taille...

vous m'avez bien aidé et je vous en remercie !

maintenant je vais me pencher sur l'utilisation de float en place de int avec le système de fdufnews et me re pencher aussi sur sscanf()
car je pense aussi éviter le plus possible les strings...

Bonne journée a tous et merci encore.
cdlt gerard



Arduino leonard

Go Up