Go Down

Topic: Shield RS232 en panne (Read 630 times) previous topic - next topic

FiiiGaARDo

J'ai tout remonté. Maintenant, je dois envoyer un message à travers le câble RS232 pour un afficheur lumineux défilant (McCrypt 590998), je dois le traduire en ASCII ou je le laisse comme tel ? Suis-je sensé retrouver une valeur en sortie même si je n'ai pas de COM associé ?

kamill

#16
May 02, 2019, 09:20 am Last Edit: May 02, 2019, 09:20 am by kamill
Il faut regarder la documentation de l'afficheur.
Généralement la transmission à ce type d'afficheur se fait en ASCII, mais il y a un protocole à respecter (code de commande, checksum, ...)

FiiiGaARDo

#17
May 17, 2019, 03:30 pm Last Edit: May 17, 2019, 03:40 pm by FiiiGaARDo
Je n'arrive pas à trouver de documentation pour trouver le pin du RX et du TX. De plus, je n'arrive pas à envoyer du texte à travers un pin, faut-il utiliser le Serial ou autre chose ?
Code: [Select]
#include <SoftwareSerial.h>
const char* mes = "<ID01><L1><PA><FE><MA><WC><FE>Feu de foret declare !10<E>";
int RX = 3;
int TX = 2;
const int BTN = 0;
SoftwareSerial Panneau(12, 11);

void setup() {
  pinMode(RX, INPUT);
  pinMode(TX, OUTPUT);
  pinMode(BTN, INPUT);
  Serial.begin(9600);
  Panneau.begin(9600);
  while (!Serial) {
    ;
  }
  Panneau.begin(9600);
}

void loop() {
  if (analogRead(BTN) <= 10 && analogRead(BTN) >= 0) {
    Serial.println("Bouton 1");
    Panneau.println(mes);
  }
    else if(analogRead(BTN)<=150 && analogRead(BTN)>=130){
    Serial.println("Bouton 2");
    Panneau.println(mes);
    }
    /*else if(analogRead(BTN)<=400 && analogRead(BTN)>=250){
    analogWrite(TX, mes);
    Serial.println("Bouton 3");
    }
    else if(analogRead(BTN)<=600 && analogRead(BTN)>=450){
    analogWrite(TX, mes);
    Serial.println("Bouton 4");
    }
    else (analogRead(BTN)<=800 && analogRead(BTN)>=700);{
    analogWrite(TX, mes);
    Serial.println("Bouton 5");
    }*/


Je vous laisse juger ce code, j'ai essayé de mettre à travers un pin ou dans le Serial ça n'actualise pas le panneau mais j'arrive à voir le courant passer avec un Voltmètre.

Merci de vos réponses et de pouvoir m'aider si je me trompe...

kamill

Essayes déjà d'afficher simplement un message
Code: [Select]
#include <SoftwareSerial.h>
const char* mes = "<ID01><L1><PA><FE><MA><WC><FE>Feu de foret declare !10<E>";
SoftwareSerial Panneau(12, 11);

void setup() {
  Serial.begin(9600);
  Panneau.begin(9600);
  Panneau.println(mes);
}

void loop() {
}


Tu es sur de la vitesse? Tu es sur du protocole?

FiiiGaARDo

Ça ne m'affiche rien, peut-être parce que je n'ai pas les bons pins, j'en ai essayé beaucoup mais toujours le même résultat...

Je ne suis pas expert, je ne sais pas trop ce qu'est la vitesse ou le protocole. :/

supercc

#20
May 17, 2019, 04:22 pm Last Edit: May 17, 2019, 04:23 pm by supercc
Bonjour,

SoftwareSerial est un peu piégeux si on ne lit pas la doc :

https://www.arduino.cc/en/Reference/SoftwareSerial :

Code: [Select]

Not all pins on the Leonardo and Micro support change interrupts,
so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO),
15 (SCK), 16 (MOSI).



kamill

#21
May 17, 2019, 04:29 pm Last Edit: May 17, 2019, 04:38 pm by kamill
Je ne suis pas expert, je ne sais pas trop ce qu'est la vitesse ou le protocole. :/
Ou est ce que tu as trouvé qu'il faut envoyer "<ID01><L1><PA><FE><MA><WC><FE>Feu de foret declare !10<E>" ?
Ce n'est pas au hazard, tu dois bien avoir une doc.

Pourquoi tu n'utilises pas Serial1?
En plus de ce qu'a dit supercc ton shield rs232 ne gère pas D11, D12

FiiiGaARDo

Ou est ce que tu as trouvé qu'il faut envoyer "<ID01><L1><PA><FE><MA><WC><FE>Feu de foret declare !10<E>" ?
J'ai trouvé une doc qui marche. (lien)
Mais si je mets Serial1 je ne peut pas choisir les pins

Not all pins on the Leonardo and Micro support change interrupts,
so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO),
15 (SCK), 16 (MOSI).
Je ne sais pas lesquels utiliser vu que j'ai lié D2 à RX et D3 à TX

kamill

Pourquoi tu veux choisir les pins sur Serial1?
Serial1 utilise le pins 0 et 1, tu configures le shield pour les pins 0 et 1

supercc

Si tu as un second port série, aucun intérêt d'utiliser SoftwareSerial (c'est pour les pauvres (cartes) qui n'ont qu'un port série). Fait comme Kamill dit, utilise le second vrai port série n°1.

FiiiGaARDo

#25
May 23, 2019, 08:40 am Last Edit: May 23, 2019, 09:10 am by FiiiGaARDo
J'ai mis ce code vu que Serial1 se met en (0,1) :

Code: [Select]

const char* mes = "<ID01><L1><PA><FE><MA><WC><FE>Feu de foret declare !10<E>";

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.println(mes);
}
void loop() {
 
}


Ça ne me renvoie rien.
De plus, je ne sais pas si change quelque chose mais je passe par 2 câbles RS232 donc le signal change ou pas ?

kamill

De plus, je ne sais pas si change quelque chose mais je passe par 2 câbles RS232 donc le signal change ou pas ?
Ca dépend. Ce sont des câbles droits ou croisés?

FiiiGaARDo

Comment voit-on que c'en est un, c'est par rapport aux nombres sur chaque broche ?

supercc

Bonjour, je crois que c'est juste un croisement entre les broches Rx (Receiver) et Tx (Transmiter) . Avec un multimètre tu devrais pouvoir si le Rx d'un coté est relié au Tx de l'autre coté (câble croisé) ou si le Rx d'un coté est cablé au Rx de l'autre coté (câble droit). Je ne pense pas que cela soit lié au nombre de broches du connecteur.

FiiiGaARDo

Normalement, si le courant est nul c'est que c'est bon ?
Je peux le faire pour un câble mais l'autre va d'une entrée RS232 à une espèce de sortie "Ethernet" je ne sais pas où est le RX et le TX.

Go Up