Bonjour,
Il y a quelque chose qui m'échappe dans le fonctionnement de la bibliothèque "SoftwareSerial".
Sur un Arduino UNO je n'arrive pas à utiliser une voie série définie sur les Pins 2 et 3.
J'ai mis au point le programme avec le moniteur série (en USB pin 0 et 1).
Je veux maintenant utiliser l'équipement définitif qui fonctionne en RS232.
Le flux est faible, c'est un caractère de commande à chaque transaction.
J'ai ajouté le circuit (MICROBOT RS232) pour convertir les signaux: il est sur les pin 2 et 3 de l'UNO.
Rien n'est tranféré sur ces pins.
Mais si je relie le fil RX du circuit RS232 sur la pin 0 (celle du moniteur serie), la çà transmet...mais sur RS232 !
Je ne comprends pas !
Voici un exemple (portion de mon code):
#include <SoftwareSerial.h>
#define RX 2 // affectation des broches
#define TX 3
SoftwareSerial RS232(RX, TX); // création de l'objet RS232
void setup()
{
Serial.begin(9600);
RS232.begin(9600); // initialisation de la liaison série RS232
// on attend que le port soit ouvert.
while (!Serial) {
;
}
/*
Connexions UNO vers MICROBOT RS232
UNO(RX) pin 2 vers MICROBOT pin (TX)
UNO(TX) pin 3 vers MICROBOT pin (RX)
*/
Serial.println("ARDUINO CINESCAN actif ! en attente de commande...");
"cela s'imprime bien sur le moniteur serie"
}
void loop()
{
RS232.println("ARDUINO RS232 OK");
" ici pas d'impression sur la ligne RS232"
delay(1000);
}
Tu es sur que tu as bien connecté RX et TX au niveau de l'adaptateur rs232.
Essaies ton adaptateur sur les pins sur le serial hard.
Essaies de croiser rx et tx.
La librairie softwareSerial fonctionne depuis longtemps. Elle est fiable.
Essaie de faire tourner le programme ci-dessous en rebouclant 2 et 3 sur l'arduino.
Normalement tout ce que tu tappes dans la console devrait revenir dans la console à travers softwareSerial.
SoftwareSerial mySerial(2,3); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Si le programme ci-dessus fonctionne:
tu retires le bouclage entre 2 et 3
tu connectes ton interface RS232 en bouclant RX et TX coté SUBD 9 points.
Si l'interface fonctionne correctement, tu devrais avoir le même comportement qu'avec le rebouclage sur 2 et 3.
Merci pour la réponse, mais toujours rien sur la ligne !...
Pour avoir le message "Goodnight moon!" j'ai du modifier la vitesse: çà ne fonctionne qu'à 9600 Bauds.
Ensuite le retour des caractères ne se fait pas malgré le bouclage.
J'ai regardé avec un oscillo sur les pins: c'est l’électroencéphalogramme plat !
Je me demande si ma carte UNO n'a pas un problème. Je vais en commander une autre, sans doute une MEGA car je crois qu'elle à plusieurs ports série de base.
Je viens de m’apercevoir que le programme proposé par fdufnews au post #4 ne fonctionne pas.
Après de plus amples investigation, je constate que le rebouclage d'une liaison SoftwareSerial ne fonctionne pas alors que le rebouclage d'une liaison hardware fonctionne.
Est ce que quelqu'un a une explication?
Décidément il y a des choses bizarres avec SoftwareSerial.
En faisant des comparaisons entre softwareserial et serial hard, je me suis aperçu que softwareserial ne fonctionne pas en réception sur une mega (ce que semble confirmer le lien posté par fdufnews).
Bon d'accord ça ne présente pas trop d'intérêt, mais c'est quand même étrange.
Bonjour à tous,
J'ai enfin trouvé le défaut.
Tout d'abord la librairie SoftwareSerial n'est pas en cause.
J'ai repris tout à zéro et fait des mesures sur chaque pin.
Il s'agissait d'un problème d'alimentation. Au repos le circuit RS232 est bien alimenté en 5V, mais en transmission la tension tombait en dessous de 4v. (et fluctuait tout le temps)
Je me suis branché alors sur mon alim de labo et bingo, çà marche bien.
Il me reste a voir si c'est l'alim de l'UNO qui est déficiente ou si c'est l'équipement distant qui consomme trop.
Merci de votre aide.