Sponsored Content
Top Forums Programming Arduino UNIX Time - Syncing Computer UNIX Time to Arduino Time with Python Post 303042409 by Neo on Monday 23rd of December 2019 11:53:59 PM
Old 12-24-2019
Here is a quick sketch I put together for the Arduino UNO to get the unix time from the usb serial port and sync the Arduino time to the computer (in my case macos).

This sketch works but needs more refinement (trap errors, disconnects, add options, etc) but since I will not be doing much with this for the next few weeks, I post the first working draft below and will also post the python script I use on macos soon:

Code:
/*
  Sync UNIX Time with Computer and
  LCD Display with I2C on Arduino UN0
  Rough Draft 0.1  (needs improvements)
  Neo December 2019
  https://www.unix.com
*/

// Include Wire Library for I2C
#include <Wire.h>
// Include NewLiquidCrystal Library for I2C
#include <LiquidCrystal_I2C.h>
#include <Time.h>
#include <TimeLib.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
#define DEBUG_SKETCH false
// Define LCD pinout
const int en = 2, rw = 1, rs = 0, d4 = 4, d5 = 5, d6 = 6, d7 = 7, bl = 3;
// can be any integer greater than zero and less than recent unix time
const int time_int = 1000;
// Define I2C Address - change if reqiuired
const int i2c_addr = 0x27;
String s;
bool flag = true;
time_t t = now();
LiquidCrystal_I2C lcd(i2c_addr, en, rw, rs, d4, d5, d6, d7, bl, POSITIVE);
void setup()
{
    Serial.begin(9600);
    Wire.begin();
    time_t t = now();
    lcd.begin(16, 2);
    lcd.clear();
}

void loop()
{
    lcd.clear();
    int count = 0;
    if (Serial.available() and flag)
    {
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print("Serial OK");
        count = processSyncMessage();
        if (DEBUG_SKETCH)
        {
               Serial.println("Serial Available: " + count);
        }
        if (count > time_int)
            flag = false;
    }

    lcd.setCursor(0, 0);
    if (timeStatus() == timeNotSet)
    {
        if (flag)
        {
            Serial.println("waiting for sync message");
            lcd.print("Arduino Time:");
        }
    }
    else
    {

        lcd.print("Unix Time:");
        if (DEBUG_SKETCH)
        {
            Serial.println("Time Synced");
        }
    }
    t = now();
    s = String(t);
    if (s != '0')
    {
        lcd.setCursor(0, 1);
        lcd.print(t);
        lcd.print(" secs");
    }
    Serial.println(s);
    delay(1000);
    lcd.clear();
}

int processSyncMessage()
{
    while (Serial.available() >= TIME_MSG_LEN)
    { // time message consists of header & 10 ASCII digits
        char c = Serial.read();
        int count = 0;
        Serial.print(c);
        time_t pctime = 0;
        if (c == TIME_HEADER)
        {
            for (int i = 0; i < TIME_MSG_LEN - 1; i++)
            {
                c = Serial.read();
                if (c >= '0' && c <= '9')
                {
                    Serial.print(c);
                    count++;
                    pctime = (10 * pctime) + (c - '0'); // convert digits to a number
                }
            }
            Serial.print("\n");
            if (DEBUG_SKETCH)
            {
                Serial.write(pctime + "\n");
                Serial.println(pctime);
            }
            setTime(pctime); // Sync Arduino clock to the time received on the serial port
        }
        return count;
    }
}

 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Help me!First time use UNIX.

I am assigned a programming work.It is my first time to use unix. The task is writing a shell script to interrogate the university Unix operating system to determine the number of "Runnable" processes at any given time.Then append the result,along with a time-stamp,on a log file. Also there are... (1 Reply)
Discussion started by: zhshqzyc
1 Replies

2. UNIX for Advanced & Expert Users

How To Provide Time Sync Using Nts-150 Time Server On Unix Network?

can anybody tel lme,how to instal NTS -150 on a unix network,it needs some patch to fetch time frm serve,,?? (2 Replies)
Discussion started by: pesty
2 Replies

3. Shell Programming and Scripting

Convert Unix Time to Standard Time

I have a list of interfaces and time the interface was last active. I can't figure out how to convert the time in the second column, Fa1/14 0 Se0/0/0 0 Fa1/11 0 Fa1/9 0 Fa1/0 0 Se0/0/1 1240401408 Gi1/0 0 Fa0/0 1240401408 Fa1/3 0 Fa1/8 0 Fa1/15 0 Fa1/13 0 Fa1/10 0 Fa1/1 0 Fa1/12... (7 Replies)
Discussion started by: mrlayance
7 Replies

4. Shell Programming and Scripting

Unix time

how do i convert unix time to show normal eg i have unix time 1297702242 and i want it converted to normal time. how do i do that (2 Replies)
Discussion started by: blackzinga80
2 Replies

5. Shell Programming and Scripting

How to get time duration between two human readable time stamp in Unix?

Here is two time I have: Jul 12 16:02:01 Jul 13 01:02:01 and how can I do a simple match to get difference between two time which is 09:00:00 Thanks in advance. (3 Replies)
Discussion started by: ford99
3 Replies

6. UNIX for Dummies Questions & Answers

Converting string date time to unix time in AWK

I'd like to convert a date string in the form of sun aug 19 09:03:10 EDT 2012, to unixtime timestamp using awk. I tried This is how each line of the file looks like, different date and time in this format Sun Aug 19 08:33:45 EDT 2012, user1(108.6.217.236) all: test on the 17th ... (2 Replies)
Discussion started by: bkkid
2 Replies

7. Shell Programming and Scripting

Adding time to date time in UNIX shell scipting

