Go Down

Topic: [Résolu] émetteur/récepteur 433MHz (Read 1 time) previous topic - next topic

trigger

Jan 18, 2012, 07:05 pm Last Edit: Jan 23, 2012, 10:17 pm by trigger Reason: 1
Salut salut :=)

J'ai un petit projet HF en cours et je me suis donc inspiré du super tuto de Skywodd ( grand merci à toi tes tutos sont géniaux !)

Donc pas de soucis pour envoyé des messages avec le sketch du tuto mais cependant aprés modification ça capote un peu :(

Voici les morceaux de mon code qui sont utiles :

Quote
//----- inclusion de la librairie VirtualWire ---
#include <VirtualWire.h>


Ici je chnage la pin d'émission car je suis sur une méga avec Ethernet Shield  
Quote
Serial.begin(115200);
vw_set_tx_pin(18); // on change la pin TX
vw_setup(5000);


Voici ici le code principal, alors pour info je souhaite envoyé un message depuis une page web.
L'envoie du code semble bien se passé mais quelques fois ça capote :( Alors je me demande si ce n'est pas un soucis de buffer ou autre et je sèche dessus depuis 2 jours ...
Quote

     int chaine1Length = chaine1.length(); // calcul de la taille de la chaine1
     char msg[chaine1Length+1];
     PString mystring2(msg, sizeof(msg)); // evite l'accumulation de la chaine  
     
     mystring2.print(chaine1.replace("+", " ")); // les espaces sont des + dans l'url !!!!

   vw_send((uint8_t *)msg, strlen(msg)); // On envoi le message
   vw_wait_tx(); // On attend la fin de l'envoi
   delay(500);
   Serial.println(msg); //debug
   delay(500);


Skywodd si tu passes par là, encore merci ;)

Amicalement,
Trigger

[edit] j'édite le poste avant qu'on me pointe du doigt ^^

Jean-François

...cependant aprés modification de capote...


Tu aimes le risque toi  XD XD
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

trigger

Quote
Tu aimes le risque toi

C'est pas vraiment drôle de copier/coller du code sans comprendre ^^

skywodd

Salut,


Skywodd si tu passes par là, encore merci ;)

Désolé pour le temps d'attente, j'ai mis 3 bonnes heures avant de venir à bout de tout les nouveaux messages de la journée :smiley-sweat:


J'ai un petit projet HF en cours et je me suis donc inspiré du super tuto de Skywodd ( grand merci à toi tes tutos sont géniaux !)

Ya pas de quoi ^_^


Voici ici le code principal, alors pour info je souhaite envoyé un message depuis une page web.
L'envoie du code semble bien se passé mais quelques fois ça capote :( Alors je me demande si ce n'est pas un soucis de buffer ou autre et je sèche dessus depuis 2 jours ...

Je vois pas pourquoi tu utilise PString ?

Code: [Select]

   int len = chaine1.length() + 1; // calcul de la taille de la chaine1
   byte *msg = (char*)malloc(len); // normalement sur un µc le malloc c'est caca, mais dés fois faut bien un petit malloc ^^
    if(msg == NULL)
      Serial.println("Need Ram !");

    chaine1 = chaine1.replace("+", " ")
    chaine1.getBytes(msg, len);

   vw_send(msg, len); // On envoi le message
   vw_wait_tx(); // On attend la fin de l'envoi

    free(msg);
   delay(500);

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jean-François


Quote
Tu aimes le risque toi

C'est pas vraiment drôle de copier/coller du code sans comprendre ^^


Je parlais de "capote" modifiée  XD
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

al1fch

Quote
Je parlais de "capote" modifiée  smiley-lol

Rien n'échappe donc au hacking !

trigger

Encore une fois merci Skywodd, je me suis permis de modifier le sketch que tu as donné car il semblait avoir un conflit de type, voila le code que j'utilise :

Quote
chaine1 = maChaineConcat.substring(firstEgal+1,placeBlanc); // on extrait la chaine1
    int chaine1Length = chaine1.length()+1; // calcul de la taille de la chaine1   
   
    byte *msg = (byte*)malloc(chaine1Length); // normalement sur un µc le malloc c'est caca, mais dés fois faut bien un petit malloc ^^
    if(msg == NULL){
      Serial.println("Need Ram !");
    }
    chaine1 = chaine1.replace("+", " ");
    chaine1.getBytes(msg, chaine1Length);

    vw_send(msg, chaine1Length); // On envoi le message
    vw_wait_tx(); // On attend la fin de l'envoi

    free(msg);
    delay(500);


Cependant je me retrouve avec le même problème qu'au début :(
Je reçois bien une tram cependant elle est incomplète, dans mon cas je reçois "Sal" ou "Salu" au lieu de "Salut"

