Arduino Mega 2560 REV3 port de communication

Bonjour tout le monde,

je suis passé de l'adruino uno à l'arduino méga. Sur le UNO j'avais mis une communication par gsm (ça marchait), je souhaite conserver cette communication sur la nouvelle carte. Le problème c'est que l'arduino mega m'envoie bien des messages mais quand je lui envois des #R1 par sms (ce qui actionne des relais) j'ai juste le "lu" sur le message du téléphone et pas de relais se colle. de quoi peux provenir le problème ?

j'ai copié exactement le même code en modifiant la carte dans type de carte et le 18 et 19 pour TX et RX

Merci de votre aide.

Bonjour,

le code, ce serait un p' tit plus...

As-tu essayé avec RX0 et TX0? Pour voir au moins si ça fonctionne.

Le hardware est-il exactement le même? Tu peux essayer ton relais hors montage, sait-on jamais.

#include <SoftwareSerial.h> 
SoftwareSerial SIM900(18, 19);


void loop()  {


inchar=SIM900.read();
    if (inchar=='#')
    {
      delay(10);
 
      inchar=SIM900.read();
      if (inchar=='v')
      {
        delay(10);
        inchar=SIM900.read();
        if (inchar=='0')
        {

              digitalWrite(vcuisined, HIGH);   
               delay(1000);
                digitalWrite(vcuisinem, LOW);     
                 delay(4000);
                   digitalWrite(vsejourd, HIGH);   
                     delay(1000);
                       digitalWrite(vsejourm, LOW);     
                         delay(4000);
                           digitalWrite(vsalond, HIGH);   
                              delay(1000);
                             digitalWrite(vsalonm, LOW);   
                               delay(4000);
                                digitalWrite(vchambred, HIGH);   
                                  delay(1000);
                                    digitalWrite(vchambrem, LOW);
}

exemple

SoftwareSerial mySerial(10, 11); // RX, TX

tu n'as pas inversé RX et TX ?

18 et 19 pour TX et RX

dfgh:
exemple

SoftwareSerial mySerial(10, 11); // RX, TX

tu n'as pas inversé RX et TX ?

non j'ai essayé dans les deux sens dans un sens je reçois le sms de démarrage et dans l'autre rien :confused:

pas de relais se colle

L' as-tu testé? ( tu peux simplement l' actionner en mettant directement le +5V sur la bobine en ayant pris soin de le déconnecter de la broche de sortie de l' Arduino).

weetoz:
L' as-tu testé? ( tu peux simplement l' actionner en mettant directement le +5V sur la bobine en ayant pris soin de le déconnecter de la broche de sortie de l' Arduino).

Oui, mon relais fonctionne bien.

Ton code n' est pas entier, peux-tu le poster en entier s'il te plais?

Ce que tu peux faire, c' est envoyer des Serial.print juste après tes if pour voir si t' es bien rentré dans la condition.

char inchar; //Will hold the incoming character from the Serial Port.
#include <SoftwareSerial.h> 
char inchar; 
SoftwareSerial SIM900(7, 8);
boolean sms;

 int led1 = 9;
 int led2 = 10;
 int led3 = 11;
 int led4 = 12;

 void setup()
 {
 // prepare the digital output pins
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 //Initialize GSM module serial port for communication.


 Serial.begin(9600);
 delay(3000); // give time for GSM module to register on network etc.
 Serial.println("AT+CMGF=1"); // set SMS mode to text
 delay(200);
 Serial.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt
 delay(200);
 }

 void loop()
 {
 //If #a1b1c1d1 comes as sms, all LEDs should light up.
 if(Serial.available() >0)
 {
 inchar=Serial.read();
 if (inchar=='#')
   {
   delay(10);
   inchar=Serial.read();

 //first led
   if (inchar=='a')
     {
   delay(10);
   inchar=Serial.read();

 if (inchar=='0')
   {
   digitalWrite(led1, LOW);
   }
 else if (inchar=='1')
   {
   digitalWrite(led1, HIGH);
   }
 delay(10);


 //Second led
 inchar=Serial.read();

 if (inchar=='b')
   {
   inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led2, LOW);
 }

 else if (inchar=='1')
 {
 digitalWrite(led2, HIGH);
 }
 delay(10);

 // Third led
 inchar=Serial.read();
 if (inchar=='c')
 {
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led3, LOW);
 }
 else if (inchar=='1')
 {
 digitalWrite(led3, HIGH);
 }
 delay(10);

 //Fourth led

 inchar=Serial.read();
 if (inchar=='d')
 {
 delay(10);
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led4, LOW);
 }
 else if (inchar=='1')
 {
 digitalWrite(led4, HIGH);
 }
 delay(10);
 }
 }
 Serial.println("AT+CMGD=1,4"); // delete all SMS
 }
 }
 }
 }
 }

il manque un truc dans le setup
SIM900.begin(9600);

C'est un peu dommage d'avoir une mega et de continuer à utiliser softwareSerial alors que la mega propose des ports série matériels supplémentaires.

En plus, il faudrait lire ça https://www.arduino.cc/en/Reference/SoftwareSerial il y a des limitations avec la mega. On ne peut pas utiliser n'importe quelle broche.

infobarquee:
il manque un truc dans le setup
SIM900.begin(9600);

il est bien mis dans le setup je me suis juste trompé dans le copier/coller serial.begin est en faite SIM900

Merci a vous tous de m'avoir aidé, j'ai enfin trouvé la solution !!!!!!
Sur la méga on ne déclare pas les broches ( 7,8) mais le serial1,serial2,serial3.

Serial: 0 and 1; Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip.

Bonne continuation et encore un grand merci à ceux qui on pu m'aider :slight_smile: