Je suis confronté à un problème. J'ai une arduino qui récupère le signal d'une horloge DS3231. J'aimerais envoyer ce signal à une autre carte par liaison RS485.
Bon, la liaison entre les deux fonctionne (j'allume et éteind une led avec retour d'information comme test). Mais je bloque sur l'envoie du signal horloge. Je sais que le signal doit se composer de 7 octets, mais impossible des les envoyer.
Voici le code de mon emetteur (test avec des secondes):
{
DateTime now = RTC.now();
RS485Serial.println(now.second());
delay(1000);
}
je n'ai rien qui s'affiche dans mon moniteur série de l'émetteur.
c'est normal que rien ne s'affiche dans la console.
tu confonds pas mal de choses en fait.
la liaison serie normal avec la console ET la liaison serie entre les deux arduino.
si tu veux afficher dans la console, il faut rajouter
Serial.println (now.second());
RS485Serial.println(now.second());
sert a envoyer A L'AUTRE arduino les données.
si tu es certain que tout fontionne du coté de l'émetteur, penche toi sur ce que recoit le récepteur, il n'y a que de ce coté où tu pourras vérifier maintenant
Oui, je me suis rendu compte après que je m'étais trompé sur l'utilisation du Serial.
Voici mes deux codes,
emetteur
#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)
}
recepteur :
#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); // Lire ce qui arrive sur RS485serial
}
Je n'obtiens que des 1 sur le moniteur série du récepteur.
void loop() // On veut lire ce qui arrive sur RS485
{
while (RS485Serial.available()>0)[
Serial.println(RS485Serial.read()); // Lire ce qui arrive sur RS485serial
}
}
void loop() // On veut lire ce qui arrive sur RS485
{
while (RS485Serial.available()>0)
{
Serial.println(RS485Serial.read()); // Lire ce qui arrive sur RS485serial
}
}
C'est déjà un peu mieux, j'obtiens en boucle la suite :
13
10
98
111
110
106
111
117
114
Autrement ce que tu reçois en boucle c'est bonjour donc si c'est ce que tu envoies c'est bon. Sinon tu es en contact avec un alien qui veut discuter avec toi.