Liaison rs485 arduino

a marqué ce sujet comme résolu.

Bonjours à tous,

Voilà, je travail sur un projet perso, qui consiste à récupérer l'heure sur une carte arduino et l'envoyer à une autre carte. La liaison entre les deux s'effectue en RS485. J'arrive à récupérer le signal de mon horloge (DS3231) et à l'afficher sur le moniteur série de l'émetteur. Mais impossible d'envoyer par exemple les secondes à l'autre carte, pourtant j'utilise la librairie SoftwareSerial (je ne dois pas savoir l'uriliser…)

Auriez-vous des idées pour débloquer ce problème ?

Ciri25

PS: Je posterais mon code demain.

Je me suis basé sur le seul exemple que j'ai trouvé. Le Serial n'est pas juste fait pour la liaison Arduino <-> PC ?

Voici mon code émetteur :

 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
#include <SoftwareSerial.h>  // Inclure librarie "SoftwareSerial.h"
#define SSerialRX  11        // Broche 11 pour RX
#define SSerialTX  12        // Broche 12 pour TX
#define SSerialTxControl  13 // Broche 13 pour selection envoie ou reception
#define RS485Transmit  HIGH  // Etat haut pour transmission RS485
#define RS485Receive  LOW    // Etat bas pour reception RS485
#include <Wire.h>            // Inclure librairie "Wire.h"
#include <RTClib.h>          // Inclure librairie "RTClib.h"

RTC_DS1307 RTC;              // Declarer DS3231 comme DS1307

SoftwareSerial RS485Serial(SSerialRX, SSerialTX);  // Assigner les broches RX et TX a RS485Serial
int byteReceive;
int byteSend;
int horloge;


void setup() 
{
  pinMode(SSerialTxControl, OUTPUT);  // Defnir SSerialTxControl comme port de sortie

  digitalWrite(SSerialTxControl, RS485Transmit);  // Indiquer que SSerialTxControl est en transmission
  RS485Serial.begin(4800);  // Demarrer liaison RS485 a 4800 bauds

  Serial.begin(9600);  // Demarrer Serial a 9600 bauds
  Wire.begin();  // Demarrer librairie "Wire"
  RTC.begin();  // Demarrer librairie "RTC"
}


void loop() // On souhaite recuperer l'heure du DS3132 et l'envoyer sur RS485Serial
{
  DateTime now = RTC.now();  // Lire l'heure du module
  RS485Serial.println(now.second());  // Envoyer les secondes sur RS485Serial
  delay(1000);  // Delais pour lire dans le moniteur serie (a enlever en fn de prototypage)
 }

Oui, j'ai bien inversé RX et TX, mais j'obtiens sur le moniteur série du récepteur des -1.

Voici le code du 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
28
29
30
31
32
33
#include <SoftwareSerial.h>  // Inclure librairie "SoftwareSerial.h"
#define SSerialRX  11        // Broche 11 pour RX
#define SSerialTX  12        // Broche 12 pour TX
#define SSerialTxControl  13 // Broche 13 pour selection envoie ou reception
#define RS485Transmit HIGH   // Etat haut pour transmission RS485
#define RS485Receive LOW     // Etat bas pour reception RS485
#include <Wire.h>            // Inclure librairie "Wire.h"
#include <RTClib.h>          // Inclure librairie "RTClib.h"

RTC_DS1307 RTC;              // Declarer DS3231 comme DS1307

SoftwareSerial RS485Serial(SSerialRX, SSerialTX);  // Assigner les broches RX et TX a RS485Serial
int byteReceive;
int byteSend;


void setup()
{
  pinMode(SSerialTxControl, OUTPUT);  // Definir SSerialTxControl comme port de sortie

  digitalWrite(SSerialTxControl, RS485Receive);  // Indiquer que SSerialTxControl est en reception
  RS485Serial.begin(4800);  // Demarrer liaison RS485 a 4800 bauds

  Serial.begin(9600);  // Demarrer Serial à 9600 bauds
  Wire.begin();  // Demarrer librairie "Wire"
  RTC.begin();  // Demarrer librairie "RTC"
}


void loop()  // On veut lire ce qui arrive sur RS485
{
  Serial.println(RS485Serial.read());  // Lire ce qui arrive sur RS485serial
}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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