Wifi Shield o Ethernet shield con un if

salve
Nelle mie prove mi capita spesso di cambiare le 2 schede e cercavo un sistema veloce per far partire lo sketch giusto.
ho minimizzato i 2 avvii e "mischiati", per ora provando con Wifi shield le dichiarazioni non vanno in conflitto,
con ethernet shield ora non posso provare.

mi chiedevo se fosse possibile far partire una delle 2 shield con un "if" (sistema UDP),
nel loop sono identici, per quello che devo fare :slight_smile:

#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ethernet tuo MAC
 IPAddress ip(192,168,1,177); //ethernet tuo IP arduino
int status = WL_IDLE_STATUS;
char ssid[] = "mioRouter"; 
char pass[] = "passRouter";  
unsigned int localPort = 2300; 
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; 
//***************************************************
WiFiUDP Udp;         //per ethernet  commenta qui
//EthernetUDP Udp; //per ethernet decommenta qui 
//***************************************************
void setup() {
  Serial.begin(9600); 
  if (WiFi.status() == WL_NO_SHIELD) { 
    while(true);
  } 
  while ( status != WL_CONNECTED) {    
    status = WiFi.begin(ssid, pass); 
    delay(10000);
  } 
  Udp.begin(localPort);  
 }
/*
 void setup() {   //setup ethernet
  Serial.begin(9600); 
  Ethernet.begin(mac, ip); // cambia solo questo
  Udp.begin(localPort);
}
*/
void loop(){
 
}

Ciao,
in questo pezzo di codice :

si possono usare le due shield indifferentemente, basta lasciare

#define WIFI

se usi lo shield wifi, oppure commentarlo se utilizzi l'ethernet (nel tuo caso dovrebbe risutlati facile questa modifica).

Oppure potresti sfruttare la funzione status() della libreria wifi, negli esempi si trova questo blocco condizionale:

// check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present"); 
    // don't continue:
    while(true);
  }

potresti modificarlo a tuo favore, in modo che se non trova shield wifi inserito, si intende presente l'ethernet e viene caricata la libreria corrispondente.

perfetto
ho optato per la prima soluzione, anche perchè per la seconda non ci sono riuscito :~
ma va bene così
grazie