Skip to content

Commit

Permalink
Merge branch 'master' of github.com:thomasfredericks/Chrono
Browse files Browse the repository at this point in the history
# Conflicts:
#	Chrono.cpp
#	Chrono.h
#	LightChrono.cpp
#	LightChrono.h
  • Loading branch information
sofian committed Feb 24, 2017
2 parents b582841 + 7bdcfc3 commit 7c5ba0c
Show file tree
Hide file tree
Showing 16 changed files with 919 additions and 21 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.db
4 changes: 4 additions & 0 deletions Chrono.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ Chrono::Chrono(Chrono::chrono_t (*getTime_)(void), bool startNow) : _getTime(get
}
}

void Chrono::start(Chrono::chrono_t offset) {
restart(offset);
}

void Chrono::restart(Chrono::chrono_t offset) {
_startTime = _getTime();
_offset = offset;
Expand Down
1 change: 1 addition & 0 deletions Chrono.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class Chrono
Chrono(chrono_t (*getTime_)(void), bool startNow=true);

// Starts/restarts the chronometer with optional starting offset.
void start(chrono_t offset = 0);
void restart(chrono_t offset = 0);

// Stops/pauses the chronometer.
Expand Down
Binary file added Documentation/images/chrono.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
154 changes: 154 additions & 0 deletions Documentation/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=windows-1252" http-equiv="content-type">
<title>Chrono: Chronometer/stopwatch library</title>
<link href="./style/style.css" media="screen" rel="stylesheet" type="text/css">
<script type="text/javascript" src="./style/prettify.js"></script>
<script type="text/javascript" src="./scripts/toc.js"></script>
<script type="text/javascript" src="./scripts/smoothscroll.js"></script>
<script>

function handleLoad() {
prettyPrint();
}

</script></head>
<body onload="handleLoad();">

<div id="container">
<img style="margin-left: auto;margin-right: auto;display:block" src="images/chrono.png">
<br>
<h1>Chrono</h1>
<p>Chronometer/stopwatch library that counts the time passed since started.</p>
<div id="generated-toc" class="generate_from_h2"></div>
<h2>Get It!</h2>
<ul>
<li><a href="https://github.com/thomasfredericks/Chrono/archive/master.zip"><strong>Download the source</strong></a></li>
<li><a href="https://github.com/thomasfredericks/Chrono/">Chrono on Github </a></li>
</ul>

<h2>Adding Chrono</h2>
<p>Copy the <span class="hilite">Chrono</span> folder to your Arduino or Wiring <span class="hilite">libraries</span> folder.
<br>
<h2>Basic Example</h2>
<pre class="prettyprint" ><code>
// INCLUDE CHRONO LIBRARY
// Documentation : https://github.com/thomasfredericks/Chrono-Arduino-Wiring/blob/master/README.md
// Download : https://github.com/thomasfredericks/Chrono-Arduino-Wiring/archive/master.zip
#include &lt;Chrono.h&gt;

// Instanciate a Chrono object.
Chrono myChrono;

void setup() {
// Start the chronometer on setup.
myChrono.start();
}

void loop() {
// Check whether the chronometer has reached 1000 time units.
if (myChrono.hasPassed(1000)) {
// Do something here...
// Restart the chronometer.
myChrono.restart();
}
}
</code></pre>
<h2>Basic Usage</h2>
<h3> Include the library </h3>

<pre class="prettyprint" ><code>// INCLUDE CHRONO LIBRARY : http://github.com/thomasfredericks/Chrono
#include &lt;Chrono.h&gt;
</code></pre>

<h3> Create an instance </h3>
Once a Chrono is created, it starts counting (in milliseconds by default).

<pre class="prettyprint" ><code>
// CREATE A CHRONO INSTANCE :
Chrono myChrono;
</code></pre>

<h3> Basic Methods </h3>
<table>
<tr>
<td class="first">elapsed()</td>
<td class="second"><span class="type number">unsigned long</span></td>
<td> Returns the elapsed time</td>
</tr>
<tr>
<td class="first">restart()</td>
<td class="second"><span class="type void">void</span></td>
<td>Starts/restarts the chronometer</td>
</tr>
<tr>
<td class="first">hasPassed( timeout )</td>
<td class="second"><span class="type boolean">bool</span></td>
<td>Returns true if the chronometer passed the timeout</td>
</tr>
</table>

<h2>Advanced Usage</h2>


<h3> Time units </h3>
You can create a Chrono that counts in microseconds or seconds:
<pre class="prettyprint" ><code>Chrono myChronoMicros(Chrono::MICROS);
</code></pre>
<pre class="prettyprint" ><code>Chrono myChronoSeconds(Chrono::SECONDS);
</code></pre>

<h3> Custom time function </h3>
Alternatively you can create a Chrono with a custom time function:
<pre class="prettyprint" ><code>unsigned long mySpecialTimeFunction();

Chrono myChronoMicros(mySpecialTimeFunction);
</code></pre>

<h3>Advanced Methods</h3>
<table>
<tr>
<td class="first">restart( offset )</td>
<td class="second"><span class="type void">void</span></td>
<td>You can alternatively start(restart) the chronometer with a time offset</td>
</tr>
<tr>
<td class="first">stop()</td>
<td class="second"><span class="type void">void</span></td>
<td>Stops/pauses the chronometer</td>
</tr>
<tr>
<td class="first">resume( )</td>
<td class="second"><span class="type void">void</span></td>
<td>Resumes the chronometer</td>
</tr>
<tr>
<td class="first">hasPassed( timeout,restartIfPassed )</td>
<td class="second"><span class="type boolean">bool</span></td>
<td>If the chronometer passed the timeout, returns true and restarts the chronometer </td>
</tr>
<tr>
<td class="first">add( time )</td>
<td class="second"><span class="type void">void</span></td>
<td>Immediately adds some time to the chronometer</td>
</tr>
<tr>
<td class="first">isRunning( )</td>
<td class="second"><span class="type boolean">bool</span></td>
<td>Returns true if the chronometer is currently running</td>
</tr>
<tr>
<td class="first">delay( time )</td>
<td class="second"><span class="type void">void</span></td>
<td>Waits for some time (in the time unit of the chronometer)</td>
</tr>

</table>

<br>
</div>
<br>
<br>
</body>
</html>
145 changes: 145 additions & 0 deletions Documentation/scripts/smoothscroll.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
/* Smooth scrolling
Changes links that link to other parts of this page to scroll
smoothly to those links rather than jump to them directly, which
can be a little disorienting.
sil, http://www.kryogenix.org/
v1.0 2003-11-11
v1.1 2005-06-16 wrap it up in an object
*/

var ss = {
fixAllLinks: function() {
// Get a list of all links in the page
var allLinks = document.getElementsByTagName('a');
// Walk through the list
for (var i=0;i<allLinks.length;i++) {
var lnk = allLinks[i];
if ((lnk.href && lnk.href.indexOf('#') != -1) &&
( (lnk.pathname == location.pathname) ||
('/'+lnk.pathname == location.pathname) ) &&
(lnk.search == location.search)) {
// If the link is internal to the page (begins in #)
// then attach the smoothScroll function as an onclick
// event handler
ss.addEvent(lnk,'click',ss.smoothScroll);
}
}
},

smoothScroll: function(e) {
// This is an event handler; get the clicked on element,
// in a cross-browser fashion
if (window.event) {
target = window.event.srcElement;
} else if (e) {
target = e.target;
} else return;

// Make sure that the target is an element, not a text node
// within an element
if (target.nodeName.toLowerCase() != 'a') {
target = target.parentNode;
}

// Paranoia; check this is an A tag
if (target.nodeName.toLowerCase() != 'a') return;

// Find the <a name> tag corresponding to this href
// First strip off the hash (first character)
anchor = target.hash.substr(1);
// Now loop all A tags until we find one with that name
var allLinks = document.getElementsByTagName('a');
var destinationLink = null;
for (var i=0;i<allLinks.length;i++) {
var lnk = allLinks[i];
if (lnk.name && (lnk.name == anchor)) {
destinationLink = lnk;
break;
}
}
if (!destinationLink) destinationLink = document.getElementById(anchor);

// If we didn't find a destination, give up and let the browser do
// its thing
if (!destinationLink) return true;

// Find the destination's position
var destx = destinationLink.offsetLeft;
var desty = destinationLink.offsetTop;
var thisNode = destinationLink;
while (thisNode.offsetParent &&
(thisNode.offsetParent != document.body)) {
thisNode = thisNode.offsetParent;
destx += thisNode.offsetLeft;
desty += thisNode.offsetTop;
}

// Stop any current scrolling
clearInterval(ss.INTERVAL);

cypos = ss.getCurrentYPos();

ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
ss.INTERVAL =
setInterval('ss.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);

// And stop the actual click happening
if (window.event) {
window.event.cancelBubble = true;
window.event.returnValue = false;
}
if (e && e.preventDefault && e.stopPropagation) {
e.preventDefault();
e.stopPropagation();
}
},

scrollWindow: function(scramount,dest,anchor) {
wascypos = ss.getCurrentYPos();
isAbove = (wascypos < dest);
window.scrollTo(0,wascypos + scramount);
iscypos = ss.getCurrentYPos();
isAboveNow = (iscypos < dest);
if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
// if we've just scrolled past the destination, or
// we haven't moved from the last scroll (i.e., we're at the
// bottom of the page) then scroll exactly to the link
window.scrollTo(0,dest);
// cancel the repeating timer
clearInterval(ss.INTERVAL);
// and jump to the link directly so the URL's right
location.hash = anchor;
}
},

getCurrentYPos: function() {
if (document.body && document.body.scrollTop)
return document.body.scrollTop;
if (document.documentElement && document.documentElement.scrollTop)
return document.documentElement.scrollTop;
if (window.pageYOffset)
return window.pageYOffset;
return 0;
},

addEvent: function(elm, evType, fn, useCapture) {
// addEvent and removeEvent
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}
}

ss.STEPS = 25;

ss.addEvent(window,"load",ss.fixAllLinks);
Loading

0 comments on commit 7c5ba0c

Please sign in to comment.