Arduino probleme émetteur 433 Mhz

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut, Alors voila, j'ai un petit souci, je me suis acheté un émetteur 433 Mhz, mais quand j'envoie les donné, je reçois un peux n'importe quoi a l'arrivé. Par exemple j'envoie: "Bonjours" et je reçois: 66111110106111117114. J'ai utiliser VirtuaWire comme librairie.

merci

+0 -0

bonjour, ça semble être une erreur de baudrate, ou quelque chose dans ce style.

ceci dit, pour t'aider plus, il nous faudra ton code, et un schéma lisible ton montage, parce que je vois pas qui a des dons de voyance sur ce forum.

Édité par remace

Oui. Non. Attends, je regarde mieux et je te dis.

+0 -0
Auteur du sujet

Voila pour le code émetteur:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <VirtualWire.h> e
#include <VirtualWire_Config.h>

const char *msg = "Bonjour"; 

void setup()
{

    vw_setup(2000);    
}

void loop()
{
    vw_send((uint8_t *)msg, strlen(msg));  
    vw_wait_tx(); 
    delay(1000); 
}

et le code récepteur:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <VirtualWire.h> 
#include <VirtualWire_Config.h>

void setup()
{
    Serial.begin(9600); 

    vw_setup(2000); 
    vw_rx_start();  
}

void loop()
{
    uint8_t msgRecu[VW_MAX_MESSAGE_LEN];
    uint8_t longueurMsg = VW_MAX_MESSAGE_LEN;

    if (vw_wait_rx_max(200)) 
    {
        if (vw_get_message(msgRecu, &longueurMsg)) 
        {
            Serial.print("On recoit : ");
            for (byte i = 0; i < longueurMsg; i++) 
                Serial.print(msgRecu[i]);
            Serial.println("");
        }
    }
}

pour les émetteur c'est la: Image utilisateur

merci

+0 -0

j'ai pas d'idée, et comme ton code semble tout droit pompé d'un autre site (chez qui ça marche), j'ai du mal à savoir ce qui va pas dans ton montage.

y'a un e qui traine à la fin de l'inclusion de virtualWire.

d'ailleurs, y'a quoi dans virtualWire_config? non parce que toutes les fonctions que tu utilise après sont tirées de virtualWire, et du coup je me demande l'utilité de cette lib pour toi, et si elle introduirait pas des fonctions parasites…

sinon, t'as un schema de ton montage?

Édité par remace

Oui. Non. Attends, je regarde mieux et je te dis.

+0 -0
Auteur du sujet

Je vois pas trop comment faire un schémas… enfin pour les pin: -émetteur: vcc => 5v ; gnd=> gnd ; Data => D12 -récepteur: vcc= 5v ; gnd => gnd ; data => D11

j'ai récupéré le code sur un site, enfin plusieurs code que j'ai testé mais j'ai a chaque fois j'ai se résultat…

+0 -0

peux-tu poster le contenu de ta library virtualWire_Config.h?

sinon, j'ai comme l'impression que tu as oublié de "dire au programme" sur quelle pin sont branchés tes broches de data.

du coup, le fonctionnement par défaut, je connais pas, mais j'ai comme un doute :p.

Oui. Non. Attends, je regarde mieux et je te dis.

+0 -0
Auteur du sujet

Normalement je suis branché sur les broche par défaut. pour le virtualWire_config.h:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef VirtualWire_Config_h
#define VirtualWire_Config_h
//////////////////////////////////////////////////////////////////////////
//  The following configurations are intented only if VW_PLATFORM == VW_PLATFORM_GENERIC_AVR8

//  Uncomment this to select the platform as generic AVR8
//#define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8

//  OPTIONAL: Define the IO pin used for PTT (push to talk)
//  If no PTT port will be defined, the PTT feature will be disabled
//#define VW_PTT_PORT PORT#
//#define VW_PTT_DDR  DDR#
//#define VW_PTT_PIN  PIN#?

// Define the IO pin used for transmitting data
//#define VW_TX_PORT PORT#
//#define VW_TX_DDR  DDR#
//#define VW_TX_PIN  PIN#?

// Define the IO pin used for receiving data
//#define VW_RX_PORT  PIN#
//#define VW_RX_DDR  DDR#
//#define VW_RX_PIN  PIN#?

//  Define the 16 bits timer index to be used by the library (e.g. 1)
//  The default timer configuration will use TIMSKn as interrupt mask register,
//     OCRnA as compare register and TIMERn_COMPA_vect as interrupt vector
//  If one of the above doesn't suite your current platform, please redefine
//     the timer setup routine, as indicated below
//#define VW_TIMER_INDEX 1

//
//  EXAMPLE: configuration suitable for At90USB162 or ATMega32U2
//

