Go Down

Topic: [Projet Bac] Gestion du temps  (Read 653 times) previous topic - next topic

Woxet

May 18, 2018, 03:34 pm Last Edit: May 18, 2018, 04:14 pm by Woxet
Bonjour à tous !

J'ai un projet à réaliser pour le bac dans lequel je nécessite de nommer un fichier .txt avec l'heure exacte.
Un petit exemple : Il est 12:00, mon arduino effectue son relevé, crée un fichier .txt dans lequel il enregistre la donnée et nomme ce fichier "RELEVE 12H00".

J'ai essayé de maîtriser le sujet à l'aide de l'exemple Udp Ntp Client, mais je ne comprend pas vraiment le code avec les histoire de packets et de buffers ^^

Pourriez vous m'aider soit en m'expliquant l'exemple, soit en m'indiquant une certaine démarche à suivre s'il vous plaît ? ^^'

Je dispose comme matériel :
- 2 Arduino UNO
- 1 Shield Ethernet + carte SD

kammo

J'ai essayé de maîtriser le sujet à l'aide de l'exemple Udp Ntp Client, mais je ne comprend pas vraiment le code avec les histoire de packets et de buffers ^^

Salut
Cool, on peut voir où t'en es? Quel code? Allez zou, on met ça entre balises </> au dessus des smileys

Pourriez vous m'aider soit en m'expliquant l'exemple, soit en m'indiquant une certaine démarche à suivre s'il vous plaît ? ^^'

Avec un code on pourrait probablement. Là, non.

ATTENTION:
ton post ne respecte pas les règles du forum, à toi de corriger ça vite vite vite, le grand méchant loup rode et va supprimer ton post. Enfin TES posts, puisque tu as fait un doublon...
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Woxet

Pour le doublon le soucis c'est que je n'arrive pas à le supprimer ^^'

Actuellement, mon professeur m'a dit que je devais essayer de me concentrer que sur l'exemple Udp Ntp Client, je n'ai utilisé que ce code que je n'ai pas modifié, ou quasiment pas du tout si ce n'est que faire +2 à l'heure pour dire être à l'heure française. Voici tout de même le code :

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0x22, 0x5D};

unsigned int localPort = 8888;

char timeServer[] = "time.nist.gov";

const int NTP_PACKET_SIZE = 48;

byte packetBuffer[ NTP_PACKET_SIZE];

EthernetUDP Udp;

void setup() {
  Serial.begin(9600);
  while (!Serial) {;}

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for (;;)
      ;
  }
  Udp.begin(localPort);
}

void loop() {
  sendNTPpacket(timeServer); // send an NTP packet to a time server

  // wait to see if a reply is available
  delay(1000);
  if (Udp.parsePacket()) {
    Udp.read(packetBuffer, NTP_PACKET_SIZE);

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
   
    unsigned long secsSince1900 = highWord << 16 | lowWord;
   
    const unsigned long seventyYears = 2208988800UL;
    unsigned long epoch = secsSince1900 - seventyYears;

    Serial.print(((epoch  % 86400L) / 3600)+2);
    Serial.print(':');
    if (((epoch % 3600) / 60) < 10) {
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60);
    Serial.print(':');
    if ((epoch % 60) < 10) {
      Serial.print('0');
    }
    Serial.println(epoch % 60);
  }
  delay(300000);
  Ethernet.maintain();
}

// send an NTP request to the time server at the given address
void sendNTPpacket(char* address) {
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
  Udp.endPacket();
}


Et qu'est ce qui ne va pas dans le post ? ^^'

kammo

Et qu'est ce qui ne va pas dans le post ? ^^'
C'est marqué en tête du forum, en gras.

Honnêtement, je ne connais pas du tout tes bibliothèques, je n'ai jamais eu besoin de réaliser un projet comme le tien, je ne veux pas m'avancer, je ne pourrai pas t'aider je crois. D'autres le pourront.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Woxet

Et dire que ce n'est juste que l'exemple proposé donc moi non plus je ne comprend pas vraiment les bibliothèques ^^'

lesept

Je ne comprends pas ton problème : tu parles de créer et nommer des fichiers, mais ton exemple fait de la COM ethernet... Quel rapport ?

Si tu veux créer des fichiers ET les sauver sur une carte SD (ce qui n'est qu'une hypothèse puisque je n'ai pas compris le besoin), il te faut un shield SD et utiliser la bibliothèque SD, avec l'exemple Files.


(le shield)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

al1fch

#6
May 18, 2018, 04:25 pm Last Edit: May 18, 2018, 04:26 pm by al1fch
Si tu cherches ( avant de traiter l'enregistrement d'un fichier sur SD) à comprendre la récupération de l'heure NTP par le code que tu montres alors il faut mettre le nez dans le protocole NTP et s'intéresser  à la structure des paquets échangés.

Woxet

J'ai déjà la partie création de fichier et stockage de la donnée.
Ce que j'ai besoin la c'est juste de nommer le fichier .txt avec l'heure réelle.

Mon professeur ne me donne pas vraiment d'indications, tout ce que je dois faire c'est étudier l'exemple que j'ai cité, et à partir de ça récupérer l'heure et nommer le fichier avec cette heure (exemple : "RELEVE 12h00").

D'après ma réflexion juste avoir l'heure devrait me suffire. Je pense pouvoir laisser les minutes de coté.

J'ai essayé de mettre un delay de 3 600 000 ms (1h) et à l'aide d'une boucle augmenter le numéro de mon relevé de 1 passé l'heure, mais cette méthode à sa limite sur plusieurs jours j'ai remarqué...

lesept

#8
May 18, 2018, 04:35 pm Last Edit: May 18, 2018, 04:37 pm by lesept
Il est possible de récupérer l'heure plus simplement dans l'entête du site google.com par exemple. L'exemple du lien est fait par wifi, mais ça doit aussi marcher par Ethernet.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Woxet

Merci de l'idée !

Mais, je n'ai aucun module à ma disposition... Ni RTC, ni wifi...

al1fch

#10
May 18, 2018, 05:02 pm Last Edit: May 18, 2018, 05:04 pm by al1fch
L'exemple UdpNtpClient de la librairie Ethernet affiche heures et minutes
Il les calcule entre les lignes 90 et 105 à partir du 'temps unix'
renseignes toi sur ce temps unix et vois quelles opération sont effectués sur le contenu de la variable epoch
crées alors le nom du fichier avec les valeurs calculées

Il est possible d'utiliser epoch , résultat du travail des lignes 67 à 87, sans comprendre intimement  le travail qui y est fait.

epoch est là.... (comment , c'est une autre histoire....) , profites en, récupères les heures et minutes extraites d'epoch  et nommes ton fichier


kammo

Et dire que ce n'est juste que l'exemple proposé donc moi non plus je ne comprend pas vraiment les bibliothèques ^^'
Je n'utilise pas de bibli que je ne comprenne pas.
C'est juste bon à ne plus savoir ce qu'on code, si on commande une bibliothèque, ou si on appelle des fonctions arduino. Copier un code ça marche si tu as la même configuration.
Plus c'est simple, moins c'est compliqué.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

Woxet

Merci al1fch de ton explication, je comprend un peu mieux maintenant !
Est-ce que vous auriez une manière d'alléger un peu ce code s'il vous plaît car j'aurai besoin de l'intégrer dans un autre code :3
 

Go Up