Non eccita i relè

Un cordiale saluto a tutti, sono giorni che tento di far funzionare correttamente un programma per irrigazione. Andava tutto bene con la vecchia SIM, da quando ho cambiato SIM, non riesco più a comandare i quattro relè, ne funziona solo uno col comando (#a1 accende #a0 spegne) gli altri comandi (#b1-#c1- #d1) li visualizzo tutti come comando ricevuto sul monitor seriale, ma non si eccitano i relè. Considerando che i comandi vengono trasmessi da Arduino al monitor seriale, penso che lo sketch sia corretto. I collegamenti sono: alimentazione separata tra Arduino(5 V) e la SIM900(5 V- 2A)
I collegamenti della SIM900 sono collegati bene, ed anche su Arduino.
TX con RX Pin 7/8
Pin 9 col 9 della SIM900
Pin, 10-11-12-13, di Ardiuno con i relè.
Allego lo sketch, se volete dare un’occhiata, ha funzionato sempre bene.
GND con GND della SIM900. Grazie anticipatamente.

#include <Arduino.h>
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7,8); 

char incoming_char=0; 
int salir = 0;

int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
Serial.println("a\n");

SIM900.begin(19200); 
delay(25000);
Serial.begin(19200); 
Serial.println("OK"); 

pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  pinMode(9, INPUT);
}
void llamar()
{
SIM900.println("ATD+39392xxxxx285;"); 
delay(100);
SIM900.println();
delay(30000); 
SIM900.println("ATH");
delay(1000);
}
void mensaje_sms()
{
SIM900.print("AT+CMGF=1\r"); 
delay(100);
SIM900.println("AT+CMGS=\"+3934xxxxxxx\"");
delay(100);
SIM900.println("Saluti da LUCA");
delay(100);
//SIM900.println("AT+CSCS="GSM");
SIM900.println((char)26); 
delay(100);
SIM900.println();
delay(5000);
Serial.println("SMS sent successfully");
}
void espera_mensaje()
{
salir = 1;
while(salir==1)
{
if(SIM900.available()>0)
{
incoming_char=SIM900.read(); 
Serial.print(incoming_char);

salir = 0;
}
}
}
void modo_recibe_mensaje()
{
SIM900.print("AT+CMGF=1\r"); 
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");

delay(1000);
}
void loop()
{
llamar(); 
mensaje_sms();
modo_recibe_mensaje();
for(;;)
{
if(SIM900.available()>0)
{
incoming_char=SIM900.read();
Serial.print(incoming_char); 
if (incoming_char=='#')
{
  delay(10);
incoming_char=SIM900.read();
if (incoming_char=='a')
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led1, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led1, HIGH);
}
incoming_char=SIM900.read();
Serial.print(incoming_char);.
if (incoming_char=='#')
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='b')
{
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led2, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led2, HIGH);
}
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='c')
{
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led3, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led3, HIGH);
}
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='d')
{
  }
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led4, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led4, HIGH);
    }
  }
}
delay(10);
   }
}
SIM900.println("AT+CMGD=1,4"); 
     }
    }
   }
  }
 }
}

Buona sera nid69ita, Non mi sono presentato in quanto ho menzionato il mio vecchio nick, luca55. Non mi sembrava il caso fare un copia e incolla.

luca1955:
Buona sera nid69ita, Non mi sono presentato in quanto ho menzionato il mio vecchio nick, luca55. Non mi sembrava il caso fare un copia e incolla.

... vero, la tua vecchia presentazione è in QUESTO thread, però, per i motivi di cui al punto 16.7 del REGOLAMENTO è meglio se fai il copia/incolla così, chi vuole sapere di più su di te, può cercare direttamente il tuo nuovo nik nel thread di presentazione :wink:

Grazie

Guglielmo

Grazie a Lei Guglielmo.

