Invio sms da chiamata get con funnysms

Ciao a tutti,

ho un problema. Ho trovato in rete questo codice per far spedire da Arduino dei messaggi sms tramite il servizio funnysms.es. Se faccio girare il codice qui sotto tutto funziona e la richiesta va a buon fine:

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,0,177); 
char serverName[] = "send.funnysms-ita.it";

EthernetClient client;

void setup() {

  Serial.begin(9600);

  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, server);
    
  }
  Serial.print("My address:");
  Serial.println(Ethernet.localIP());
  delay(1000);
  suonaAllarme("prova invio messaggio");
}

void loop()
{
    
      
     if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  
  

    for(;;);
  }
}
void suonaAllarme(String id)
{
  Serial.println("connessione al server in corso...attendere.....");
  String messaggio = "ALLARME:" + id;
  messaggio.replace(" ", "%20");
  if (client.connect(serverName, 80)) {
    Serial.println("connesso al server");
    client.println("GET /sms/batch.php?user=xxxxxx&pass=xxxxxxxx&rcpt=%2b39xxxxxxxx&data=" + messaggio + "&sender=Arduino&qty=n HTTP/1.1");
    client.println("HOST: send.funnysms-ita.it");
    client.println();
  
  } 
  else {
    Serial.println("connection failed");
  }
  
 
}

Il problema sorge quando invece di chiamare la funzione suonaAllarme dal setup, lo chiamo dal loop al verificarsi di un evento. In pratica non ricevo la risposta alla chiamata GET. Questo è il codice con il problema:

#include <SPI.h>
#include <Ethernet.h>

int buttonPin = 7;

byte mac[] = { 0x00, 0xAB, 0xCB, 0xCD, 0xDE, 0x02 };
IPAddress server(192,168,0,177); 

char serverName[] = "send.funnysms-ita.it";

EthernetClient client;

void setup()
{
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, server);
  }
  Serial.print("My address: ");
  Serial.println(Ethernet.localIP());
  delay(1000);

}

void loop()
{
    
  if(digitalRead(buttonPin) == HIGH)
      suonaAllarme("prova suono allarme");
  
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
} 
  for(;;);
}

void suonaAllarme(String id)
{
  String messaggio = "ALLARME: " + id;
  Serial.println(messaggio);
  messaggio.replace(" ", "%20");
  Serial.println(messaggio);
  Serial.println("connessione al server in corso...attendere.....");
  if (client.connect(server, 80)) {
    Serial.println("connesso al server");
    client.println("GET /sms/batch.php?user=xxxxxx&pass=xxxxxxxxx&rcpt=%2b39xxxxxxxx&data=" + messaggio + "&sender=Arduino&qty=n HTTP/1.0");
    client.println("HOST: send.funnysms-ita.it");
    client.println();
}
}

Dove sbaglio?

grazie

Ho trovato, bastava inserire un delay di 500 millisecondi prima di stampare la risposta.

Posto il codice in caso servisse a qualcuno:

include <SPI.h>
#include <Ethernet.h>

int buttonPin = 7;

byte mac[] = { 0x00, 0xAB, 0xCB, 0xCD, 0xDE, 0x02 };
IPAddress server(192,168,0,1); 

char serverName[] = "send.funnysms-ita.it";

EthernetClient client;
  
void setup()
{
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, server);
  }
  Serial.print("My address: ");
  Serial.println(Ethernet.localIP());
  delay(1000);

}

void loop()
{
    
  if(digitalRead(buttonPin) == HIGH)
      suonaAllarme("prova invio");
      

  }


void suonaAllarme(String id)
{
  String messaggio = "ALLARME: " + id;
  Serial.println(messaggio);
  messaggio.replace(" ", "%20");
  Serial.println(messaggio);
  Serial.println("connessione al server in corso...attendere.....");
  if (client.connect(serverName, 80)) {
    Serial.println("connesso al server");
    client.println("GET /sms/batch.php?user=xxxxx&pass=xxxxxxx&rcpt=%2b39xxxxxxx&data=" + messaggio + "&sender=Arduino&qty=n HTTP/1.0");
    client.println("HOST: send.funnysms-ita.it");
    client.println();
  }
  delay(500);
  while(client.available())
  {
     if (client.available()) {
    char c = client.read();
    Serial.print(c);
    }
  }
  
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

Vedi, esporre il problema Ti ha giá aiutato.
È un Forum fighissimo, vero? :wink: :wink: :wink:
Ciao Uwe