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
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
Et ouai, dure dure la fatigue
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
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 ?