Communication TX/RX Mega

Bonjour !

J'essaie de faire communiquer deux arduino Mega entre eux mais j'ai un problème:

if (Serial1.available())
{
		if (Serial1.read() == 'A')
		 {
			  VARIABLE = 1;
			  Serial.println("MESSAGE A");
		 }

		 else
		 {
			Serial.println("COM_WITHOUT_MESSAGE");
		 }
}
else
{
	Serial.println("No_COM");
}

Avec le premier arduino je print en permanance 'A' ( oui je sait c'est très sale )
Comme ça , le code fonctionne, seulement, si je supprime la ligne :
Serial.println("MESSAGE A");

Il m'affiche COM_WITHOUT_MESSAGE , Sauf si la VARIABLE change et que du coup la Print la refait changer,

Mais si je supprime aussi COM_WITHOUT_MESSAGE

Il me print le No_COM , et ne recois plus le A ( la VARIABLE ne change même plus )

Les codes "complets"
Arduino qui envoi:

const int TX1 = 18;
const int RX1 = 19;

void setup() {

  pinMode(TX1, OUTPUT);
  pinMode(RX1, INPUT);
  Serial1.begin(9600);
  Serial.begin(9600);
}

void loop() {

    Serial1.print('A');

}

Arduino qui reçois:

const int TX1 = 18;
const int RX1 = 19;
int VARIABLE =0;

void setup() {

  pinMode(TX1, OUTPUT);
  pinMode(RX1, INPUT);
  Serial1.begin(9600);
  Serial.begin(9600);
}

void loop() {

    if (Serial1.available())
{
		if (Serial1.read() == 'A')
		 {
			  VARIABLE = 1;
			  Serial.println("MESSAGE A");
		 }

		 else
		 {
			Serial.println("COM_WITHOUT_MESSAGE");
		 }
    }
else
    {
	Serial.println("No_COM");
    }

if ( VARIABLE == 1 )
    {
	VARIABLE = 0;
    }
}

Aussi une autre chose étrange , avec le moniteur d'arduino j'ai fait ceci :

if (Serial.available())
{
		if (Serial.read() == 'B')
		 {
		VALID_REQUEST = 1;
		Serial.println("OK");
		 }
}

Il me print bien le OK , mais ne me change absolument pas la variable.

Savez vous pourquoi ?
Merci à vous!

Vous avez reliés les ground des 2 arduinos ?

Les pinMode() sont inutiles pour vos ports série matériels

Ce test dans le code

if ( VARIABLE == 1 )
    {
	VARIABLE = 0;
    }

pourrait être simplifié, vu le reste du code... mettez juste directement VARIABLE à 0 ce sera plus rapide...(et il se peut que le compilateur décide que variable ne sert à rien et vire carrément le code associé)

Postez des codes complets pour votre question sur VALID_REQUEST

bonjour , oui les Ground sont bien reliés entre les arduino.

Les codes en soit font plus de 2000 lignes , donc j'ai fait des raccourcis pour pas avoir tout a mettre mais pour celui la

if ( VARIABLE == 1 )
    {
	VARIABLE = 0;
}

il faut que j'appuie sur un bouton en plus dans le vrai code, c'était juste pour dire que je repassais la variable a 0 a un moment , et que avec l'arrivé du message d'un arduino a l'autre , je re changeais la variable.

Oubliez pour le Moniteur avec Serial.read , j'ai fait une erreur de variable , le problème est résolu.

mettez juste directement VARIABLE à 0 ce sera plus rapide

Bonjour,
HS :
par dogme perso j'évite de faire des opérations inutiles sur les ports, mais dans ce cas précis je ne discute pas (je faisais pareil en assembleur)
fin du HS

J'ai plus ou moins réussi a comprendre , problème étant que :

if (Serial1.available())
{
		if (Serial1.read() == 'A')
		 {
		VALID_REQUEST = 1;
		Serial.println("Demande de validation OCC");
		 }		
		 else if (Serial1.read() == 'B')
		   {
			  MODE_NORMAL =1;
			  Serial.println("Mode Normal");
		   }
		   else if (Serial1.read() == 'R')
		   {
			  VL_PARKED_ZONE_8 =1;
			  Serial.println("VL en zone 8 parker");
		   }
		   else
		   {
			Serial.println("MESSAGE INCONNU");
		   }
}

Il me reconnais bien le message A quand il est envoyer par l'arduino 1, mais si j'envois B ou R , il me Print message inconnu.

Votre problème c’est que si ce n’est pas ‘A’ Vous avez lu déjà le port série donc le caractère n’y est plus et pourtant vous essayez de le relire...

Si Serial available, alors lire le caractère dans une variable puis faire un switch par exemple pour décider quoi faire

Oui effectivement c'est ce qu'on m'a expliqué tout à l'heure j'ai pas eu le temps de changer mon post du coup.
Effectivement vue qu'il essaie de lire A et que ca ne l'est pas , les message est perdu d'ou le fait que après il ne lis strictement rien , donc du coup j'ai fait un " VARIABLE = Serial1.read()" et je lis if VARIABLE = 'X'

Merci a vous :wink:

Le read() retournera -1 s’il ny a rien dans le buffer (C’est pour cela qu’il faut le lire dans un int et pas un char / pour avoir 2 octets et différencier 0xFF qui peut être une valeur valide de 0xFFFF (soit -1) qui dénote une erreur de lecture. Lire sur un byte est un soucis car le byte est non signé donc ne sera jamais égal à -1 et vous ne verrez pas d’erreur de lecture)