I needed some help in adding a duration (in seconds) to a start time (in hhmmss format) and a start date (in mmddyy format) in order to get an end date and end time. The concept of a leap year is also to be considered while incrementing the day. The code/ function that I have formed so far is as... (3 Replies)
Discussion started by: codehelp04
3 Replies

8. Shell Programming and Scripting

Convert UTC time into current UNIX sever time zone

Hi guys thanks for the help for my previous posts.Now i have a requirement that i download a XMl file which has UTC time stamp.I need to convert UTC time into Unix server timezone. For ex if the time zone of unix server is CDT then i need to convert into CDT.whatever may be the system time... (5 Replies)
Discussion started by: mohanalakshmi
5 Replies

9. Programming

Arduino-cli - Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface

In my further exploration of Arduino, today I decided to install the arduino-cli on my mac today. https://github.com/arduino/arduino-cli I followed the instructions for macOS but when I got to this part: arduino-cli board list I got the dreaded "Unknown" Fully Qualified Board Name... (1 Reply)
Discussion started by: Neo
1 Replies
TOSHSET(1)						      User-installed Software							TOSHSET(1)

NAME
toshset - manipulate bios and hardware settings of Toshiba laptops SYNOPSIS
toshset [TOGGLEOPTIONS | QUERYOPTIONS | FEATUREOPTIONS]... DESCRIPTION
Toshset ia a command-line tool to allow access to much of the Toshiba hardware interface developed by Jonathan Buzzard. It can do things like set the hard drive spin-down time, turn off the display and set the fan speed. Credit for the difficult task of reverse-engineering the Toshiba hardware interface goes to Jonathan Buzzard. A link for Jonathan's tools is http://www.buzzard.org.uk/toshiba/ All options are listed by running toshset with no arguments. If an argument option is specified as the ``-'' character, stdin is read for that option. This is particularly convenient when setting the owner string. The method used for access to the laptop hardware is given by the the HCI/SCI access mode query field. This should be kernel or direct. The kernel method requires kernel support and it is the only access method supported for ACPI kernels. If ACPI is not used this package does not require a special kernel module. Also, it is highly likely that this tool will work under different flavors of *NIX. As a result of this design consideration, and because of my own desire that not every user be able to change my laptop's hardware settings, the user must have read/write permission to /dev/toshiba in order for this program to run properly. Toggle Options: -l toggle long query in which the assocated command-line option is printed with each queried feature. -fast run in fast mode: a startup check is skipped, and values are not queried after the are set. On machines for which ioctl is slow, this can speed toshset up by up to a factor of 2/5. -v toggle verbose mode in which normally silent messages are printed. Query Options: -q [glob] query features specified by glob (all features if glob omitted). The glob string is sandwiched between asterisks, so specifying -q bat will query all features whose names contain the ``bat'' substring. If no glob is given, then all features are queried. Feature Options: Valid settings for features can be listed by omitting the argument. The current list of feature options is -b <off|on> enable/disable system beep -lcd <setting> set lcd brightness. -inten <setting> set lcd brightness. Not all models support both -lcd and -inten. -pow <setting> set power-up mode -vol <0-4> set beep volume. Note that this controls the modem volume for my PCMCIA modem. -hdd <num> number of minutes until disk spindown -dstretch <off|on> enable/disable display stretch -d <num> number of minutes until display auto-off -c <method> set cooling method -bs <setting> set battery-save mode -bl <off|on> control lcd backlight -bluetooth <off|on> power-up + attach internal bluetooth device, or shutdown. -fan <setting> control fan -video <int|ext|both|tv|mode5|mode6|mode7> set display device for video: internal lcd, external monitor, or tv-out -cpu <slow|fast> set CPU speed -cpucache <off|on> enable/disable CPU cache -sleep <off|on> enable/disable CPU sleep mode -balarm <off|on> enable/disable battery alarm -palarm <off|on> enable/disable lid-closed alarm -walarm <dis|HH:MM[/everyday|DD/MM[/YYYY]]> set time/date to wake -ppower <off|on> enable/disable annoying feature of powering-off computer when lid is closed. -parallel <mode> set parallel port mode -autooff <num> number of minutes of idle time until system auto-off -ostring <owner string> set owner string. This string is displayed at boot or resume time, if a user or supervisor password is set. -upasswd set or clear the user password. Toshset must be run on the console for this to work. The password should be entered when the prompt is displayed. If the password is currently set, entering it will clear the password. -spasswd set the supervisor password. See the docs for -upasswd. -usblegacy USB legacy mode: enable/disable using an USB mouse as it would be a PS/2 one, without the need to install a USB driver. -3g power-up + attach internal 3g modem device, or shutdown. -usbfdd USB FDD emulation mode: is almost the same of the previous one for a floppy. It enables the use of an USB floppy as it would be attached to an internal FD controller (for booting etc.) -lan Enables/disables internal LAN controller. -soundlogo enable/disable startup sound logo. -startlogo startup logo mode (picture or animation>. -trmode enable/disable the display's transreflective mode. Features may also be set by specifying the (zero-offset) index of the option. e.g. toshset -cpu 0 sets the cpu speed to slow. BUGS
Many features are locked and can not be changed when the battery save mode is not ``user.'' Since I only have one laptop, I can't test this utility on other hardware. User feedback in this regard is helpful. Some features do not work on my laptop and they may work on your's, and visa-versa. Toshset requires an experimental version of the toshiba_acpi kernel module with an ACPI-enabled kernel. AUTHOR
Written by <Charles@Schwieters.org> News, updates and documentation: visit http://schwieters.org/toshset.html COPYRIGHT
Copyright (C) 2002-8 Charles D. Schwieters This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU- LAR PURPOSE. toshset 2 March 2008 TOSHSET(1)
All times are GMT -4. The time now is 02:42 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy