Go Down

Topic: Débutant en développement Arduino, un petit coup de main svp - Resolu- (Read 1 time) previous topic - next topic

Leprecis

Bonjour,

Je rencontre le problème suivant :
Je récupère un string avec une chaîne de 31 octets, je découpe ce string mais je n'arrive pas à convertir en Décimal, les découpages.
Code: [Select]

void checkCode(){
   Serial.println(Resultat);
   long myNum = Resultat.toInt();
   int zeros = 31 - String(myNum,BIN).length();
   String myStr;
   String CodeAngAcces;
   String JourDepuisTop;
   String NbreNuit;
   String Rang;
   String Idlock;
   String Dupl;
   
for (int i=0; i<zeros; i++) {
 myStr = myStr + "0";
}
  myStr = myStr + String(myNum,BIN);        
  CodeAngAcces=myStr.substring(0,3);
  JourDepuisTop=myStr.substring(3,14);
  NbreNuit=myStr.substring(14,20);
  Rang=myStr.substring(20,25);
  Idlock=myStr.substring(25,28);
  Dupl=myStr.substring(28,31);

Voila j'aimerai avoir le code pour convertir mon string "CodeAngAcces, jourDepuisTop, etc..." en décimal, car il contient un chiffre Binaire.

Merci de votre indulgence, dans mon code et mes explications. :P

jean-I

a priori tu rajoute des "0" a ta chaine, ce qui laisse sous entendre qu'elle n'a pas une taille fixe.
ce qui laisse egalement sous entendre que la longueur des data n'est pas figée.

"car il contiend un chiffre binaire", c'est a dire?
- il pourrait ou il doit? contenir un et un seul chiffre binaire?
- lequel est ce? 8 bits? 16bits? ou plus? poids fort et poids faible?

plusieurs exemples concret de ta chaine aideraient.
eventuelement avec le renvoi en serial.println des decoupages serait un plus.

fdufnews

#2
Sep 16, 2014, 09:37 pm Last Edit: Sep 16, 2014, 09:39 pm by fdufnews Reason: 1
voir là : http://arduino.cc/en/Reference/StringToInt

Mais il y a des méthodes plus simple sans passer par une chaîne de caractères.
En utilisant des décalages et un masque.
Soit
long toto=0x12345678;

si tu fais
unsigned char titi;
titi =(unsigned char) (toto & 0xF);
titi contiendra 8 le résultat du ET entre toto et le masque 0xF. OxF = 0001111 en binaire ce qui ne laisse passer que les 4 bits de poids faibles.
Maintenant si tu veux récupérer les 4 bits précédents
unsigned char tutu;
tutu =(unsigned char) ((toto shr 4) & 0xF);
tutu contiendra 7 le résultat du ET entre toto décalé 4 fois sur la droite et le masque 0xF

Tu peux itérer autant de fois que nécessaire pour découper ton long en petits morceaux en remplaçant le 4 de mon exemple par une variable partant de 0 et s'incrémentant de 4 en 4.

Leprecis

Merci pour ta réponse en effet sur le premier exemple c'est ok par contre, des que je veux décaler
tutu =(unsigned char) ((toto shr 4) & 0xF); j'ai un message d'erreur.

Une idée ?

B@tto

Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

fdufnews

#5
Sep 17, 2014, 11:13 am Last Edit: Sep 17, 2014, 11:15 am by fdufnews Reason: 1

tutu =(unsigned char) ((toto>>4) & 0xF);

Bien sur!!
Mais pourquoi est-ce que j'ai écrit shr  :smiley-eek:????


fdufnews

Pour que tout le monde sache que le sujet est clos, il faut que tu édites ton premier post en indiquant résolu dans le titre de celui-ci.

Go Up