Accendere un led con SIM800L e Arduino

Salve. Ho realizzato il progetto e il codice illustrato da Paolo Aliverti nel suo tutorial 565, utilizzando:

SIM800L (blu), alimentata con 5V 4a;

Arduino Nano, alimentato con 5V 2a al pin +5V;

alimentazioni separate, con massa in comune.

Funziona perfettamente se collego Arduino al PC con il serial monitor aperto.

Se invece non apro il serial monitor o se non collego Arduino al PC, l’SMS non accende il led.

Ho fatto diverse prove, ma non sono riuscito a capire dove sia l'errore.
Grazie per l'aiuto.
Marco

Il codice:

#include <SoftwareSerial.h>

SoftwareSerial sim800(2, 3); //SIM800L Tx & Rx is connected to Arduino #2 & #3

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  sim800.begin(9600);

  Serial.println("Initializing..."); 
  delay(1000);

  sim800.println("AT"); 
  updateSerial();
  
  sim800.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  sim800.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  updateSerial();
}

int n = 0; 
String ret = "";
bool LOOP = true;
  
void loop() {
  if (sim800.available()) {
      char c = sim800.read();
      if (c == '\n') {
        Serial.println("RX:" + ret + "#");                
        if (ret == "ledon") {
          digitalWrite(13, HIGH);
          Serial.println("on");
        } else if (ret == "ledoff") {
          digitalWrite(13, LOW);
          Serial.println("off"); 
        }
        ret = "";
      } else if (c == '\r') {        
      } else {
        ret += c;                 
      }    
    }
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    sim800.write(Serial.read());
  }
  while(sim800.available()) {
    Serial.write(sim800.read());
  }
}

Mi rispondo da solo, non avevo visto che un topic con lo stesso titolo è stato chiuso sei mesi fa.

Ho realizzato che il mio codice è corretto, ma il problema è il reset di Arduino, per cui apro un alto post dal titolo:

“SIM800 Reset hardware”.