2012-11-11 8 views
7

Chcę zsynchronizować czas z mojego komputera do Arduino. Używam ich biblioteki czasu, ale to nie działa.Nie można zsynchronizować czasu komputera z Arduino poprzez USB

Jak mogę uzyskać arduino tak samo jak na moim komputerze? Obecnie używam mac.

Ich dokumentacja mówi:

W systemie UNIX można ustawić czas za pomocą polecenia powłoki:

TZ_adjust=-8; echo T$(($(date +%s)+6060$TZ_adjust)) > /dev/tty.usbserial-A8008pym

próbowałem na terminalu

>export TZ_adjust=-8; echo T$(($(date +%s)+6060$TZ_adjust)) > /dev/tty.usbmodemfd131 

i otrzymuję odmowę uprawnień.

Co robię źle? Czy istnieje prostszy sposób na zsynchronizowanie czasu na arduino z moim komputerem?

Kodeks

#include <Time.h> 

#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits 
#define TIME_HEADER 'T' // Header tag for serial time sync message 
#define TIME_REQUEST 7 // ASCII bell character requests a time sync message 

void setup() { 
    Serial.begin(9600); 
    setSyncProvider(requestSync); //set function to call when sync required 
    Serial.println("Waiting for sync message"); 
} 

void loop(){  
    if(Serial.available()) 
    { 
    processSyncMessage(); 
    } 
    if(timeStatus()!= timeNotSet) 
    { 
    digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh 
    digitalClockDisplay(); 
    } 
    delay(1000); 
} 

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

void processSyncMessage() { 
    // if time sync available from serial port, update time and return true 
    while(Serial.available() >= TIME_MSG_LEN){ // time message consists of a header and ten ascii digits 
    char c = Serial.read() ; 
    Serial.print(c); 
    if(c == TIME_HEADER) {  
     time_t pctime = 0; 
     for(int i=0; i < TIME_MSG_LEN -1; i++){ 
     c = Serial.read();   
     if(c >= '0' && c <= '9'){ 
      pctime = (10 * pctime) + (c - '0') ; // convert digits to a number  
     } 
     } 
     setTime(pctime); // Sync Arduino clock to the time received on the serial port 
    } 
    } 
} 

time_t requestSync() 
{ 
    Serial.print(TIME_REQUEST,BYTE); 
    return 0; // the time will be sent later in response to serial mesg 
} 
+0

"i otrzymuję" ... co? – sachleen

+0

@sachleen Odmowa uprawnień. Przepraszam za przeoczenie –

+0

Możesz spróbować z sudo przed komendą? –

Odpowiedz

8

Conrad i odkryłem roztworu po a 20 minute chat:

To set the variable to EST 
TZ_adjust=-5; 

sudo echo "T$(($(date +%s)+60*60*$TZ_adjust))" >/dev/tty.usbmodemfa131 
Powiązane problemy