Uno + Shield Ethernet + Shield GSM/GPRS

Caros,

Não estou conseguindo fazer funcionar as duas shields juntas, desconfio que é algo do código e não físico, com tudo montado junto mas rodando os códigos em separado, funciona normal. O projeto é com uma shield ethernet verificar se existe conexão (se a internet não caiu) e caso aconteça, a shield gsm envia um sms. No código a gsm está para fazer ligações, só para fins de teste, depois mudo para sms.

Durante o teste da ethernet, mesmo retornando positivo (“ok, tem”), está retornando também quando não tem (“Sem Conexao”), e isso faz a gsm trabalhar. Quando rodo apenas o código da ethernet, mesmo com a gsm plugada, funciona como esperado. Então imagino eu deve ser algo no código que não estou sabendo como corrigir. Agradeço vossa atenção. Segue o código.

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


char server[] = "www.google.com";
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetClient client;
SoftwareSerial mySerial(2,3);
int onModulePin = 6;


void setup() 
{
  Serial.begin(9600); 
  mySerial.begin(19200);
  
  digitalWrite(onModulePin,HIGH); 
  delay(2000);                    
  digitalWrite(onModulePin,LOW);  
  
  Ethernet.begin(mac); 
 
  mySerial.println("\r");
  delay(1000);
  mySerial.println("AT+CMGF=1\r");
  delay(1000);  
    
}



void loop() 
{
  Serial.println("Testando se tem internet...");
  if (client.connect(server, 80)) 
  {
    Serial.println("Ok");
    client.println();
  } 
  else {
  Serial.println("Sem conexao");
  }  

  client.stop();
  client.flush();
  Serial.println("Desconectando...");
  Serial.println();
 

  //if (mySerial.available())
  if (Serial.println("Sem conexao"));
  {
  //mySerial.println("ATD NUMERO;");      // numero a ser discado
  mySerial.println("ATD xxxxxxxx;");      // numero a ser discado
  delay(10000);                           //completar ligação
  delay(6000);                           //receber ligação, esperar
  mySerial.println("ATH0");              //finaliza ligação
  }
  delay(10000);
  delay(10000);
  delay(10000);
  delay(10000);


  delay(60000);
 
}

if (Serial.println("Sem conexao"));
{
//mySerial.println("ATD NUMERO;"); // numero a ser discado
mySerial.println("ATD xxxxxxxx;"); // numero a ser discado
delay(10000); //completar ligação
delay(6000); //receber ligação, esperar
mySerial.println("ATH0"); //finaliza ligação
}

O teu erro esta na avaliaçao que estas a fazer à condição do if!
O if avalia o que colocas dentro do () e tu tens la um Serial.print().O serial.println retorna o numero bytes que escreveu e qualquer valor diferente de 0 é considerado verdadeiro. No teu caso deve ser devolvido o valor 12.Logo isso ficara

if(12)
{
//Vou executar sempre este bloco
}

Como consequencia todo o bloco do if executado.
Esses delays sao so mesmo pra um breve teste certo?

Obrigado pela resposta Hugo

Esse meu if tava bom demais se fosse assim… sei muito pouco do if, preciso me aprofundar nisso.

Os delays estou deixando por que ainda estou testando, no exemplo que segui já estava assim.