Pages: [1]   Go Down
Author Topic: conflitto tra librerie  (Read 276 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,
sto facendo un progetto che dovrebbe avere una interfaccia web e anche un schedule possibilmente modificabile via web.
Sono andato per gradi:
1. ho implementato la parte web con la libreria <WebServer.h>
2. ho ricavato l'ora da un ntp server con la libreria <EthernetUdp.h> (devo aggiungere il calcolo dell'ora legale)
3.  ho implementato lo schedule con la libreria <Time.h>, <TimeAlarms.h>

Aggiungendo le librerie del punto 3 i caratteri sul monitor seriale da tantissimi caratteri strani, e non funziona pi niente.

Avete qualche idea ?
C'è qualche altra libreria che fa da schedule?

Grazie mille
Logged

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

No, nessuna idea.
Devi dirci quale modello di Arduino usi, darci lo sketch e da dove hai scaricato le librerie.
Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dopo alcune prove ho capito che la libreria che dava fastidio era <EthernetUdp.h> quindi siccome la libreria <Time.h> ha anche i metodi per recuperare l'ora da un ntp server ho provato ad usare quella, ma con carsi risultati.
Adesso sono bloccato in questa situazione:
questo sketch da degli errori di compilazione
Code:
/*
 * Time_NTP.pde
 * Example showing time sync to NTP time source
 *
 * This sketch uses the Ethenet library with the user contributed UdpBytewise extension
 */
 
#include <Time.h>
#include <Ethernet.h>
#include <UdpBytewise.h>  // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#if  UDP_TX_PACKET_MAX_SIZE <64 ||  UDP_RX_PACKET_MAX_SIZE < 64
#error : UDP packet size to small - modify UdpBytewise.h to set buffers to 64 bytes
#endif
/*
 *
 * You may need to modify the UdpBytewise.h library to allow enough space in the buffers for the NTP packets.
 * Open up UdpBytewse.h and set the following buffers to 64 bytes:
 *    #define UDP_TX_PACKET_MAX_SIZE 64
 *    #define UDP_RX_PACKET_MAX_SIZE 64
 */


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 44 }; // set the IP address to an unused address on your network

byte SNTP_server_IP[]    = { 192, 43, 244, 18}; // time.nist.gov
//byte SNTP_server_IP[] = { 130,149,17,21};    // ntps1-0.cs.tu-berlin.de
//byte SNTP_server_IP[] = { 192,53,103,108};   // ptbtime1.ptb.de


time_t prevDisplay = 0; // when the digital clock was displayed
const  long timeZoneOffset = 0L; // set this to the offset in seconds to your local time;

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac,ip); 
  Serial.println("waiting for sync");
  setSyncProvider(getNtpTime);
  while(timeStatus()== timeNotSet)   
     ; // wait until the time is set by the sync provider
}

void loop()

  if( now() != prevDisplay) //update the display only if the time has changed
  {
    prevDisplay = now();
    digitalClockDisplay(); 
  }
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

/*-------- NTP code ----------*/

unsigned long getNtpTime()
{
  sendNTPpacket(SNTP_server_IP);
  delay(1000);
  if ( UdpBytewise.available() ) {
    for(int i=0; i < 40; i++)
       UdpBytewise.read(); // ignore every field except the time
    const unsigned long seventy_years = 2208988800UL + timeZoneOffset;       
    return getUlong() -  seventy_years;     
  }
  return 0; // return 0 if unable to get the time
}

unsigned long sendNTPpacket(byte *address)
{
  UdpBytewise.begin(123);
  UdpBytewise.beginPacket(address, 123);
  UdpBytewise.write(B11100011);   // LI, Version, Mode
  UdpBytewise.write(0);    // Stratum
  UdpBytewise.write(6);  // Polling Interval
  UdpBytewise.write(0xEC); // Peer Clock Precision
  write_n(0, 8);    // Root Delay & Root Dispersion
  UdpBytewise.write(49);
  UdpBytewise.write(0x4E);
  UdpBytewise.write(49);
  UdpBytewise.write(52);
  write_n(0, 32); //Reference and time stamps 
  UdpBytewise.endPacket();   
}

unsigned long getUlong()
{
    unsigned long ulong = (unsigned long)UdpBytewise.read() << 24;
    ulong |= (unsigned long)UdpBytewise.read() << 16;
    ulong |= (unsigned long)UdpBytewise.read() << 8;
    ulong |= (unsigned long)UdpBytewise.read();
    return ulong;
}

void write_n(int what, int how_many)
{
  for( int i = 0; i < how_many; i++ )
    UdpBytewise.write(what);
}

Errori:
Code:
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:33:19: error: types.h: File o directory non esistente
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp: In member function ‘void UdpStringClass::begin(uint16_t)’:
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:45: error: ‘Sn_MR_UDP’ was not declared in this scope
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp: In member function ‘int UdpStringClass::available()’:
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:50: error: ‘getSn_RX_RSR’ was not declared in this scope
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp: In member function ‘int UdpStringClass::sendPacket(String, byte*, unsigned int)’:
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:56: error: ‘class String’ has no member named ‘cstr’
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp: In member function ‘int UdpStringClass::sendPacket(String, int, byte*, unsigned int)’:
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:60: error: ‘class String’ has no member named ‘cstr’
/opt/arduino-1.0.5/hardware/arduino/cores/arduino/WString.h: In member function ‘int UdpStringClass::readPacket(String&, byte*, unsigned int*)’:
/opt/arduino-1.0.5/hardware/arduino/cores/arduino/WString.h:176: error: ‘unsigned int String::capacity’ is protected
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:73: error: within this context
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:73: error: ‘str->String::capacity’ cannot be used as a function
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:79: error: ‘class String’ has no member named ‘cstr’
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:79: error: ‘str->String::capacity’ cannot be used as a function
/opt/arduino-1.0.5/hardware/arduino/cores/arduino/WString.h:176: error: ‘unsigned int String::capacity’ is protected
/opt/arduino-1.0.5/libraries/Ethernet/UdpString.cpp:79: error: within this context

Altrimenti avete conoscenza di qualche libreria per fare uno schedule, la libreria <TimeAlarms.h> mi sembrava buona ma non compila una mazza già ho dovuto correggere degli errori di compilazione e il risultato sono altri errori. Forse se rinuncio ad aggiornale l'ora via ntp forse posso usarla, ne frattempo se avete dei suggerimenti li accetto volentieri.

Grazie
P.s.
uso arduino uno, con ide arduino-1.0.5
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nessuno ha idea di cosa posso usare per fare un orologio programmabile da web ??
Almeno un indizio, oppure mi ditemi se sono sulla giusta strada.
Che pensate di queste librerie <WebServer.h>, <Time.h> e <TimeAlarms.h> ?
Quando ho iniziato pensavo che la parte complicata era fare un web server e invece si è rilevato relativamente facile,  pensavo che usare un orologio era facile con uno schedule ed invece si sta rivelando complicato.

Visto che mi pare che fare dei semplici programmi che, potendo usare  java, sarebbero semplicissimi che ne dite se la parte logica la spostassi in un dispositivo embedded più evoluto ?
Per esempio http://beagleboard.org/Products/BeagleBone%20Black

Ancora meglio su arduino si può usare java?
Se si come si chiama hardware da usare?

Grazie
Logged

Pages: [1]   Go Up
Jump to: