<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?action=history&amp;feed=atom&amp;title=Technical_documentation</id>
	<title>Technical documentation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?action=history&amp;feed=atom&amp;title=Technical_documentation"/>
	<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;action=history"/>
	<updated>2026-04-19T23:04:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;diff=60709&amp;oldid=prev</id>
		<title>Clemens: Blanked the page</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;diff=60709&amp;oldid=prev"/>
		<updated>2013-10-08T15:30:17Z</updated>

		<summary type="html">&lt;p&gt;Blanked the page&lt;/p&gt;
&lt;a href=&quot;https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;amp;diff=60709&amp;amp;oldid=60708&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Clemens</name></author>
	</entry>
	<entry>
		<id>https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;diff=60708&amp;oldid=prev</id>
		<title>Clemens: Created page with &quot;&#039;&#039;&#039;Diagram&#039;&#039;&#039;:  800px   ----  &#039;&#039;&#039;Code&#039;&#039;&#039;:  Arduino.ino: &lt;pre&gt; #include &quot;Unit.h&quot; #include &quot;RunningAverage.h&quot; #include &quot;StopWatch.h&quot;  bool doprint...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.uni-weimar.de/kunst-und-gestaltung/wiki/index.php?title=Technical_documentation&amp;diff=60708&amp;oldid=prev"/>
		<updated>2013-10-08T15:26:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Diagram&amp;#039;&amp;#039;&amp;#039;:  &lt;a href=&quot;/kunst-und-gestaltung/wiki/File:Diagram_cb.png&quot; title=&quot;File:Diagram cb.png&quot;&gt;frameless|800px&lt;/a&gt;   ----  &amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039;:  Arduino.ino: &amp;lt;pre&amp;gt; #include &amp;quot;Unit.h&amp;quot; #include &amp;quot;RunningAverage.h&amp;quot; #include &amp;quot;StopWatch.h&amp;quot;  bool doprint...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Diagram&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