NB : L'émetteur et le récepteur son cote à cote.
       Comment savoir si le soucis se trouve à l'émission ou à la réception ?

skywodd


Encore une fois merci Skywodd, je me suis permis de modifier le sketch que tu as donné car il semblait avoir un conflit de type, voila le code que j'utilise :

Oups! Oui j'avais mis un char* au début puis âpres j'ai réfléchi et je l'ai modifier en byte ... en oubliant le malloc() :smiley-red:


Cependant je me retrouve avec le même problème qu'au début :(
Je reçois bien une tram cependant elle est incomplète, dans mon cas je reçois "Sal" ou "Salu" au lieu de "Salut"

Je pencherai pour un probléme de réception mais je peut pas en être sur ... si tu recevais tout le temps "Salu" ça pourrait être un probléme à l'émission mais tu reçois aussi "Sal" donc ... mystère ...


NB : L'émetteur et le récepteur son cote à cote.
       Comment savoir si le soucis se trouve à l'émission ou à la réception ?

Fait une boucle for qui affiche avec Serial le tableau reçu en hexa histoire de voir si tu perd de l'info à la réception ou à l'émission.
Code: [Select]
for(int i = 0 ; i < chaine1Length ; i++) {
  Serial.print(msg[i], HEX);
  Serial.print(' ');
}
Serial.println();
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

trigger

#8
Jan 23, 2012, 09:51 pm Last Edit: Jan 23, 2012, 09:57 pm by trigger Reason: 1
Salut salut,

De retour après un week end plutôt chargé ( porte ouverte de l'école oblige ^^) je suis de retour avec de bien mauvaises nouvelles je tourne toujours en rond ...

L'envoie semble fonctionner, cependant est il possible que je flood la fréquence ?
Je ne sais vraiment plus ou chercher ...

Des suggestions ?
Amicalement,
Trigger

[EDIT] : Pour ce qui est de la réception j'utilise le code de ton tuto ;)

skywodd

Ok l'envoi fonctionne, et niveau réception ?

Il se peut aussi que tu soit parasité par une systéme travaillant sur la même fréquence, c'est un des risques du 433MHz "low cost".
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

trigger

Alors petite piste, cela semble marcher :)

Il suffit de redéfinir le tableau ainsi que sa taille en rajoutant :
Quote

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;


dans le loop avec un petit
Quote
delay(1);
pour le faire respirer en fin de boucle ^^

Cela fait 5 bonne minutes que le dialogue ce fait sans soucis avec une chaine de 10 caractères :)

Je pense pouvoir mettre un résolu, encore une fois grace au membre de ce super forum :)
Amicalement,
trigger


NB : Et tes partiels skywodd ça a roulé ?

skywodd


Cela fait 5 bonne minutes que le dialogue ce fait sans soucis avec une chaine de 10 caractères :)

Je pense pouvoir mettre un résolu, encore une fois grace au membre de ce super forum :)

C'était qu'un probléme de delay en fin de compte alors ? Enfin bref, ça marche donc tant mieux :smiley-mr-green:


NB : Et tes partiels skywodd ça a roulé ?

Ouai, j'attends les résultats, sur certaines matière ça risque d'être comique  :smiley-mr-green:
(anglais -> j'ai fait un lapsus à la pedobear :smiley-sweat:, et pour le clou du spectacle, en organisation il y avait une question sur pourquoi une tache xy était seul à s'exécuter, j'ai rien compris, ma réponse : "Elle est forever alone.")
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

trigger

Ouai en tous cas c'est bien grâce à toi ^^

Cependant connais tu une solution pour convertir le tableau buf[] en String ?

Le but de mon projet est en fait d'envoyer une chaine du style
Quote
01?21
pour ensuite extraire les infos.

Dans mon exemple je souhaiterai que l'Arduino qui portera le numéro 01 passe la sorite portant le numéro 2 à l'état haut.
Il se trouve que j'ai déjà fait un petit sketch similaire pour afficher une chaine venant d'une URL pour l'afficher sur un lcd mais cette chaine était en String et non sous forme de tableau ...

Existe t il une solution pour palier le soucis de type ?

Tkt je partage les moments de solitude en anglais et ça me fait plaisir de voir que je ne suis pas seul ^^

Amicalement,
Trigger

skywodd

De byte[] à String je sait pas, mais de byte[] à char[] il suffit de faire :
byte variable[10];
char* str = (char*)variable;
et ajouter un '\0' en fin des données pour "transformer" le char* en une chaine de caractéres bien formée.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

trigger

Encore merci pour tes conseils :)

Une fois de plus tout roule, thx Skywodd tu es un chef !!!

Go Up