luca1955:
Un cordiale saluto a tutti, sono giorni che tento di far funzionare correttamente un programma per irrigazione. Andava tutto bene con la vecchia SIM, da quando ho cambiato SIM, non riesco più a comandare i quattro relè, ne funziona solo uno col comando (#a1 accende #a0 spegne) gli altri comandi (#b1-#c1- #d1) li visualizzo tutti come comando ricevuto sul monitor seriale, ma non si eccitano i relè. Considerando che i comandi vengono trasmessi da Arduino al monitor seriale, penso che lo sketch sia corretto. I collegamenti sono: alimentazione separata tra Arduino(5 V) e la SIM900(5 V- 2A)
I collegamenti della SIM900 sono collegati bene, ed anche su Arduino.
TX con RX Pin 7/8
Pin 9 col 9 della SIM900
Pin, 10-11-12-13, di Ardiuno con i relè.
Allego lo sketch, se volete dare un’occhiata, ha funzionato sempre bene.
GND con GND della SIM900. Grazie anticipatamente.

#include <Arduino.h>

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7,8);

char incoming_char=0;
int salir = 0;

int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
Serial.println("a\n");

SIM900.begin(19200);
delay(25000);
Serial.begin(19200);
Serial.println("OK");

pinMode(9, OUTPUT);
 digitalWrite(9, LOW);
 delay(1000);
 digitalWrite(9, HIGH);
 delay(2000);
 pinMode(9, INPUT);
}
void llamar()
{
SIM900.println("ATD+39392xxxxx285;");
delay(100);
SIM900.println();
delay(30000);
SIM900.println("ATH");
delay(1000);
}
void mensaje_sms()
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT+CMGS="+3934xxxxxxx"");
delay(100);
SIM900.println("Saluti da LUCA");
delay(100);
//SIM900.println("AT+CSCS="GSM");
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
Serial.println("SMS sent successfully");
}
void espera_mensaje()
{
salir = 1;
while(salir==1)
{
if(SIM900.available()>0)
{
incoming_char=SIM900.read();
Serial.print(incoming_char);

salir = 0;
}
}
}
void modo_recibe_mensaje()
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");

delay(1000);
}
void loop()
{
llamar();
mensaje_sms();
modo_recibe_mensaje();
for(;:wink:
{
if(SIM900.available()>0)
{
incoming_char=SIM900.read();
Serial.print(incoming_char);
if (incoming_char=='#')
{
 delay(10);
incoming_char=SIM900.read();
if (incoming_char=='a')
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led1, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led1, HIGH);
}
incoming_char=SIM900.read();
Serial.print(incoming_char);.
if (incoming_char=='#')
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='b')
{
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led2, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led2, HIGH);
}
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='c')
{
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led3, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led3, HIGH);
}
{
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='d')
{
 }
delay(10);
incoming_char=SIM900.read();
if (incoming_char=='0')
{
digitalWrite(led4, LOW);
}
else if (incoming_char=='1')
{
digitalWrite(led4, HIGH);
   }
 }
}
delay(10);
  }
}
SIM900.println("AT+CMGD=1,4");
    }
   }
  }
 }
}
}