[[File:diagram_cb.png|frameless|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Code&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Arduino.ino:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;Unit.h&amp;quot;&lt;br /&gt;
#include &amp;quot;RunningAverage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;StopWatch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
bool doprint=true;&lt;br /&gt;
&lt;br /&gt;
const int threshold=20;&lt;br /&gt;
const int neg_threshold=-10;&lt;br /&gt;
const int array_size=15;&lt;br /&gt;
const int fill_array=200;&lt;br /&gt;
&lt;br /&gt;
unsigned int grow_time=36000;&lt;br /&gt;
unsigned int break_time=7200;&lt;br /&gt;
unsigned int wait_time=1200;&lt;br /&gt;
&lt;br /&gt;
const int unit_one_sensor=A0;&lt;br /&gt;
const int unit_two_sensor=A1;&lt;br /&gt;
const int unit_thr_sensor=A2;&lt;br /&gt;
&lt;br /&gt;
int unit_one_plus=4;&lt;br /&gt;
int unit_one_minus=5;&lt;br /&gt;
&lt;br /&gt;
int unit_two_plus=6;&lt;br /&gt;
int unit_two_minus=7;&lt;br /&gt;
&lt;br /&gt;
int unit_thr_plus=8;&lt;br /&gt;
int unit_thr_minus=9;&lt;br /&gt;
&lt;br /&gt;
Unit one(unit_one_sensor, unit_one_minus, unit_one_plus, 1, threshold, array_size, fill_array);&lt;br /&gt;
Unit two(unit_two_sensor, unit_two_minus, unit_two_plus, 2, threshold, array_size, fill_array);&lt;br /&gt;
Unit thr(unit_thr_sensor, unit_thr_minus, unit_thr_plus, 3, threshold, array_size, fill_array);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  pinMode(unit_one_minus,OUTPUT); &lt;br /&gt;
  pinMode(unit_one_plus,OUTPUT); &lt;br /&gt;
  pinMode(unit_two_minus,OUTPUT);&lt;br /&gt;
  pinMode(unit_two_plus,OUTPUT); &lt;br /&gt;
  pinMode(unit_thr_minus,OUTPUT); &lt;br /&gt;
  pinMode(unit_thr_plus,OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(19200);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;burnout_011&amp;quot;); &lt;br /&gt;
  &lt;br /&gt;
  one.wachse();&lt;br /&gt;
  two.wachse();&lt;br /&gt;
  thr.wachse();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
 /*&lt;br /&gt;
  one.run();&lt;br /&gt;
  two.run();&lt;br /&gt;
  thr.run();&lt;br /&gt;
  */&lt;br /&gt;
  one.run_timed(grow_time, break_time, wait_time);&lt;br /&gt;
  two.run_timed(grow_time, break_time, wait_time);&lt;br /&gt;
  thr.run_timed(grow_time, break_time, wait_time);&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  if(doprint)&lt;br /&gt;
  {  &lt;br /&gt;
    one.do_print();&lt;br /&gt;
    two.do_print();&lt;br /&gt;
    thr.do_print();&lt;br /&gt;
    Serial.println(); &lt;br /&gt;
  }&lt;br /&gt;
  delay(1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unit.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef Unit_h&lt;br /&gt;
#define Unit_h&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;RunningAverage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;StopWatch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class Unit&lt;br /&gt;
{&lt;br /&gt;
public:  &lt;br /&gt;
  Unit(void);&lt;br /&gt;
  Unit(int const&amp;amp; sensor, int const&amp;amp; minus, int const&amp;amp; plus, int const&amp;amp; unitid, int const&amp;amp; threshold, int const&amp;amp; size, int const&amp;amp; fillarray);&lt;br /&gt;
  ~Unit();  &lt;br /&gt;
  void wachse();&lt;br /&gt;
  void breche();&lt;br /&gt;
  void warte();&lt;br /&gt;
&lt;br /&gt;
  int state();&lt;br /&gt;
&lt;br /&gt;
  void run();&lt;br /&gt;
  void run_timed(unsigned int const&amp;amp; grow_time, unsigned int const&amp;amp; break_time, unsigned int const&amp;amp; wait_time);&lt;br /&gt;
&lt;br /&gt;
  void emergency_break();&lt;br /&gt;
  void do_print();&lt;br /&gt;
  void fill_spaces(int const&amp;amp; value);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private:  &lt;br /&gt;
  int m_sensor;&lt;br /&gt;
  int m_relais_minus;  &lt;br /&gt;
  int m_relais_plus;  &lt;br /&gt;
  int m_state;&lt;br /&gt;
  int m_unitid;&lt;br /&gt;
  int m_threshold;&lt;br /&gt;
  int m_fillarray;&lt;br /&gt;
&lt;br /&gt;
  RunningAverage m_RA;&lt;br /&gt;
  RunningAverage m_delta_RA;&lt;br /&gt;
&lt;br /&gt;
  StopWatch m_sw;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  int m_readings;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unit.cpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;Unit.h&amp;quot;&lt;br /&gt;
#include &amp;quot;RunningAverage.h&amp;quot;&lt;br /&gt;
#include &amp;quot;StopWatch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Arduino.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unit::Unit(int const&amp;amp; sensor, int const&amp;amp; r_minus, int const&amp;amp; r_plus, int const&amp;amp; unitid, int const&amp;amp; threshold, int const&amp;amp; size, int const&amp;amp; fillarray)&lt;br /&gt;
{&lt;br /&gt;
  m_sensor=sensor;&lt;br /&gt;
  m_relais_minus = r_minus;&lt;br /&gt;
  m_relais_plus = r_plus;&lt;br /&gt;
  m_unitid=unitid;&lt;br /&gt;
  m_threshold=threshold;&lt;br /&gt;
&lt;br /&gt;
  m_state=0;  &lt;br /&gt;
  m_fillarray=fillarray;&lt;br /&gt;
  m_sw.start();&lt;br /&gt;
&lt;br /&gt;
  m_RA.init(size);&lt;br /&gt;
  m_delta_RA.init(size);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(m_relais_minus, HIGH);&lt;br /&gt;
  digitalWrite(m_relais_plus, HIGH);  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Unit::~Unit()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::wachse()&lt;br /&gt;
{    &lt;br /&gt;
  digitalWrite(m_relais_minus, LOW);&lt;br /&gt;
  digitalWrite(m_relais_plus, HIGH);  &lt;br /&gt;
&lt;br /&gt;
  m_state=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::breche()&lt;br /&gt;
{&lt;br /&gt;
  digitalWrite(m_relais_minus, HIGH);&lt;br /&gt;
  delay(10);&lt;br /&gt;
  digitalWrite(m_relais_plus, LOW);&lt;br /&gt;
&lt;br /&gt;
  m_state=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::warte()&lt;br /&gt;
{&lt;br /&gt;
  digitalWrite(m_relais_minus, HIGH);&lt;br /&gt;
  digitalWrite(m_relais_plus, HIGH);&lt;br /&gt;
&lt;br /&gt;
  m_state=3;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Unit::state()&lt;br /&gt;
{&lt;br /&gt;
  return m_state;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::run()&lt;br /&gt;
{&lt;br /&gt;
  m_readings=analogRead(m_sensor);&lt;br /&gt;
&lt;br /&gt;
  emergency_break();&lt;br /&gt;
&lt;br /&gt;
  m_RA.addValue(m_readings);&lt;br /&gt;
  m_delta_RA.addValue(m_readings-m_RA.getAverage());&lt;br /&gt;
&lt;br /&gt;
  if(m_fillarray&amp;gt;0)&lt;br /&gt;
  {&lt;br /&gt;
    m_fillarray--;&lt;br /&gt;
  }&lt;br /&gt;
  else if(m_readings&amp;lt;=1000)&lt;br /&gt;
  {	&lt;br /&gt;
    if(m_delta_RA.getAverage()&amp;gt;m_threshold)&lt;br /&gt;
    {&lt;br /&gt;
      breche();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(m_delta_RA.getAverage()&amp;lt;(-m_threshold))&lt;br /&gt;
    {&lt;br /&gt;
      wachse();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::run_timed(unsigned int const&amp;amp;  grow_time, unsigned int const&amp;amp; break_time, unsigned int const&amp;amp; wait_time)&lt;br /&gt;
{&lt;br /&gt;
  m_readings=analogRead(m_sensor);&lt;br /&gt;
&lt;br /&gt;
  emergency_break();&lt;br /&gt;
&lt;br /&gt;
  m_RA.addValue(m_readings);&lt;br /&gt;
  m_delta_RA.addValue(m_readings-m_RA.getAverage());&lt;br /&gt;
&lt;br /&gt;
  if(m_fillarray&amp;gt;0)&lt;br /&gt;
  {&lt;br /&gt;
    m_fillarray--;&lt;br /&gt;
  }&lt;br /&gt;
  else if(m_readings&amp;lt;=1000)&lt;br /&gt;
  {	&lt;br /&gt;
    if(m_delta_RA.getAverage()&amp;gt;m_threshold)&lt;br /&gt;
    {&lt;br /&gt;
      breche();&lt;br /&gt;
      m_sw.reset();&lt;br /&gt;
      m_sw.start();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(m_delta_RA.getAverage()&amp;lt;(-m_threshold))&lt;br /&gt;
    {&lt;br /&gt;
      wachse();&lt;br /&gt;
      m_sw.reset();&lt;br /&gt;
      m_sw.start();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(m_state==1 &amp;amp;&amp;amp; m_sw.elapsed()&amp;gt;grow_time)&lt;br /&gt;
    {&lt;br /&gt;
      breche();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(m_state==2 &amp;amp;&amp;amp; m_sw.elapsed()&amp;gt;break_time)&lt;br /&gt;
    {&lt;br /&gt;
      wachse();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(m_state==3 &amp;amp;&amp;amp; m_sw.elapsed()&amp;gt;wait_time)&lt;br /&gt;
    {&lt;br /&gt;
      wachse();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::do_print()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(&amp;quot; unit&amp;quot;);&lt;br /&gt;
  Serial.print(m_unitid);&lt;br /&gt;
  Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
  Serial.print(m_state);&lt;br /&gt;
  fill_spaces(m_readings);&lt;br /&gt;
  Serial.print(m_readings);&lt;br /&gt;
  Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
  fill_spaces(m_delta_RA.getAverage());&lt;br /&gt;
  Serial.print(m_delta_RA.getAverage());&lt;br /&gt;
  Serial.print(&amp;quot;#&amp;quot;);&lt;br /&gt;
  fill_spaces(m_fillarray);&lt;br /&gt;
  Serial.print(m_fillarray);&lt;br /&gt;
  Serial.print(&amp;quot;-&amp;gt;&amp;quot;);&lt;br /&gt;
  fill_spaces(m_sw.elapsed());&lt;br /&gt;
  Serial.print(m_sw.elapsed());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::emergency_break()&lt;br /&gt;
{&lt;br /&gt;
  if(m_readings&amp;gt;1000 &amp;amp;&amp;amp; m_readings &amp;lt; 1010)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
    Serial.print(m_readings);&lt;br /&gt;
    Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;HIGH&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot; E_1 UNIT&amp;quot;);&lt;br /&gt;
    Serial.print(m_unitid);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.print(m_state);&lt;br /&gt;
    Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    breche();&lt;br /&gt;
    m_sw.reset();&lt;br /&gt;
    m_sw.start();&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(m_readings&amp;gt;=1010)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot; # &amp;quot;);&lt;br /&gt;
    Serial.print(m_readings);&lt;br /&gt;
    Serial.print(&amp;quot; # &amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;HIGH&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot; E_2 UNIT&amp;quot;);&lt;br /&gt;
    Serial.print(m_unitid);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.print(m_state);&lt;br /&gt;
    Serial.print(&amp;quot; # &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    wachse();&lt;br /&gt;
    delay(10);&lt;br /&gt;
    breche();&lt;br /&gt;
    m_sw.reset();&lt;br /&gt;
    m_sw.start();&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(m_readings&amp;gt;1022)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
    Serial.print(m_readings);&lt;br /&gt;
    Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;HIGH&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot; E_3 UNIT&amp;quot;);&lt;br /&gt;
    Serial.print(m_unitid);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.print(m_state);&lt;br /&gt;
    Serial.print(&amp;quot; | &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    warte();&lt;br /&gt;
    m_sw.reset();&lt;br /&gt;
    m_sw.start();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Unit::fill_spaces(int const&amp;amp; value)&lt;br /&gt;
{&lt;br /&gt;
  if(value&amp;lt;1000 &amp;amp;&amp;amp; value&amp;gt;=0)&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
    if(value&amp;lt;100)&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
      if(value&amp;lt;10)&lt;br /&gt;
      {&lt;br /&gt;
        Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(value&amp;gt;-1000 &amp;amp;&amp;amp; value&amp;lt;0)&lt;br /&gt;
  {&lt;br /&gt;
    if(value&amp;gt;-100)&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
      if(value&amp;gt;-10)&lt;br /&gt;
      {&lt;br /&gt;
        Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RunningAverage.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef RunningAverage_h&lt;br /&gt;
#define RunningAverage_h&lt;br /&gt;
// &lt;br /&gt;
//    FILE: RunningAverage.h&lt;br /&gt;
//  AUTHOR: Rob dot Tillaart at gmail dot com&lt;br /&gt;
// PURPOSE: RunningAverage library for Arduino&lt;br /&gt;
//     URL: http://playground.arduino.cc/Main/RunningAverage&lt;br /&gt;
// HISTORY: See RunningAverage.cpp&lt;br /&gt;
//&lt;br /&gt;
// Released to the public domain&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
// backwards compatibility&lt;br /&gt;
// clr() clear()&lt;br /&gt;
// add(x) addValue(x)&lt;br /&gt;
// avg() getAverage()&lt;br /&gt;
&lt;br /&gt;
#define RUNNINGAVERAGE_LIB_VERSION &amp;quot;0.2.02&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class RunningAverage &lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  RunningAverage();&lt;br /&gt;
  RunningAverage(int);&lt;br /&gt;
  ~RunningAverage();&lt;br /&gt;
  void clear();&lt;br /&gt;
  void init(int n);&lt;br /&gt;
  void addValue(int);&lt;br /&gt;
  int getAverage();&lt;br /&gt;
  void fillValue(int, int);&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  int _size;&lt;br /&gt;
  int _cnt;&lt;br /&gt;
  int _idx;&lt;br /&gt;
  int _sum;&lt;br /&gt;
  int * _ar;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
// END OF FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RunningAverage.cpp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// &lt;br /&gt;
//    FILE: RunningAverage.cpp&lt;br /&gt;
//  AUTHOR: Rob Tillaart&lt;br /&gt;
// VERSION: 0.2.02&lt;br /&gt;
// PURPOSE: RunningAverage library for Arduino&lt;br /&gt;
//&lt;br /&gt;
// The library stores the last N individual values in a circular buffer, &lt;br /&gt;
// to calculate the running average. &lt;br /&gt;
//&lt;br /&gt;
// HISTORY: &lt;br /&gt;
// 0.1.00 - 2011-01-30 initial version&lt;br /&gt;
// 0.1.01 - 2011-02-28 fixed missing destructor in .h&lt;br /&gt;
// 0.2.00 - 2012-??-?? Yuval Naveh added trimValue (found on web)&lt;br /&gt;
//          http://stromputer.googlecode.com/svn-history/r74/trunk/Arduino/Libraries/RunningAverage/RunningAverage.cpp&lt;br /&gt;
// 0.2.01 - 2012-11-21 refactored&lt;br /&gt;
// 0.2.02 - 2012-12-30 refactored trimValue -&amp;gt; fillValue&lt;br /&gt;
//&lt;br /&gt;
// Released to the public domain&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;RunningAverage.h&amp;quot;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RunningAverage::RunningAverage()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RunningAverage::RunningAverage(int n)&lt;br /&gt;
{&lt;br /&gt;
  _size = n;&lt;br /&gt;
  _ar = (int*) malloc(_size * sizeof(int));&lt;br /&gt;
  clear();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
RunningAverage::~RunningAverage()&lt;br /&gt;
{&lt;br /&gt;
  free(_ar);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// resets all counters&lt;br /&gt;
void RunningAverage::clear() &lt;br /&gt;
{ &lt;br /&gt;
  _cnt = 0;&lt;br /&gt;
  _idx = 0;&lt;br /&gt;
  _sum = 0.0;&lt;br /&gt;
  for (int i = 0; i&amp;lt; _size; i++) _ar[i] = 0.0;  // needed to keep addValue simple&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void RunningAverage::init(int n)&lt;br /&gt;
{&lt;br /&gt;
  _size = n;&lt;br /&gt;
  _ar = (int*) malloc(_size * sizeof(int));&lt;br /&gt;
  clear();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// adds a new value to the data-set&lt;br /&gt;
void RunningAverage::addValue(int f)&lt;br /&gt;
{&lt;br /&gt;
  _sum -= _ar[_idx];&lt;br /&gt;
  _ar[_idx] = f;&lt;br /&gt;
  _sum += _ar[_idx];&lt;br /&gt;
  _idx++;&lt;br /&gt;
  if (_idx == _size) _idx = 0;  // faster than %&lt;br /&gt;
  if (_cnt &amp;lt; _size) _cnt++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// returns the average of the data-set added sofar&lt;br /&gt;
int RunningAverage::getAverage()&lt;br /&gt;
{&lt;br /&gt;
  if (_cnt == 0) return 0; // NaN ?  math.h&lt;br /&gt;
  return _sum / _cnt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// fill the average with a value&lt;br /&gt;
// the param number determines how often value is added (weight)&lt;br /&gt;
// number should preferably be between 1 and size&lt;br /&gt;
void RunningAverage::fillValue(int value, int number)&lt;br /&gt;
{&lt;br /&gt;
  clear();&lt;br /&gt;
  for (int i = 0; i &amp;lt; number; i++) &lt;br /&gt;
  {&lt;br /&gt;
    addValue(value);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// END OF FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stopwatch.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef StopWatch_h&lt;br /&gt;
#define StopWatch_h&lt;br /&gt;
// &lt;br /&gt;
//    FILE: StopWatch.h&lt;br /&gt;
//  AUTHOR: Rob Tillaart&lt;br /&gt;
// PURPOSE: Simple StopWatch library for Arduino&lt;br /&gt;
// HISTORY: See StopWatch.cpp&lt;br /&gt;
//     URL: http://playground.arduino.cc/Code/StopWatchClass&lt;br /&gt;
//&lt;br /&gt;
// Released to the public domain&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#define STOPWATCH_LIB_VERSION &amp;quot;0.1.03&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#if ARDUINO &amp;gt;= 100&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#else&lt;br /&gt;
#include &amp;quot;WProgram.h&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
class StopWatch &lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  enum State { &lt;br /&gt;
    RESET, RUNNING, STOPPED   };&lt;br /&gt;
  enum Resolution { &lt;br /&gt;
    MILLIS, MICROS, SECONDS   };&lt;br /&gt;
  StopWatch(enum Resolution res = SECONDS);&lt;br /&gt;
  void start();&lt;br /&gt;
  void stop(); &lt;br /&gt;
  void reset();&lt;br /&gt;
  unsigned long value();&lt;br /&gt;
  unsigned long elapsed() { &lt;br /&gt;
    return value(); &lt;br /&gt;
  };&lt;br /&gt;
  bool isRunning();&lt;br /&gt;
  enum State state();&lt;br /&gt;
  enum Resolution resolution() { &lt;br /&gt;
    return _res; &lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
  enum State _state;&lt;br /&gt;
  enum Resolution _res;&lt;br /&gt;
  unsigned long _starttime;&lt;br /&gt;
  unsigned long _stoptime;&lt;br /&gt;
  unsigned long (*_gettime)(void);&lt;br /&gt;
  static unsigned long seconds() { &lt;br /&gt;
    return millis()/1000; &lt;br /&gt;
  };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
// END OF FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
StopWatch.cpp&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// &lt;br /&gt;
//    FILE: StopWatch.cpp&lt;br /&gt;
//  AUTHOR: Rob Tillaart&lt;br /&gt;
// VERSION: 0.1.03&lt;br /&gt;
// PURPOSE: Simple StopWatch library for Arduino&lt;br /&gt;
//&lt;br /&gt;
// The library is based upon millis() and therefore&lt;br /&gt;
// has the same restrictions as millis() has wrt overflow.&lt;br /&gt;
//&lt;br /&gt;
// HISTORY: &lt;br /&gt;
// 0.1.00 - 2011-01-04 initial version&lt;br /&gt;
// 0.1.01 - 2011-01-04 Added better state&lt;br /&gt;
// 0.1.02 - 2011-06-15 Added state() + #defines + lib version&lt;br /&gt;
// 0.1.03 - 2012-01-22 Added several improvements&lt;br /&gt;
//             By mromani &amp;amp; Rob Tillaart&lt;br /&gt;
// &lt;br /&gt;
// Released to the public domain&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;StopWatch.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
StopWatch::StopWatch(enum Resolution res)&lt;br /&gt;
{&lt;br /&gt;
  _res = res;&lt;br /&gt;
  switch(_res) {&lt;br /&gt;
  case MICROS:&lt;br /&gt;
    _gettime = micros;&lt;br /&gt;
    break;&lt;br /&gt;
  case MILLIS:&lt;br /&gt;
    _gettime = millis;&lt;br /&gt;
    break;&lt;br /&gt;
  case SECONDS:&lt;br /&gt;
    _gettime = seconds;&lt;br /&gt;
    break;&lt;br /&gt;
  default:  &lt;br /&gt;
    _gettime = millis;&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
  reset();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopWatch::reset()&lt;br /&gt;
{&lt;br /&gt;
  _state = StopWatch::RESET;&lt;br /&gt;
  _starttime = _stoptime = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopWatch::start()&lt;br /&gt;
{&lt;br /&gt;
  if (_state == StopWatch::RESET || _state == StopWatch::STOPPED)&lt;br /&gt;
  {&lt;br /&gt;
    _state = StopWatch::RUNNING;&lt;br /&gt;
    unsigned long t = _gettime();&lt;br /&gt;
    _starttime += t - _stoptime;&lt;br /&gt;
    _stoptime = t;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned long StopWatch::value()&lt;br /&gt;
{&lt;br /&gt;
  if (_state == StopWatch::RUNNING) _stoptime = _gettime();&lt;br /&gt;
  return _stoptime - _starttime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void StopWatch::stop()&lt;br /&gt;
{&lt;br /&gt;
  if (_state == StopWatch::RUNNING)&lt;br /&gt;
  {&lt;br /&gt;
    _state = StopWatch::STOPPED;&lt;br /&gt;
    _stoptime = _gettime();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool StopWatch::isRunning()&lt;br /&gt;
{&lt;br /&gt;
  return (_state == StopWatch::RUNNING);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
enum StopWatch::State StopWatch::state()&lt;br /&gt;
{&lt;br /&gt;
  return _state;&lt;br /&gt;
}&lt;br /&gt;
// END OF FILE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Clemens</name></author>
	</entry>
</feed>