Ecriture sur carte SD avec utilisation de l'Ethernet pour la date

Bonjour,
je suis bien d'accord avec toi,
mais les exemples cités, et les qq infos que j'ai ne parle que d'une chose
> Sur un shield ethernet, pour communiquer avec la SD, il faut mettre la pin 10 en sortie, et ne pas utiliser la pin4
> C'est juste cela que je souhaiterai faire confirmer!

sinon, sans comprendre pourquoi, voilà le code compilé, qui fonctionne et stable... sans que je n'explique pkoi....

#include <Time.h> 
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <SD.h>

String temps;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 

IPAddress timeServer(132, 163, 4, 101);
const int timeZone = 1;

EthernetUDP Udp;
unsigned int localPort = 8888;

int test; // Variable utilisée pour tester valeur renvoyée par fonctions SD Card
File file; // objet file
File root; // objet root pour le répertoire racine




void setup() 
{
  Serial.begin(9600);
  
  pinMode(10, OUTPUT);
 
 
   if (Ethernet.begin(mac) == 0) {
   while (1) {
      Serial.println("Failed to configure Ethernet using DHCP");
      delay(10000);
    }
  }
    Serial.print("IP number assigned by DHCP is ");
  Serial.println(Ethernet.localIP());
  Udp.begin(localPort);
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);


if (!SD.begin(4)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");

 test=SD.remove("datalog.txt"); // efface fichier et mémorise résultat opération  
 
 File dataFile = SD.open("datalog.txt", FILE_WRITE);
 dataFile.println("temps;mesurebrute0;tension0;mesurebrute1;tension1;mesurebrute2;tension2");
 dataFile.close(); // ferme le fichier

}



time_t prevDisplay = 0;




void loop()
{  
  temps= String (day()) + "/" + String (month()) + "/" + String ( year ()) + " " + String ( hour ()) + ":" + String ( minute ()) + ":"+String ( second ());
  
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(temps);
    dataFile.close();
    Serial.println(temps);
  } 
  else {
    Serial.println("error opening datalog.txt");
  }
  
    delay(1000);
  
}


const int NTP_PACKET_SIZE = 48;
byte packetBuffer[NTP_PACKET_SIZE];

time_t getNtpTime()
{
  while (Udp.parsePacket() > 0) ;
  Serial.println("Transmit NTP Request");
  sendNTPpacket(timeServer);
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);
      unsigned long secsSince1900;
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
    }
  }
  Serial.println("No NTP Response :-(");
  return 0;
}


void sendNTPpacket(IPAddress &address)
{

  memset(packetBuffer, 0, NTP_PACKET_SIZE);

  packetBuffer[0] = 0b11100011; 
  packetBuffer[1] = 0;  
  packetBuffer[2] = 6; 
  packetBuffer[3] = 0xEC;
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
              
  Udp.beginPacket(address, 123); 
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}