Go Down

Topic: comment couper des données reçu (Read 2809 times) previous topic - next topic

fgprojet

Jun 02, 2013, 03:30 pm Last Edit: Jun 02, 2013, 03:33 pm by fgprojet Reason: 1
Bonjour,
j'aurais voulu savoir comment on pet faire pour couper des donner reçus (voir mon programme qui suit)

Voila:
quand j'envoie une information avec ma télécommande, exemple: 3249147375
je voudrais que les deux premier charters soit séparer de du reste du code

que str: soit 49147375
et que str2: soit: 32

Je vous remercie de votre aide, toute réponse est la bienvenue

voici mon code:



#include <IRremote.h>      //Appel bibliotheque/librairie Infra Rouge
#include <LCD5110.h>       //Appel bibliothque/librairie écran
int RECV_PIN = 2;          //Port de réception des données Infra rouge sur l'arduino
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()               //Partie dfixe du programme
{
       LcdInitialise(); //initialisation de l'écran                         
       LcdClear();      //remise a zero de l'ecran, efface
      gotoXY(0, 5);                      //ajout de texte, ligne  afin d'écraser "collectivitees"
         LcdString( " En Attente ");     //pour empalecer par en attente
      Serial.begin(9600);       //
      irrecv.enableIRIn();      //Début de la réception de donné en infra rouge
}

void loop(void) {
       char str[20];              //on définis le nb de caractère pour le code générale nomée STR
  if (irrecv.decode(&results)) {         //Si rcçoit qqch il utilise la fct decode result
    irrecv.resume();                          //--- Receive the next value
    String code(results.value);    //String: C(++) / conflit entre lecture du code den string et en chaine de caractère  - (le result value n'est pas en char
    code.substring(0).toCharArray(str, sizeof(str));   //convertion du code (result value) en chaine de char -> nomé 


                               
  LcdClear();
       gotoXY(0, 0);                       //emplacement écran: décalge pixel, décalage ligne
           LcdString("Donnees Recu");      //Affichage de "donnees recu"
       gotoXY(0, 1);                       //Afficher sur l'écran, en posotion X0 abc  -- et Y3 orth
           LcdString( str);

}
}

Viproz

Salut,

str est un tableau donc si tu veux récupérer les deux premiers éléments, il te suffit d'utiliser les index 0 et 1, pour le reste du tableau, tu peux décaler les valeurs du tableau.

Un truc un peu dans ce genre :

Code: [Select]
char str1[20];
str1 = "3249147375"; //recepetion de la commande

char str2[3]; //place pour 2 caractères et '\0'
for(int i = 0 ; i < sizeOf(str1) ; i++) {
if(i < 2)
str2[i] = str1[i];
else
str1[i-2] = str1[i];
}
str1[sizeOf(str1)-2] = '';
str1[sizeOf(str1)-1] = '';

skywodd

Bonjour,

Pourquoi transformer "results.value" en String pour ensuite faire le découpage ?
Ta valeur est un nombre (unsigned long), utilise cette particularité à ton avantage !

3249147375 / 100 000 000 = 32
3249147375 % 100 000 000 = 49147375

Ps: tu veut faire quoi avec ce nombre ?
C'est toi qui génère le signal IR avec un autre arduino ou tu utilises une télécommande ?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

infobarquee

Quote
quand j'envoie une information avec ma télécommande, exemple: 3249147375
je voudrais que les deux premier charters soit séparer de du reste du code


pas réveillé skywodd ce matin ;)
le problème est que l'on envoie pas 1 2 3 4 5 etc... via la télécommande comme ca.
c'est soit de l'HEX soit
Quote
if (irrecv.decode(&results)) {
        test = results.value;

ce qui renvoit un nombre pour chaque touche.
j'ia plus les touches en tête, et cela dépend de la télécommande utilisée aussi
255 pour le zero de mémoire
12495 pour le 1

A moins de faire un tableau pour chaque touche/code, ca va être dur.
AUCUNE AIDE PAR MP

skywodd


pas réveillé skywodd ce matin ;)

Et ouai, dure dure la fatigue ^_^


le problème est que l'on envoie pas 1 2 3 4 5 etc... via la télécommande comme ca.
c'est soit de l'HEX soit

Je le sait bien, don't worry :smiley-mr-green:

Le résultat reste le même, au final "results.value" reste un nombre (en décimal ou en hexa ça dépend uniquement de l'affichage) sur 4 octets.
Si le but est de récupérer l'octet de poids fort, en hexa c'est super simple ((results.value & 0xFF000000) >> 24).
Si le but est de récupérer les 2 chiffres "de gauche" de la version décimale c'est plus compliqué (cf division et modulo).

D'où ma question : pourquoi découper le nombre ? Quel est le but final de ce découpage ?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up