2012-11-11 17 views
7

PC'den Time'ı arduino ile eşzamanlamak istiyorum. Zaman kütüphanelerini kullanıyorum ama işe yaramıyor.Bilgisayar saati USB üzerinden Arduino ile senkronize edilemiyor

Arduino'yu bilgisayarımdaki ile aynı zamana nasıl alabilirim? Şu anda bir mac kullanıyorum.

Onların dokümantasyon diyor ki:

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

Ben terminali

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

, bu kabuk komutu ile zaman ayarlayabilirsiniz

ve İzin reddedildi.

Neyi yanlış yapıyorum? Bilgisayarımla arduino'daki saati senkronize etmenin daha basit bir yolu var mı?

#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

"ve alıyorum" ... ne? – sachleen

+0

@sachleen İzin reddedildi. Gözetim için özür dilerim –

+0

Sudo'nun komutunun önünde deneyebilir misin? –

cevap

8

Conrad Kodu ve ben a 20 minute chat sonra çözüm buldu:

To set the variable to EST 
TZ_adjust=-5; 

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