/*
    //  Select AVR8 platform
    #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8

    //  My radio doesn't have PTT feature => VW_PTT_PORT/DDR/PIN will be left undefined
    //#define VW_PTT_PORT
    //#define VW_PTT_DDR
    //#define VW_PTT_PIN

    //  VirtualWire TX
    #define VW_TX_PORT PORTD
    #define VW_TX_DDR  DDRD
    #define VW_TX_PIN  PIND7

    //  VirtualWire RX
    #define VW_RX_PORT PIND
    #define VW_RX_DDR  DDRD
    #define VW_RX_PIN  PIND6

    //  Reduce message length, saves up memory
    #define VW_MAX_MESSAGE_LEN 40

    //  Select Timer 1 as the 16 bits timer used by the library
    #define VW_TIMER_INDEX 1
*/

//
//  OPTIONAL: Alternative pin setup for advanced configurations
//  Instead of defining VW_PTT_PORT/DDR/PIN, VW_TX_PORT/DDR/PIN or VW_RX_PORT/DDR/PIN
//     the user can use the following preprocessor directives to control the way
//     VirtualWire library reads the RX and writes to the TX or PTT
//

//#define vw_pinSetup()
//#define vw_digitalWrite_ptt(value) 
//#define vw_digitalRead_rx()
//#define vw_digitalWrite_tx(value)

//
//  EXAMPLE: Advanced pin configuration that lights up a LED when PTT is high
//           RX=PORTD7, PTT=PORTD6, LED=PORTD5, TX=PORTD4
//

/*
    //  Select AVR8 platform
    #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8

    #define vw_pinSetup()\
            DDRD |=  (1<<PORTD6)|(1<<PORTD5)|(1<<PORTD4);\
            DDRD &= ~(1<<PORTD7);

    #define vw_digitalWrite_ptt(value)\
        ((value)? PORTD |= (1<<PORTD6)|(1<<PORTD5) : PORTD &= ~((1<<PORTD6)|(1<<PORTD5))
    #define vw_digitalRead_rx() \
        (PORTD & (1<<PORTD7) ? 1 : 0)
    #define vw_digitalWrite_tx(value) \
        ((value) ? PORTD |= (1<<PORTD4) : PORTD &= ~(1<<PORTD4))
*/

//
//  OPTIONAL: Alternative timer configuration
//  If the default timer setup doesn't suite the platform you are using, you can
//     rewrite the timer setup routine and define the timer vector used by the ISR
//     implemented within the library
//

//#define vw_timerSetup(speed)
//#define VW_TIMER_VECTOR

//
//  EXAMPLE: Setting up a user defined timer configuration for VirtualWire
//           that uses OCR1B as compare register instead of OCR1A
//

/*
    #include <stdint.h>

    //  Select AVR8 platform
    #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8

    //  Declare my own timer setup function
    static inline void my_vw_timerSetup(uint8_t speed) __attribute__ ((always_inline));

    //  VirtualWire has a special routine for detecting prescaler and the number of ticks
    //     automatically, but needs to be declared first in order to be used
    uint8_t vw_timer_calc(uint16_t speed, uint16_t max_ticks, uint16_t *nticks);

    //  Instruct VirtualWire to use my timer setup routine and my interrupt vector
    #define vw_timerSetup(speed) my_vw_timerSetup(speed);
    #define VW_TIMER_VECTOR TIMER1_COMPB_vect

    //  Define my setup timer routine, that uses OCR1B as compare register
    static inline void my_vw_timerSetup(uint8_t speed)
    {
        // Figure out prescaler value and counter match value
        prescaler = vw_timer_calc(speed, (uint16_t)-1, &nticks);
        if (!prescaler)
        {
            return; // fault
        }

        TCCR1A = 0; // Output Compare pins disconnected
        TCCR1B = _BV(WGM12); // Turn on CTC mode

        // Convert prescaler index to TCCR1B prescaler bits CS10, CS11, CS12
        TCCR1B |= prescaler;

        // Caution: special procedures for setting 16 bit regs
        // is handled by the compiler
        OCR1B = nticks; 

        //  Enable interrupt
        TIMSK1 |= _BV(OCIE1B);
    }
*/

#endif /* VirtualWire_Config_h */
+0 -0

essaye d'enlever les inclusions de cette library du programme, tu n'en as pas besoin, et en plus j'ai l'impression qu'elle a pas été faite pour arduino, ce qui veut dire qu'elle le fait se comporter d'une manière imprévue.

ensuite, je te l'ai déjà dit, mais dans tes codes, y'a un "e" tout seul qui traine sur la ligne 1. enleve-le aussi, et ré-essaye ton code.

Oui. Non. Attends, je regarde mieux et je te dis.

+0 -0

si ça peut t'aider, j'ai juste cherché arduino 433mhz tuto dans google, ouvert le premier lien et comparé avec ton code. (peut-être celui de skyduino, il est relativement bien placé dans le référencement des mini-tutos d'arduino…)

comme quoi, rien de mieux pour debug que de comparer avec un code déjà existant et fonctionnel.

Édité par remace

Oui. Non. Attends, je regarde mieux et je te dis.

+0 -0

bonjour je sais que ce sujet date depuis longtemps mais je poste ma réponse au cas ou quelqu’un aurait le problème et chercherait la solution le problème vient du faite que dans le code vous utiliser la fonction Serial.print(msgRecu[i]); alors que il faut utilisé la fonction Serial.write(msgRecu[i]);

cordialement.

Édité par didoupimpon

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte