[Résolu] émetteur/récepteur 433MHz

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

Voici les morceaux de mon code qui sont utiles :

//----- 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

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 :frowning: Alors je me demande si ce n'est pas un soucis de buffer ou autre et je sèche dessus depuis 2 jours ...

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

Amicalement,
Trigger

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

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

Tu aimes le risque toi XD XD

Tu aimes le risque toi

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

Salut,

trigger:
Skywodd si tu passes par là, encore merci :wink:

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

trigger:
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 :slight_smile:

trigger:
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 :frowning: 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 ?

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

trigger:

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

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

Rien n'échappe donc au hacking !

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 :

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 :frowning:
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 ?

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 :

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() :blush:

trigger:
Cependant je me retrouve avec le même problème qu'au début :frowning:
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 ...

trigger:
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.

for(int i = 0 ; i < chaine1Length ; i++) {
  Serial.print(msg[i], HEX);
  Serial.print(' ');
}
Serial.println();

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

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".

Alors petite piste, cela semble marcher :slight_smile:

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

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

dans le loop avec un petit

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

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

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

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

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

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

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

Ouai, j'attends les résultats, sur certaines matière ça risque d'être comique :grin:
(anglais -> j'ai fait un lapsus à la pedobear :sweat_smile:, 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.")

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

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

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.

Encore merci pour tes conseils :slight_smile:

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