![1.JPG|723x372](upload://qBcVzbChHbgleWjSCfPd6ruVfua.jpeg)

![2.JPG|733x377](upload://7RjjY2nipiz3MnPJAXcviBWuiKh.jpeg)

Buonasera a tutti, non c'è nessuno disposto a darmi un aiuto? L'anno scorso Orso2001 mi diede un grande aiuto, non so se posso contattarlo direttamente senza beccarmi dei cazziatoni dai moderatori. Buona serata...

luca1955:
... non so se posso contattarlo direttamente senza beccarmi dei cazziatoni dai moderatori. Buona serata...

... te li becchi ... REGOLAMENTO, punto 12 :smiley: :smiley: :smiley:

Guglielmo

Si letto!!! Infatti mi era sembrato di aver già letto, ma non ero certo che fosse in questo forum. Grazie

Quel codice non è nemmeno ben indentato

Comincia almeno ad indentarlo

CTRL+T dentro a IDE e indenta in automatico. Otterrai un codice leggibile. Scritto così senza indentazione è un vero macello da leggere.

Buonasera, grazie per avermi risposto. Non sapevo che Control+T mettessero in ordine l'impostazione del codice... grazie! purtroppo non sono un genio con i codici, nonostante perda tanto tempo a cercare di fare da solo per non disturbare. Ora seguendo i vostri consigli ho cercato di sistemare un pochino, eliminando anche (#include Arduino), Non capisco perchè solo all'invio di (#a1) funziona, ma con gli altri nulla, nonostante il monitor seriale mi fa leggere che i comandi sono stati ricevuti.

//#include <GSM.h>
//#include <Arduino.h>
#include <SoftwareSerial.h>;
SoftwareSerial SIM900(7, 8); // Configurare la porta seriale per GSM SIM

char incoming_char = 0; //Variabile che salva i caratteri inviati dalla SIM
int salir = 0;
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  Serial.println("a\n");
  // wake up the GSM shield
  SIM900.begin(19200); //Configura velocidad serial para el SIM
  delay(25000); //Ritardo per trovare un NET
  Serial.begin(19200); //Configura velocidad serial para el Arduino
  Serial.println("OK"); //OK messaggio sul arduino, per sapere che tutto sta andando bene
}
void llamar()
// Funzione che consente di chiamare un telefono cellulare locale
{
  SIM900.println("ATD+3932XXXXXXX93;"); //Celular
  delay(100);
  SIM900.println();
  delay(30000); // wait for 30 seconds...
  SIM900.println("ATH"); //Appendere il telefono
  delay(1000);
}
void mensaje_sms()
//Funcion para mandar mensaje de texto. =Funzione di messaggistica di testo
{
  SIM900.print("AT+CMGF=1\r"); // Comando AT per inviare il messaggio SMS
  delay(100);
  SIM900.println("AT+CMGS=\"+39347XXXXXXX59\""); //numero di cellulare del destinatario, in formato internazionale
  delay(100);
  SIM900.println("SaluTI DA LUCA"); // messaggio da inviare
  delay(100);
  //SIM900.println("AT+CSCS="GSM");
  SIM900.println((char)26); // Terminare il comando AT con un codice ^ Z, ASCII 26 // Comando finale
  delay(100);
  SIM900.println();
  delay(5000); // Tempo per il messaggio da inviare
  Serial.println("SMS sent successfully");
}
void espera_mensaje()
{
  salir = 1;
  while (salir == 1)
  {
    if (SIM900.available() > 0)
    {
      incoming_char = SIM900.read(); //Prendi il carattere dalla porta seriale cellulare.
      Serial.print(incoming_char); //Stampare il carattere in entrata nel terminale.
      salir = 0;
    }
  }
}
void modo_recibe_mensaje()
{
  //Impostare la modalità di testo per inviare o ricevere messaggi
  SIM900.print("AT+CMGF=1\r"); // impostare la modalità SMS al testo
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
    delay(1000);
  //Serial.println("Ready...");
}
void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(7000);
}
void loop()
{
  llamar(); //fiamma
  mensaje_sms(); //Envia mensaje
  modo_recibe_mensaje();
  for (;;)
  {
    if (SIM900.available() > 0)
    {
      incoming_char = SIM900.read();
      Serial.print(incoming_char); //Print the incoming character to the terminal.
      if (incoming_char == '#')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == 'a')
        {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == '0')
          {
            digitalWrite(led1, LOW);
          }
          else if (incoming_char == '1')
          {
            digitalWrite(led1, HIGH);
          }
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == 'b')
          {
            incoming_char = SIM900.read();
            if (incoming_char == '0')
            {
              digitalWrite(led2, LOW);
            }
            else if (incoming_char == '1')
            {
              digitalWrite(led2, HIGH);
            }
            delay(10);
            incoming_char = SIM900.read();
            if (incoming_char == 'c')
            {
              incoming_char = SIM900.read();
              if (incoming_char == '0')
              {
                digitalWrite(led3, LOW);
              }
              else if (incoming_char == '1')
              {
                digitalWrite(led3, HIGH);
              }
              delay(10);
              incoming_char = SIM900.read();
              if (incoming_char == 'd')
              {
                delay(10);
                incoming_char = SIM900.read();
                if (incoming_char == '0')
                {
                  digitalWrite(led4, LOW);
                }
                else if (incoming_char == '1')
                {
                  digitalWrite(led4, HIGH);
                }
              }
            }
            delay(10);
          }
        }
        SIM900.println("AT+CMGD=1,4"); // delete all SMS
      }
    }
  }
}

La parte dove riconosci, carattere per carattere, il messaggio in arrivo è sbagliata

Devi riscriverla come macchina a stati

Nei miei vecchi post trovi delle idee

Cerca "aiutateci ad aiutarvi"
E leggilo tutto e bene, e poi fai lo stesso coi varii link

Buonasera, grazie Standaroil, cercherò i tuoi vecchi post per darmi un'idea di come risolvere.
Buonaserata a tutti.