Pages: [1] 2   Go Down
Author Topic: (resolu)programmation module UHF  (Read 2824 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous j ai un bout de code capable d'envoyer une chaine de caractere vers un module UHF.

La transmission sans fil vers le deuxieme Arduino fonctionne tres bien.

Maintenant je voudrais transmettre une variable ( temperature ....) à la place du message mais je ne sais pas comment proceder.

voici le code coté emetteur pour la transmission d'une chaine.

Code:
   #include <VirtualWire.h> // Vous devez télécharger et installer la librairie VirtualWire.h dans votre dossier "/libraries" !

    void setup()
    {
        vw_setup(2000);                // Bits par seconde (vous pouvez le modifier mais cela modifiera la portée). Voir la documentation de la librairie VirtualWire.
        vw_set_tx_pin(3);             // La broche 3 sera utilisée pour transmettre la DATA, vous pouvez changez de broche si vous le désirez.
    }

    void loop()
    {
       const char *msg = " Coucou ";                   // C'est le message à envoyer.
       vw_send((uint8_t *)msg, strlen(msg));
       vw_wait_tx();                                          // On attend que le message complet soit envoyé.
       delay(200);                                              // Très important sinon cela peut brouiller d'autres appareils !
    }

merci du coup de main.
« Last Edit: May 15, 2012, 05:47:38 pm by caco74 » Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Regarde les fonctions de conversion de nombre en chaîne de caractère telle que itoa() ou les fonctions intégrées à la classe String.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

en gros tu me suggeres de convertir ma variable en chaine pour la transmission et l'inverse sur le recepteur ?
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 863
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

exactement, il n'y a que ça a faire ^^^ou alors tu les traduit en byte ( parfois plusieurs si grosse valeurs), tu m'étonne barbudor, tes occupé ou quoi? une réponse en une ligne sa doit être ton record :p

Skizo !
Logged

Un tien vaux mieux que deux tu l'auras !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je vais me documenter sur cette fonction. Merci.
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 863
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si besoin on est la, bon courage

Skizo =)
Logged

Un tien vaux mieux que deux tu l'auras !

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu peux effectivement transmettre en binaire, ca sera plus compact :

Code:
int toto = 12345;
vw_send( (uint8_t *)&toto, sizeof(toto) );

Lit mon tuto sur l'implémentation d'un protocole de communication (section Tuto du forum).
Je parle des pièges et des dangers et j'explique pourquoi il faut implémenter quelque chose de propre pour garantir un fonctionnement sûr.

Pour l'instant l'exemple est en ASCII, je n'ai pas encore eu le temps de faire la version binaire, mais l'idée est la même. Notamment je décrit le protocole binaire Sirf.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'ai fait un tutoriel au sujet de virtualWire :
http://skyduino.wordpress.com/2011/12/29/tutoriel-arduino-et-emetteurrecepteur-433mhz-virtualwire/

Au passage si tu veut envoyer des données binaire (pas du texte donc) tu peut t'inspirer de mon cast (byte*)&variable comme je le fait pour envoyer des données via un nrf24l01 :
http://skyduino.wordpress.com/2012/01/20/tutoriel-arduino-mirf-v2-nrf24l01/

Pas besoin d'implémenter un protocole, virtualwire en implémente déja un avec checksum, entête et tout ce qui va bien smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pas besoin d'implémenter un protocole, virtualwire en implémente déja un avec checksum, entête et tout ce qui va bien smiley-wink

Je me demandais justement ce qu'apportait VirtualWire.... smiley-wink
Il faut que je lise son f....g code smiley-lol
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci du coup de main mais j ai beau tourner dans tout les sens ca ne fonctionne pas. Je seche honteusement.

je croit que ma temperature n'est pas prete à faire de l'hertzien.

j'y retourne demain pour retenter. J ai un bout de code qui permet une emission d'une valeur analogique lue sur une entrée. Peut etre une direction.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait on ne sait pas ce qui fonctionne pas.

Est-ce l'émission où la réception ?
Le sais tu ? Si oui pourquoi ?

Peux être nous montrer le code des 2 cotés.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

en fait j ai la methode d'emission de mon module mais je ne sais pas comment le lui presenter.
Ma variable tempC est bien là sans moyen de la convertir en binaire.
et pourtant je sais comment convertir n importe quelle nombre en binaire avec les "String" mais là rien il ne se passe rien.
Je suis trop scotché au code d'envoi d'une chaine de caracteres et du coup envoyer autre chose au module me laisse sans voix.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je comprend pas.

Ton code tout en haut qui envoie "coucou" marche ?

Je t'ai donné 2 manière de transmettre une variable :
- en ASCII en utilisant au choix itoa() ou String
- en binaire avec l'exemple de code

Qu'est-ce qui coince ?
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
  int tempC = 12345;
   vw_send( (uint8_t *)&tempC, sizeof(tempC) );
 
       vw_wait_tx();                                          // On attend que le message complet soit envoyé.
       delay(200);             

du coup je me retrouve avec ça. tempC etant ma variable ou est stocké la temperature.
Ne comprenant pas le decoulement de cette analyse je suis planté.

j ai bien compris en revanche : que je peu transmettre ma variable à condition qu'elle soit dans un format dans mon cas Binaire. et grace à String je sait convertir n'importe quel nombre en binaire.

Je ne dispose pas d'un exemple concret que je puisse modifier à volonté afin de faire "tilt" dans ma tête.
Désolé de paraître un brin boulet mais je suis tenace.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Une variable est toujours en binaire en mémoire.
Tu as le choix de transmettre soit en binaire (c'est à dire une copie des octets qui forment ta variable) ou de convertir ta variable en suite de caractères intelligibles pour l'humain mais qui n'apporte rien à la transmission (cf mon tuto).

un int (sur Arduino) occupe 2 octets en mémoire
En écrivant :  vw_send( (uint8_t *)&tempC, sizeof(tempC) );
tu dit Envoyer 2 octets depuis l'endroit de la mémoire où stocké tempC

tempC : ta variable, du type "int"
&tempC : adresse en mémoire de ta variable (adresse du 1er octet) : du type "int *" (pointeur sur int)
(uint8_t*) : transtypage (appellé aussi cast) : parce que vw_send() attend un (uint8_t *) (pointeur sur uint8_t) tu lui dit : prend mon "int *" comme un "uint8_t *" sans te plaindre, je sais ce que je fais.
sizeof(tempC) vaut 2 parce que tempC utilise 2 octets en mémoire

Coté réception tu devrais recevoir avec :
Code:
void loop()
{
    int tempC;
    uint8_t buflen = sizeof(tempC);
    if (vw_get_message((uint8_t*)&tempC, &buflen)) // Non-blocking
    {
int i;
// Message with a good checksum received, dump HEX
Serial.print("Got: ");
    Serial.println(tempC, DEC);
}
Serial.println("");
   }
}


Sinon tu peux utilisé itoa() pour convertir un entier en chaine de caractère. On te l'a dit 2 ou 3 fois.
As tu seulement essayé de trouver la doc de ce qu'on t'indique ?

Coté emission :
Code:
void loop()
{
    const char chaine[15];
    itoa( tempC, chaine, 10 );
    vw_send((uint8_t *)chaine, strlen(chaine)+1);
    delay(400);
}

Et ca tu peux le recevoir avec le code exemple de VW telquel.

Et finalement désolé mais String n'est pas adapté.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Pages: [1] 2   Go Up
Jump to: