Go Down

Topic: Inviare l'ora, data del PC ad arduino via ethernet (Read 990 times) previous topic - next topic

Kempis

Salve a tutti.
Sto facendo un'applicazione con arduino che somiglia molto
al dispositivo usato per timbrare i cartellini dell'ora di ingresso e
di uscita in fabbrica.
I dati relativi all'ora vengono salvati nella EEPROM e visualizzati in una
pagina web che arduino manda al PC formattati in una tabella.
I dati visualizzati sono nella forma - Data - numero persona - ora di inizio lavoro - ora fine lavoro - durata lavoro.
L'idea finale sarà poi di trasferire i dati in un database (userò PHP ma più avanti)
Veniamo al mio problema attuale per cui chiedo aiuto.
Attualmente, tramite caselle text della pagina web, setto manualmente la data e l'ora relativi all'orologio interno
di arduino (che sembra funzionare bene).
Vorrei tuttavia che il settaggio venisse fatto andando a leggere l'ora e la data del computer al quale arduino e connesso
tramite il solo cavo ethernet (in automatico se possibile).
Navigando avevo trovato uno script in javascript molto carino che consentiva di visualizzare l'ora e la data che arduino
leggeva direttamente dal PC.
Da solo funzionava benissimo, tuttavia quando lo inserivo nel codice html che mi consentiva di caricare la tabella
il tutto si incasinava.
C'ho perso una settimana e ho deciso di abbandonare questa strada.
Qualcuno mi può aiutare??
Grazie

uwefed

scusami,
L'arduino non ha un orologio interno. A cosa Ti riferisci?

Mandaci il codice HTml e javascript.
ciao Uwe

Kempis

Invio la parte 1° parte di 2) del programma che dovrebbe visualizzare la pagina web con l'orologio preso direttamente dal pc.
Ho tolto tutte le parti in più che avrebbero creato confusione.
Così come è scritto il programma mostra la tabella (ho tolto la parte che legge nella EEPROM) e le caselle text dove posso
settare manualmente la data e l'ora di arduino (c'è la funzione orologio che ho trovato in qualche sito)
Se ora nella linea 120 tolgo le 2 // e le inserisco nella riga 82 e 203 (/* PARTE RELATIVA ALL'OROLOGIO), disabilito
la parte relativa alla visualizzazione tabella e una volta compilato e mandato ad arduino mi visualizza la data e l'ora
presa direttamente  dal PC (si tratta di uno script in javascript preso in giro...).
Se poi rimettiamo, aggiungendo le 2 // nella riga 120, la parte che visualizza la tabella ho la pagina completa
(tabella + orologio PC) che però non funziona.
Ho provato a spostare parte del codice dentro il <body> e in altre parti ma senza risultati.
IE explorer individua un errore nella riga <body> ma sinceramente le mie conoscenze in html sono molto terra terra.
L'idea base del progetto era quella di avere la pagina web residente in arduino così da poterlo collegare in qualsiasi
PC, catturare l'ora e inviarla ad arduino per settare l'orologio interno (sarebbe interessante avere a fianco dell'orologio
relativo al PC anche quello di arduino per vedere di quanto e se ritarda).
Ho il sospetto che lo script scritto in francese possa creare dei problemi anche perchè non capisco come mai se premo il tasto
AGGIORNA_DATI_ARDUINO con il metodo get invio la stringa ?FenetreDate=+29%2F7%2F2010&FenetreHeure=+15%3A51%3A00
mentre con il mio sistema la stringa era del tipo ?ora=10&minuti21=&secondi=45 dove ho la classica & al posto della %2f sulla
finestra data e %3A sulla finestra ore.

Grazie per l'attenzione
Code: [Select]
/*
Created 7 june 2010 Kempis
*/

#include <EEPROM.h>
#include <Ethernet.h>
#include <WString.h>
                                           
#define MAX_MILLIS_VALUE 34359738 // global costant                                              
                                         
byte value;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 70 };
byte gateway[] = { 192, 168, 1, 1 };

// Time variables
unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long aggiunta=0;
unsigned long m = 0;
unsigned long seconds = 0;
unsigned int minutes = 0;
unsigned int hours = 0;

Server server(80); //inizializzo arduino


void setup()   {  
 
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway);
  server.begin();    
  Serial.begin(9600);
  delay(1000);
}


