title: Unable to sync computer time to Arduino via USB
body: <p>I want to sync the Time from my pc to the arduino. I am using their Time library but it does not work.</p>
  
  <p>How can I get the arduino to have the same time as on my computer ? I am currently using a mac.</p>
  
  <p>Their documentations says : </p>
  
  <blockquote>
    <p>On a unix system, you can set the time with the shell command:</p>
    
    <p><code>TZ_adjust=-8; echo T$(($(date +%s)+6060$TZ_adjust)) &gt; /dev/tty.usbserial-A8008pym</code></p>
  </blockquote>
  
  <p>I tried on the terminal </p>
  
  <pre><code>&gt;export TZ_adjust=-8; echo T$(($(date +%s)+6060$TZ_adjust)) &gt; /dev/tty.usbmodemfd131 
  </code></pre>
  
  <p>and I get Permission denied.</p>
  
  <p>What am I doing wrong?
  Is there a simpler way to sync the time on arduino with my computer?</p>
  
  <p><strong>The Code</strong></p>
  
  <pre><code>#include &lt;Time.h&gt;  
  
  #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 &lt; 10)
      Serial.print('0');
    Serial.print(digits);
  }
  
  void processSyncMessage() {
    // if time sync available from serial port, update time and return true
    while(Serial.available() &gt;=  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 &lt; TIME_MSG_LEN -1; i++){   
          c = Serial.read();          
          if( c &gt;= '0' &amp;&amp; c &lt;= '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
  }
  </code></pre>