Go Down

Topic: Utilisation de "SoftwareSerial" (Read 442 times) previous topic - next topic

Burgou

Apr 03, 2019, 08:48 am Last Edit: Apr 03, 2019, 12:04 pm by jfs
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):
Code: [Select]

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

}

kamill

#1
Apr 03, 2019, 09:36 am Last Edit: Apr 03, 2019, 09:38 am by kamill
Bonjour,

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.

Tu utilises mal les balises de code. C'est:
[code]
// programme ici
[/code]

fdufnews

Code: [Select]
/*
Connexions UNO vers MICROBOT RS232
UNO(RX) pin 2 vers MICROBOT pin (TX)
UNO(TX) pin 3 vers MICROBOT pin (RX)
 */
A la lecture de la doc de l'adaptateur MICROROBOT, je pense que c'est le contraire

RX    Asynchronous serial data receive
TX    Asynchronous serial data transmit


Donc:
  • la connexion marquée RX sur l'adaptateur correspond à la réception et devrait donc être connectée sur le 2 de l'UNO
  • la connexion marquée TX sur l'adaptateur correspond à la transmission et devrait donc être connectée sur le 3 de l'UNO

Burgou

j'ai essayé de croiser les fils mais le résultat est le même...

fdufnews

#4
Apr 03, 2019, 03:55 pm Last Edit: Apr 03, 2019, 03:57 pm by fdufnews
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.
Code: [Select]
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.

Burgou

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.

bidouilleelec

#6
Apr 03, 2019, 07:47 pm Last Edit: Apr 03, 2019, 07:48 pm by bidouilleelec
L'adaptateur est-il alimenté et les masses reliées?

Burgou

Oui il est alimenté. Il a fonctionné (transmis quelques bits) mais pas avec SoftwareSerial...

kamill

Bonjour,

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?

fdufnews

Ah !!! Je n'avais pas envisagé ça.

kamill

Moi non plus et ça me surprend que ça ne fonctionne pas.

fdufnews

J'ai trouvé ça mais c'est un peu vieux. J'ignore s'il y a eu des évolutions depuis.

kamill

#12
Apr 04, 2019, 11:06 am Last Edit: Apr 04, 2019, 11:10 am by kamill
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.

fdufnews

Attention, sur mega softwareSerial ne fonctionne pas sur toutes les IO voir là

kamill

Bien vu. Je n'avais pas fait attention à ça.

Go Up