-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of github.com:thomasfredericks/Chrono
# Conflicts: # Chrono.cpp # Chrono.h # LightChrono.cpp # LightChrono.h
- Loading branch information
Showing
16 changed files
with
919 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
*.db |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 <Chrono.h> | ||
|
||
// 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 <Chrono.h> | ||
</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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
Oops, something went wrong.