[RISOLTO] Verificare la presenza del collegamento ethernet

Salve e buon 2016! Vorrei spaere se c'è un modo per verificare la presenza del collegamento ethernet in modo da saltare le parti che richedono un collegamento alla LAN.
Tipo così:

if (Ethernet.begin(mac) == 0) {
    if(Ethernet.begin(mac,ip)==0){\\se non si riesce a configurare la scheda di rete
      eth=false;\\ allora non è presente il collegamento
    }
  }

È esattamente come dici, ma funziona solo per la versione del begin() senza ip, quella che prova a configurare l'IP tramite DHCP, insomma, per cui:

if (!Ethernet.begin(mac)) {
  //se non si riesce a configurare la scheda di rete
 eth=false;  // allora non è presente il collegamento
}

Se l'IP glielo passi a mano, la configurazione non può fallire, per cui non ha senso.

Vedi qua: Ethernet - Arduino Reference

Se invece intendi rilevare il carrier... Non ho idea se si possa fare. A basso livello sicuramente sì, ma non so se la libreria lo permette.

Eh ma è che per fare la configurazione di fallback deve prima andare in timeout il DHCP… come si potrebbe evitare?

Non si può evitare, ma proprio a livello concettuale... Ti conviene prevedere uno switch di compilazione per definire se è attivo il DHCP o l'IP fisso.

più impegnativa in fatto di RAM:
Fai un ping verso il tuo gateway, se ottieni un echo request significa che l'HW ethernet è OK.

meno impegnativa:
imposti i byte IP sullo sketch a 0.0.0.0, ti fai dare un IP dal DHCP, se il byte IP è diverso da 0.0.0.0 significa che c'è dialogo con il router o server, subito dopo imposti manualmente il tuo IP.

Grazie mille ma penso che userò banalmente un ponticello per attivare/disattivare il dhcp e uno per attivare/disattivare Ethernet.
Buona giornata.

Grazie mille ma penso che userò banalmente un ponticello per attivare/disattivare il dhcp e uno per attivare/disattivare Ethernet.

Non è quello che hai chiesto

Comunque un poticello per disattivare la ethernet (che non chiarisce cosa intendi) significa che la ethernet morirà (se pensi di farlo sull'alimentazione), ovvero dovrai fare un reset del micro per sincronizzare nuovamente la ethernet, non la spegni e accendi quando ti pare.

Cosa intendi per banale ponticello?

Scusate la poca chiarezza... Ho già cambiato idea!

if (digitalRead(pinPulsante)) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Tenere premuto p");
    lcd.setCursor(0, 1);
    lcd.print("er dis. Ethernet");
    delay(1000);
    if (digitalRead(pinPulsante)) {
      eth = false;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("    Ethernet");
      lcd.setCursor(0, 1);
      lcd.print("  disabilitato");
      delay(500);
    }
    else {
      dhcp = false;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("      DHCP");
      lcd.setCursor(0, 1);
      lcd.print("  disabilitato");
      delay(500);
    }
  }
  if (eth && dhcp) {
    Ethernet.begin(mac);
  }
  if (eth && !dhcp) {
    Ethernet.begin(mac, ip);
  }

dove eth e dhcp sono due bool