void loop()                    
           {
             
              cli();  // disable interrupts
              current_millis_value = aggiunta + millis();
              sei();  // enable interrupts
                                                                                               
           // overflow millis()
           if (current_millis_value < previous_millis_value)
              m += MAX_MILLIS_VALUE - previous_millis_value + current_millis_value;
          else m += current_millis_value - previous_millis_value;
           
                 seconds += m / 1000;
                 m = m % 1000;
                 minutes += seconds / 60;
                 seconds = seconds % 60;
                 hours += minutes / 60;
                 minutes = minutes % 60;
                 hours = hours % 24;
                 previous_millis_value = current_millis_value;      
           delay(100);  
                       
           
Client client = server.available();
 if (client) {
   // an http request ends with a blank line
 
   boolean current_line_is_blank = true;
   while (client.connected()) {
     if (client.available()) {        
   
       char c = client.read();
       // if we"ve gotten to the end of the line (received a newline
       // character) and the line is blank, the http request has ended,
       // so we can send a reply
       if (c == '\n' && current_line_is_blank) {
         // send a standard http response header

   
         // GENERO UN CAMPO DOVE RIPORTO L"ORA ATTUALE COME INFORMAZIONE
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();  
          client.println("<HTML><HEAD>");    
                                                                                   /* PARTE RELATIVA ALL'OROLOGIO

                                                                                    client.println("<SCRIPT LANGUAGE=\"JavaScript\">");//ivi
                                                                                    client.println("var Compteur = null;");
                                                                                     client.println("var CompteurTourne = false;");
                                                                                       
                                                                                      client.println("function DemarreHorloge () {");
                                                                                      client.println("if(CompteurTourne)");
                                                                                       client.println("clearTimeout(Compteur);");
                                                                                      client.println("CompteurTourne = false;");
                                                                                       client.println("AfficheTemps();");
                                                                                       client.println("}");
                                                                                       
                                                                                      client.println("function AfficheTemps () {");
                                                                                       client.println("var Temps = new Date();");
                                                                                      client.println("var TempsLocal = Temps.getTime()+");
                                                                                      client.println(   "(Temps.getTimezoneOffset()-60)*60;");
                                                                                      client.println("var Maintenant = new Date(TempsLocal);");
                                                                                       client.println("var Heure = \" \" + Maintenant.getHours();");//ivi
                                                                                       client.println("var minutes = Maintenant.getMinutes();");
                                                                                       client.println("var secondes = Maintenant.getSeconds();");
                                                                                       client.println("Heure += ((minutes < 10) ? \":0\" : \":\") + minutes;");//ivi
                                                                                      client.println("Heure += ((secondes < 10) ? \":0\" : \":\") + secondes;");//ivi
                                                                                     client.println("document.Horloge.FenetreHeure.value = Heure;");
                                                                                      client.println("var AujourdHui = \" \" + Maintenant.getDate();");//ivi
                                                                                       client.println("var Mois = Maintenant.getMonth()+1;");
                                                                                       client.println("var Annee = Maintenant.getYear()+1900;");
                                                                                       client.println("AujourdHui += \"/\" + Mois + \"/\" + Annee;");//ivi
                                                                                       client.println("document.Horloge.FenetreDate.value = AujourdHui;");
                                                                                       client.println("Compteur = setTimeout(\"AfficheTemps()\",1000);");//ivi
                                                                                       client.println("CompteurTourne = true;");
                                                                                       client.println("}");
                                                                                       client.println("// -->");
                                                                                       client.println("</SCRIPT>");
                                                                   
                                                                                                       //   */

Kempis

ecco la 2° e ultima parte da aggiungere alla precedente
Code: [Select]
                                                                                                                         
         
// /*  PARTE RELATIVA ALLA TABELLA E ALLE CASELLE TEXT PER L'AQUISIZIONE
 
                                 //QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO    
           client.print("<FIELDSET><LEGEND>Buongiorno oggi e il ");
          client.println(" se vuoi regolare la data riempi i campi riportati di sotto e premi aggiorna</LEGEND>");                                                                                                                
          client.println("<form method=GET name=Dati>");          
                  client.print("<p><label>Giorno: <input type=text size=3 name=giorno></label>" );
                  client.print("<label>Mese: <input type=text size=3 name=mese></label>");
                  client.print("<label>Anno: <input type=text size=4 name=anno></label>");              
          client.println("<input type=submit value=AGGIORNA_DATA></form>");
          client.println("</p></FIELDSET>");
         
         
         
          client.print("<FIELDSET><LEGEND>L'ora al momento della connessione era ");      
          client.print(hours);
          client.print (":");
          client.print(minutes);
          client.print (":");
          client.print(seconds);
          client.println(" se vuoi regolare l'ora riempi i campi riportati di sotto e premi aggiorna ora</LEGEND>");
          client.println("<form method=GET name=Bis>");  
                  client.print("<p><label>Ora: <input type=text size=3 name=ora></label>" );
                  client.print("<label>Minuti: <input type=text size=3 name=minuti></label>");
                  client.print("<label>Secondi: <input type=text size=4 name=secondi></label>");              
          client.println("<input type=submit value=AGGIORNA_ORA></form>");        
          client.println("</p></FIELDSET>");                                                                                                        

     
       //TABELLA CHE RIEMPIO CON I DATI DELLA EEPROM
         client.println("<BR/>");
         client.println("<TABLE BORDER=1 WIDTH=600>");
         client.println("<CAPTION ALIGN=TOP><B><FONT SIZE=+1>CONTENUTO DEGLI EVENTI NELLA MEMORIA EEPROM</FONT></B></CAPTION>");        
         client.println("<TR>");          
         client.print("<TH>Data inizio</TH><TH>Numero Evento</TH><TH>Ora inizio Evento</TH><TH>Ora fine Evento</TH><TH>Durata Evento</TH>");
       
         // leggo la memoria EEPROM (FUNZIONE TOLTA)e riempio la tabella finchè non trovo uno zero che mi indica una riga vuota  
           client.println("<TR ALIGN=CENTER><TD>");//stampo la data nel formato gg/mm/aaaa        
                   
       //QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO    
          client.print(29);
          client.print ("/");
          client.print(7);
          client.print ("/");
          client.print(2010);                          
          client.println("</TD><TD>");
         
           //stampo il numero evento
           client.print(2);//QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO          
           client.println("</TD><TD>");
           
           //stampo l"ora inizio evento
       //QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO
            client.print(10);
            client.print (":");
            client.print(0);
            client.print (":");
            client.print(0);
            client.println("</TD><TD>");
           
           //stampo l"ora fine evento              
        //QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO
            client.print(11);
            client.print (":");
            client.print(0);
            client.print (":");
            client.print(0);
            client.println("</TD><TD>");
           
           //stampo la durata dell"evento
        //QUI C'ERA UNA FUNZIONE CHE PESCAVA DALLA EEPROM CHE HO TOLTO
            client.print(0);
            client.print (":");
            client.print(1);
            client.print (":");
            client.print(0);
            client.println("</TD></TR>");        
            client.println("</TR>");
            client.println("</TABLE>");
                                                                                        //    */                                                              

                    client.println("</HEAD>");                    
                   
                                                                              /*  PARTE RELATIVA ALL'OROLOGIO
                                                                                   client.println("<BODY onload=\"DemarreHorloge()\">");//ivi                                                                                    
                                                                                   client.println("<form name=\"Horloge\" onsubmit=\"0\">");
                                                                                    client.println("Data del computer");
                                                                                     client.println("<BR/>");
                                                                                     client.println("<input name=\"FenetreDate\" size=\"12\" value=\" 26/7/2010\" type=\"text\">");
                                                                                     client.println("<BR/>");
                                                                                     client.println("Ora del computer");
                                                                                     client.println("<input type=submit value=AGGIORNA_DATI_ARDUINO>");
                                                                                     client.println("<BR/>");
                                                                                     client.println("<input name=\"FenetreHeure\" size=\"12\" value=\" 21:57:46\" type=\"text\">");
                                                                                     client.println("</form>");
                                                                                     client.println("</body>");
                                                                                                                                //   */
                                                                                     client.println("</HTML>");
                                                                                                                   

       break;                              
       }
                                                                   
       if (c == '\n') {
         // we"re starting a new line
         current_line_is_blank = true;
       } else if (c != '\r') {
         // we"ve gotten a character on the current line
         current_line_is_blank = false;
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);                                                                                  
   client.stop();
 }
                                                                                                                                                                                                               
                               }

Go Up