Go Down

Topic: RCSwitch via Serial (Read 960 times) previous topic - next topic

nono56

Bonjour à tous!
Ca faisait longtemps que je n'avais pas posté....
Je me retourne vers vous car la, je seche completement!
Je souhaiterais utiliser RCSwitch via Serial.
Je m'explique :
RCSwitch sert à commander des prises électriques 433Mhz.
Il permet d'allumer ou éteindre des prises via un emetteur RF.
Dans cette librairie, il y a une méthode (send) qui permet d'envoyer un numéro plutot qu'un code binaire
Le problème est que ce numéro est de type long.
Je souhaiterais envoyer ce "long" via Serial à l'arduino pour qu'il allume une prise.
La question est : Comment recevoir un unsigned long via Serial?
Je n'arrive pas à convertir....

Merci d'avance!

derder9161

#1
Aug 06, 2014, 07:39 pm Last Edit: Aug 07, 2014, 08:48 am by derder9161 Reason: 1
Découpe ton long en byte et fais un petit algo qui te le recompose.

Édit : un long est un code binaire tout dépend de comment tu le notes : binaire / décimal / hexa

nicolasc_eu

#2
Aug 06, 2014, 09:06 pm Last Edit: Aug 06, 2014, 09:23 pm by nicolasc_eu Reason: 1
Edit : Je dis n'importe quoi, navré.

nono56

Merci tout de meme!
Personne d'autre n'a d'idées?

Hiko

Salut,
du meme avis que Deder9161.

Quand tu écris un nombre dans la console Serial, et que tu l'envoies, à la reception, tu auras un tableau de bytes.
A toi de reconstituer ce tableau dans un long. C'est juste du decalage de bits et du masquage.
Tu vois?

nicolasc_eu

#5
Aug 07, 2014, 08:45 pm Last Edit: Aug 07, 2014, 08:49 pm by nicolasc_eu Reason: 1
Salut,

Me revoici, un peu plus en forme qu'hier soir :D

L'astuce consiste a passer par un buffer (ici char*). J'ai bricolé ça pour l'exemple :

Code: [Select]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   unsigned long emi = 4294967295L; // valeur de départ : taille maxi d'un ulong
   unsigned long rec = 0; // représentera la valeur à l'arrivée
   char* buffer = malloc(sizeof(long)); // pour le transfert...

   memcpy(buffer, &emi, sizeof(long));

   printf("Taille : %lu\n", sizeof(buffer));
   printf("Valeur au depart : %lu\n", emi);

   // buffer peut donc être transferé.

   // côté réception :
   memcpy(&rec, buffer, sizeof(long));

   // on vérifie :
   printf("Valeur a l'arrivee : %lu\n", rec);

}



Code: [Select]

NC-MNI:TestArduinoForum nicolasc$ nano main.c
NC-MNI:TestArduinoForum nicolasc$ gcc main.c -o main
NC-MNI:TestArduinoForum nicolasc$ ./main
Taille : 8
Valeur au depart : 4294967295
Valeur a l'arrivee : 4294967295
NC-MNI:TestArduinoForum nicolasc$


Ici, mon sizeof(long) renvoie 8, je suis sous Mac OS 64. Sur un arduino ton paquet devrait faire 4 octets.

À plus,


--
N.

Go Up