comment couper des données reçu

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);

}
}

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 :

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] = '';

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 ?

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 :wink:
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

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.

infobarquee:
pas réveillé skywodd ce matin :wink:

Et ouai, dure dure la fatigue :slight_smile:

infobarquee:
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 :grin:

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 ?