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();
}