Utilisation des broches Tx et Rx sans connexion UART

Bonjour à tous,

Je veux utiliser Tx et Rx, je voulais donc faire une connexion UART mais j'ai seulement besoin de connaitre l'état de la broche Rx, est ce possible d'utiliser seulement l'état des broches ?
Car lorsque j'applique ce code :

const int rxPin = 11; 


void setup() {

  pinMode(rxPin, INPUT);
 

  Serial.begin(9600);
}

void loop() {

  int etatBrocheRx = digitalRead(rxPin);

  
  // Afficher l'état de la broche Rx
  if (etatBrocheRx == HIGH) {
    Serial.println("État de la broche Rx : HAUT");
  } else {
    Serial.println("État de la broche Rx : BAS");
  }

  delay(1000); 
}

Hors j'ai tout le temps l'état haut de la broche alors que je suis censé avoir aussi l'état bas donc soit c'est le câblage que je dois revoir OU soit justement le faite qu'on ne puisse pas avoir l'état de ces broches d'où ma question

Merci à vous !!

Tu développes sur quelle carte?

Bonjour,

A 9600 bauds les états bas vont être de l'ordre de 0.1ms à 1ms.
Tu dois bien te douter qu'avec ton delay de 1s tu vas rater 99.9% des états bas.

Sur adafruit adalogger feather M0

Ahhhh je ne savais pas dutout merci pour cette infos ducou pour les solutions soit je diminue le délai par exemple 0.1ms ou alors je peux aussi augmenté les baud ?
Merci pour l'info !

Si tu augmentes les bauds la durée va être encore plus courte.

Supprime le delay et trace le changement d'état.
Comme ceci


void loop() {
  static int oldEtat = LOW;

  int etatBrocheRx = digitalRead(rxPin);

  if (etatBrocheRx != oldEtat) {
    // Afficher l'état de la broche Rx
    if (etatBrocheRx == HIGH) {
      Serial.println("État de la broche Rx : HAUT");
    } else {
      Serial.println("État de la broche Rx : BAS");
    }
    oldEtat = etatBrocheRx;
  }
}

Je te remercie pour ton aide ! vraiment cool !

En fait, la demande n'est pas très claire.
Qu'est-ce que tu entends par "faire une connexion UART mais j'ai seulement besoin de connaitre l'état de la broche Rx"

  • tu veux lire l'état de RX parce que tu y connectes un signal tout-ou-rien?
  • tu veux utiliser l'UART en réception uniquement?

Au final, quel est le besoin?

En gros j'ai besoin de recevoir un signal sur l'état de la broche Rx d'une autre carte électronique. C'est à dire que ma carte Adafruit feather M0 sur laquelle j'envoie mon code arduino est connecté à l'autre carte électronique (un pcb développé par une entreprise et étant dans un outil). La broche Rx à l'état signifie que l'outil est réveillé et à l'état bas cela signifie que l'outil est endormi. Je veux don juste récupérer l'état de la broche Rx.
Je parlais d'une connexion UART car je pensais au début à récupérer les états par cette connexion mais il est plus facile de simplement récupérer que l'état de la broche (si il est possible de le faire sans connexion UART / sans protocole UART). En gros le protocole UART me prendrais plus de temps que simplement récupérer l'état d'une broche.

Donc il n'y a pas besoin d'UART et un simple digitalRead() fera l'affaire.

D'accord merci beaucoup pour ton aide , bonne journée !

Juste pour ne pas laisser sous-entendre que ce que tu veux faire serait faisable en UART.
Le UART est un Protocol d'échange de donnée, c'est à dire que le point A échange des données avec le point B, en utilisant le même langage des deux cotes.
Si l'un des deux cotés ne connais pas le langage, il n'y a pas de communication possible.
De plus, souvent le protocole rajoute des sortes de balises, c'est à dire des changements d'état.
Un état étant lui même "codé" électriquement.

Bonjour,

J'ai un problème de changement d'état de la broche Rx. Elle n'est surement pas reconnue et donc son état ne change pas. Cela fait plusieurs heures que j'essaye de régler le problème sans succès. Est ce que quelqu'un serait d'où cela peut venir ?
(je mets en pièce jointe la carte que j'utilise ainsi que le code

Datasheet :slightly_smiling_face:

code :slightly_smiling_face:

const int rxPin = 11; 


void setup() {

  pinMode(rxPin, INPUT);
 

  Serial.begin(9600);
}

void loop() {


  static int oldEtat = HIGH;
  int etatBrocheRx = digitalRead(rxPin);

  
  // Afficher l'état de la broche Rx
  if(etatBrocheRx!= oldEtat){
  if (etatBrocheRx == HIGH) {
    Serial.println("État de la broche Rx : HAUT");
  } else {
    Serial.println("État de la broche Rx : BAS");
  }

  }
}

Donc tu n'a aucun affichage, malgré que tu constate au voltmètre que le potentiel de la broche change ?

Ton programme ne vérifie pas que le moniteur série écris bien quelque chose, mais je suppose que tu l'a testé ?

Lorsque j'ouvre le serial monitor en téléversant ce code j'ai :
"Etat de la broche Rx : BAS "

cependant quand j'endors et je reveil l'outil l'état de la broche est censé être modifié.

J'ai fais quelques mesure en mesurant sur la broche Rx et GND :

  • Outil endormi ==> 3.287V
  • Outil réveillé ==> 3.294V

oldEtat n'est pas mis à jour dans le if avec la nouvelle valeur donc ce sera difficile de détecter les changements.

Et lorsque ta carte n'est pas connectée, tu vois les mêmes valeurs, coté carte Adafruit et coté carte outil?

J'ai changé le code

const int rxPin = 11; 

void setup() {
  pinMode(rxPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  static int oldEtat = HIGH;
  int etatBrocheRx = digitalRead(rxPin);

  // Afficher l'état de la broche Rx
  if (etatBrocheRx != oldEtat) {
    if (etatBrocheRx == HIGH) {
      Serial.println("État de la broche Rx : HAUT");
    } else {
      Serial.println("État de la broche Rx : BAS");
    }
    oldEtat = etatBrocheRx; // Mettre à jour oldEtat avec la nouvelle valeur
  }
}

      

Lorsque le câble PC - carte n'est pas connecté à la carte j'ai une tension de 2.711V au reveil et 0.892V à l'endormissement

Pour rappel la carte est alimenté par le PC pour que je puisse envoyer le code , mais elle est aussi alimenté par l'alimentation outil qui alimente la carte électronique dont j'ai besoin pour Rx et Tx , la carte vise à être autonome sur l'alimentation outil

Houlala, on peut avoir un dessin de tout ça?
Il y a toujours une certaine ambiguïté dans ton histoire. Tu continues de parler de Rx Tx alors que j'avais cru comprendre qu'il était question d'un état logique à détecter.

Oui oui désolé je veux seulement détecter l'état logique de Rx et les valeurs de tensions sont prises sur la broche Rx

Je suis du même avis que @fdufnews un schéma serait bien venue.
La broche 11 est la broche RX de ta carte de développement ?
On ne voit pas bien sur l'image qui est un peu flou.
Ou Rx est la broche de ton outil ?