![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Delta Robot example
Dependencies: BufferedSerial Eigen
Fork of TCPSocket_Example by
syncTime.cpp
- Committer:
- je310
- Date:
- 2018-10-15
- Revision:
- 5:01e1e68309ae
File content as of revision 5:01e1e68309ae:
#include "syncTime.h" extern BufferedSerial buffered_pc; SyncTime::SyncTime( int seconds, int nSeconds ){ refTime.seconds = seconds; refTime.nSeconds = nSeconds; sinceRefTimer.reset(); sinceRefTimer.start(); } const int million = 1000000; const int billion = 1000000000; rosTime SyncTime::getTime(){ rosTime ret; uint64_t uSecs = sinceRefTimer.read_high_resolution_us(); ret.seconds = (int)(uSecs/million); ret.nSeconds = (int)((uSecs% million)*1000); ret.seconds += refTime.seconds; ret.nSeconds += refTime.nSeconds; if(ret.nSeconds >= (int)1e9){ ret.seconds ++; ret.nSeconds -= (int)1e9; } if(ret.nSeconds < 0){ ret.seconds --; ret.nSeconds += (int)1e9; } return ret; } void SyncTime::resetOffsetCounter(){ rosTime update = getTime(); refTime = update; sinceRefTimer.reset(); //buffered_pc.printf("resetting counter %dus\r\n", sinceRefTimer.read_high_resolution_us()); } void SyncTime::hardReset(int seconds, int nSeconds){ refTime.seconds = seconds; refTime.nSeconds = nSeconds; sinceRefTimer.reset(); sinceRefTimer.start(); } void SyncTime::updateTime(float correction){ int seconds = (int)correction; int nSeconds = (correction - (float)seconds) * 1e9; // buffered_pc.printf("time before %ds %dns \n\r", refTime.seconds, refTime.nSeconds); // buffered_pc.printf("updating by %ds %dns \n\r", seconds, nSeconds); refTime.seconds += seconds; refTime.nSeconds += nSeconds; if(refTime.nSeconds >= billion){ refTime.seconds ++; refTime.nSeconds -= billion; } if(refTime.nSeconds < 0){ refTime.seconds --; refTime.nSeconds += billion; } //buffered_pc.printf("time after %ds %dns \n\r", refTime.seconds, refTime.nSeconds); resetOffsetCounter(); }