Pages: [1]   Go Down
Author Topic: Inviare l'ora, data del PC ad arduino via ethernet  (Read 748 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 30
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20199
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mandaci il codice HTml e javascript.
ciao Uwe
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 30
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
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>");
                                                                    
                                                                                                        //   */
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 30
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ecco la 2° e ultima parte da aggiungere alla precedente
Code:
                                                                                                                         
          
 // /*  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();
  }
                                                                                                                                                                                                                
                                }
Logged

Pages: [1]   Go Up
Jump to: