Problème liaison série et digital Read

Bonjour, je cherche à faire un programme qui reçoit sur un Arduino nano un signal PWM et qui envoi en liaison série un caractère sur un autre Arduino nano si ce caractère est lu alors j'envoi un signal sur un digital pin qui va m'ouvrir ou fermer un relai.
Tout marche séparément, mes cartes marche j'arrive à contrôler mes relai je réceptionne bien mon PWM cependant lorsque mon deuxième Arduino reçoit mes donnée de liaison série et rentre dans ma boucle if le digital write high ou low ne marche pas en dehors de cette boucle il marche pourquoi ? si vous avec des idées je suis preneur ou d'autre façon de faire si celle la n'est pas possible. je ne cherche pas a faire un beau programme juste un petit programme fonctionnel.

PROGRAMME EMMETEUR:

include <SoftwareSerial.h>

SoftwareSerial mySerial(0, 1);

int pulse = 6;
int val;

void setup()
{
mySerial.begin(9600);
pinMode(pulse, INPUT);
}
void loop()
{
val = pulseIn (pulse, HIGH);
if (val < 1400)
{
mySerial.write("b");
} delay (50);

if (val > 1400)
{
mySerial.write("a");
}delay(50);

}

PROGRAMME RECEVEUR:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(0, 1);
String readString;
void lumiere_allume();
void lumiere_eteinte();

void setup()
{
mySerial.begin(9600);
pinMode(5, OUTPUT);

}

void loop()
{
if (readString.indexOf("a") != -1)
{
lumiere_allume();
//digitalWrite(5, HIGH);
//Serial.println("a");
}delay (1000);

if (readString.indexOf("b") != -1);
{
lumiere_eteinte();
//digitalWrite(5, LOW);
//Serial.println("b");
} delay (1000);
}

void lumiere_allume()
{
digitalWrite(5, HIGH);
Serial.println("a");
}

void lumiere_eteinte()
{
digitalWrite(5, LOW);
Serial.println("b");
}

j'ai testé de passer mes digital dans une fonction c'est pour cela qu'il y a une répétition.

Salut,
Alors déja, la librairie SoftwareSerial prend en paramètres les pins Rx et Tx de ta liaison.
Tu peux pas avoir SoftwareSerial mySerial (0, 1); dans l'émetteur et dans le récepteur vu que tes fils vont se croiser

pourtant dans mon moniteur série je vois bien mes prints c'est que tout passe non ?

Petite remarque : c'est un peu ballot de déclarer un SoftwareSerial sur D0 et D1, puisque ces pins sont déjà occupées par un HardwareSerial. Autant utiliser d'autres pins et réserver D0 et D1 au téléversement et au moniteur série.

Effectivement, mais il n'est pas interdit de croiser physiquement les fils RX et TX.

1 Like

je comprend mais le problème persiste je n'arrive toujours pas a sortir quoi que ce soit sur mon digital

Au lieu de comparer la valeur retournée de readString(), il vaut mieux passer par une variable et l'afficher sur le moniteur série.
Ne pas oublier Serial.begin(115200); dans setup().
C'est aussi une bonne raison d'utiliser des pins autres que D0 D1 pour la communication : pouvoir débogguer.
Recommandation : l'utilisation des Strings C++ sur ARDUINO est déconseillée.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.