<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sgmk-ssam.ch/index.php?action=history&amp;feed=atom&amp;title=Fermento_Mods</id>
	<title>Fermento Mods - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sgmk-ssam.ch/index.php?action=history&amp;feed=atom&amp;title=Fermento_Mods"/>
	<link rel="alternate" type="text/html" href="https://wiki.sgmk-ssam.ch/index.php?title=Fermento_Mods&amp;action=history"/>
	<updated>2026-11-08T19:13:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.sgmk-ssam.ch/index.php?title=Fermento_Mods&amp;diff=4741&amp;oldid=prev</id>
		<title>Dusjagr at 05:47, 27 March 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.sgmk-ssam.ch/index.php?title=Fermento_Mods&amp;diff=4741&amp;oldid=prev"/>
		<updated>2014-03-27T05:47:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 06:47, 27 March 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Back to [http://hackteria.org/wiki/index.php/DIY_%26_Low-Cost_Laboratory_Infrastructure#Fermento_Modds HLab DIY labs]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== dusjagr&amp;#039;s simple version 4-digit display ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== dusjagr&amp;#039;s simple version 4-digit display ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key sgmk_wiki:diff:1.41:old-4740:rev-4741:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Dusjagr</name></author>
	</entry>
	<entry>
		<id>https://wiki.sgmk-ssam.ch/index.php?title=Fermento_Mods&amp;diff=4740&amp;oldid=prev</id>
		<title>Dusjagr: Created page with &quot;  == dusjagr&#039;s simple version 4-digit display ==  &lt;syntaxhighlight lang=&quot;c&quot;&gt;  /*  * (c) Fakufaku 2013  * This is the code for the homebrew incubator &#039;Fermento&#039;  * This code is...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.sgmk-ssam.ch/index.php?title=Fermento_Mods&amp;diff=4740&amp;oldid=prev"/>
		<updated>2014-03-27T05:45:20Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  == dusjagr&amp;#039;s simple version 4-digit display ==  &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;  /*  * (c) Fakufaku 2013  * This is the code for the homebrew incubator &amp;#039;Fermento&amp;#039;  * This code is...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== dusjagr&amp;#039;s simple version 4-digit display ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * (c) Fakufaku 2013&lt;br /&gt;
 * This is the code for the homebrew incubator &amp;#039;Fermento&amp;#039;&lt;br /&gt;
 * This code is released under the CC-BY-SA 3.0 License.&lt;br /&gt;
 * The part of the code that&amp;#039;s used for the display on the 7-segment was ripped off the BigTime code from Nathan Seidl. I owe him a beer then.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;PID_v1.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define TRUE 1&lt;br /&gt;
#define FALSE 0&lt;br /&gt;
&lt;br /&gt;
//Careful messing with the system color, you can damage the display if&lt;br /&gt;
//you assign the wrong color. If you&amp;#039;re in doubt, set it to red and load the code,&lt;br /&gt;
//then see what the color is.&lt;br /&gt;
#define RED  1&lt;br /&gt;
#define GREEN 2&lt;br /&gt;
#define BLUE  3&lt;br /&gt;
#define YELLOW  4&lt;br /&gt;
int systemColor = RED;&lt;br /&gt;
int display_brightness = 15000; //A larger number makes the display more dim. This is set correctly below.&lt;br /&gt;
// slow continuous PWM variables&lt;br /&gt;
#define PWM_MS 50  // this changes the update speed&lt;br /&gt;
#define PWM_MIN 100&lt;br /&gt;
#define RELAY_ON  LOW&lt;br /&gt;
#define RELAY_OFF HIGH&lt;br /&gt;
&lt;br /&gt;
// PID loop parameter&lt;br /&gt;
#define PID_KP  50&lt;br /&gt;
#define PID_KI  1&lt;br /&gt;
#define PID_KD  1&lt;br /&gt;
&lt;br /&gt;
// Some display related parameters (time in seconds, temperature in degrees Celsius)&lt;br /&gt;
#define TIME_INCREMENT 1800&lt;br /&gt;
#define MAX_TIME 356459&lt;br /&gt;
#define TEMP_INCREMENT 1&lt;br /&gt;
#define MAX_TEMP 65&lt;br /&gt;
&lt;br /&gt;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
// Uncomment following line for the homebrew (1-sided) PCB version&lt;br /&gt;
//#define FERMENTO_1SIDE&lt;br /&gt;
#define FERMENTO_DUSJAGR&lt;br /&gt;
&lt;br /&gt;
//Pin definitions&lt;br /&gt;
#ifdef FERMENTO_DUSJAGR&lt;br /&gt;
int digit1 = 13;    //Display pin 12&lt;br /&gt;
int digit2 = 10;    //Display pin 9&lt;br /&gt;
int digit3 = 9;    //Display pin 8&lt;br /&gt;
int digit4 = 7;     //Display pin 6&lt;br /&gt;
&lt;br /&gt;
int segA = 12;      //Display pin 11&lt;br /&gt;
int segB = 8;      //Display pin 7&lt;br /&gt;
int segC = 5;       //Display pin 4&lt;br /&gt;
int segD = 3;       //Display pin 2&lt;br /&gt;
int segE = 2;       //Display pin 1&lt;br /&gt;
int segF = 11;      //Display pin 10&lt;br /&gt;
int segG = 6;       //Display pin 5&lt;br /&gt;
&lt;br /&gt;
int colons = 4;     //Display pin 3&lt;br /&gt;
&lt;br /&gt;
int temp_sen = A5;  // to read the temperature sensor&lt;br /&gt;
int poti_sen = A4;  // to read the temperature sensor&lt;br /&gt;
&lt;br /&gt;
const static int buzz = A2;&lt;br /&gt;
const static int theButton = A1;&lt;br /&gt;
const static int theButton2 = A0;&lt;br /&gt;
const static int pwm_pin = A3;  // Pin 4&lt;br /&gt;
&lt;br /&gt;
// The interrupt of button1 is on external interrupt 0&lt;br /&gt;
// The interrupt of button2 is on external interrupt 1&lt;br /&gt;
#define BUTTON1_INT_VECT INT0_vect&lt;br /&gt;
#define BUTTON2_INT_VECT INT1_vect&lt;br /&gt;
#define BUTTONS_INT_SET() do  \&lt;br /&gt;
  {                           \&lt;br /&gt;
    EICRA = (1&amp;lt;&amp;lt;ISC11) + (1&amp;lt;&amp;lt;ISC01); /* falling edge */ \&lt;br /&gt;
    EIMSK = (1&amp;lt;&amp;lt;INT1) + (1&amp;lt;&amp;lt;INT0);      \&lt;br /&gt;
  }                           \&lt;br /&gt;
  while (0)&lt;br /&gt;
&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// The interrupt of button1 is on external interrupt 0&lt;br /&gt;
// The interrupt of button2 is on PCINT13 (A5), on PCIE1.&lt;br /&gt;
#define BUTTON1_INT_VECT INT0_vect&lt;br /&gt;
#define BUTTON2_INT_VECT PCINT1_vect&lt;br /&gt;
#define BUTTONS_INT_SET() do  \&lt;br /&gt;
  {                           \&lt;br /&gt;
    EICRA = (1&amp;lt;&amp;lt;ISC01); /* falling edge */     \&lt;br /&gt;
    EIMSK = (1&amp;lt;&amp;lt;INT0);        \&lt;br /&gt;
    PCICR = (1 &amp;lt;&amp;lt; PCIE1);     \&lt;br /&gt;
    PCMSK1 = (1 &amp;lt;&amp;lt; PCINT13);  \&lt;br /&gt;
  }                           \&lt;br /&gt;
  while (0)&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Display status variable&lt;br /&gt;
#define TIME 1&lt;br /&gt;
#define TEMP 2&lt;br /&gt;
int display_status = TEMP;&lt;br /&gt;
int backoff = 0;  // just a short backoff for when we switch the display between TIME/TEMP&lt;br /&gt;
#define BACKOFFTIME 2&lt;br /&gt;
char disp_str[4];&lt;br /&gt;
&lt;br /&gt;
// Variable to keep track of PWM window&lt;br /&gt;
unsigned long windowStartTime;&lt;br /&gt;
&lt;br /&gt;
// control variables for PID&lt;br /&gt;
double t_incub;      // input to PID (temperature in incubator)&lt;br /&gt;
double t_incub_N;    // number of samples in t_incub average&lt;br /&gt;
double pwm_duty;     // output of PID&lt;br /&gt;
double t_set = 0;    // set point (target temperature)&lt;br /&gt;
double a_Poti;      // poti value&lt;br /&gt;
&lt;br /&gt;
//Specify the links and initial tuning parameters&lt;br /&gt;
PID myPID(&amp;amp;t_incub, &amp;amp;pwm_duty, &amp;amp;t_set, PID_KP, PID_KI, PID_KD, DIRECT);&lt;br /&gt;
&lt;br /&gt;
// display timer (freeze parameters to display for 2 seconds)&lt;br /&gt;
int t_incub_disp;&lt;br /&gt;
&lt;br /&gt;
// Timer variables&lt;br /&gt;
unsigned long timer_seconds = 0;&lt;br /&gt;
&lt;br /&gt;
//The very important 32.686kHz interrupt handler&lt;br /&gt;
SIGNAL(TIMER2_OVF_vect)&lt;br /&gt;
{&lt;br /&gt;
  if (timer_seconds &amp;gt; 1)&lt;br /&gt;
  {&lt;br /&gt;
    timer_seconds--;&lt;br /&gt;
  }&lt;br /&gt;
  else if (timer_seconds == 1)&lt;br /&gt;
  {&lt;br /&gt;
    // reset timer&lt;br /&gt;
    timer_seconds = 0;&lt;br /&gt;
    // turn off by setting target temperature to zero&lt;br /&gt;
    t_set = 0;&lt;br /&gt;
    // Reset the PID&lt;br /&gt;
    myPID.SetMode(MANUAL);&lt;br /&gt;
    myPID.SetMode(AUTOMATIC);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // decrement backoff&lt;br /&gt;
  if (backoff &amp;gt; 0)&lt;br /&gt;
    backoff--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//The interrupt occurs when you push the button&lt;br /&gt;
SIGNAL(BUTTON1_INT_VECT)&lt;br /&gt;
{&lt;br /&gt;
  display_status = TEMP;&lt;br /&gt;
  backoff = BACKOFFTIME;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SIGNAL(BUTTON2_INT_VECT)&lt;br /&gt;
{&lt;br /&gt;
  display_status = TIME;&lt;br /&gt;
  backoff = BACKOFFTIME;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(57600);&lt;br /&gt;
&lt;br /&gt;
  // set ADC reference to 3.3V&lt;br /&gt;
  analogReference(DEFAULT);&lt;br /&gt;
&lt;br /&gt;
  // initialize pwm drive pin, and turn it off&lt;br /&gt;
  pinMode(pwm_pin, OUTPUT);&lt;br /&gt;
  digitalWrite(pwm_pin, HIGH);&lt;br /&gt;
&lt;br /&gt;
  // initialize buzzer pin&lt;br /&gt;
  pinMode(buzz, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // initialize the buttons&lt;br /&gt;
  pinMode(theButton, INPUT);&lt;br /&gt;
  digitalWrite(theButton, HIGH); // pull-up&lt;br /&gt;
  pinMode(theButton2, INPUT);&lt;br /&gt;
  digitalWrite(theButton2, HIGH); // pull-up&lt;br /&gt;
  BUTTONS_INT_SET();&lt;br /&gt;
&lt;br /&gt;
  //Setup TIMER2&lt;br /&gt;
  TCCR2A = 0x00;&lt;br /&gt;
  TCCR2B = (1&amp;lt;&amp;lt;CS22)|(1&amp;lt;&amp;lt;CS20); //Set CLK/128 or overflow interrupt every 1s&lt;br /&gt;
  ASSR   = (1&amp;lt;&amp;lt;AS2); //Enable asynchronous operation&lt;br /&gt;
  TIMSK2 = (1&amp;lt;&amp;lt;TOIE2); //Enable the timer 2 interrupt&lt;br /&gt;
&lt;br /&gt;
  //These pins are used to control the display&lt;br /&gt;
  pinMode(segA, OUTPUT);&lt;br /&gt;
  pinMode(segB, OUTPUT);&lt;br /&gt;
  pinMode(segC, OUTPUT);&lt;br /&gt;
  pinMode(segD, OUTPUT);&lt;br /&gt;
  pinMode(segE, OUTPUT);&lt;br /&gt;
  pinMode(segF, OUTPUT);&lt;br /&gt;
  pinMode(segG, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  pinMode(digit1, OUTPUT);&lt;br /&gt;
  pinMode(digit2, OUTPUT);&lt;br /&gt;
  pinMode(digit3, OUTPUT);&lt;br /&gt;
  pinMode(digit4, OUTPUT);&lt;br /&gt;
  pinMode(colons, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // setup PID stuff&lt;br /&gt;
  myPID.SetOutputLimits(PWM_MIN-1, PWM_MS-PWM_MIN+1);&lt;br /&gt;
  myPID.SetMode(AUTOMATIC);&lt;br /&gt;
  myPID.SetSampleTime(PWM_MS);&lt;br /&gt;
  windowStartTime = millis();&lt;br /&gt;
&lt;br /&gt;
  // initialize pwm&lt;br /&gt;
  pwm_duty = 0; // off&lt;br /&gt;
  t_incub = read_temperature();&lt;br /&gt;
  t_incub_N = 1;&lt;br /&gt;
&lt;br /&gt;
  // initialize slow variables for display&lt;br /&gt;
  t_incub_disp = t_incub;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  //displayLetters(&amp;quot;UCOK&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  //temperatureControl();&lt;br /&gt;
  &lt;br /&gt;
  analogIn();&lt;br /&gt;
  &lt;br /&gt;
  displayNumber(a_Poti, FALSE); //Each call takes about 8ms, display the colon&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Simple PWM based on millis directly&lt;br /&gt;
&lt;br /&gt;
void temperatureControl()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  unsigned long now = millis();&lt;br /&gt;
&lt;br /&gt;
  // averaging over the whole 5 seconds&lt;br /&gt;
  t_incub += (read_temperature() - t_incub)/(++t_incub_N);&lt;br /&gt;
&lt;br /&gt;
  if(now - windowStartTime &amp;gt; PWM_MS)&lt;br /&gt;
  { &lt;br /&gt;
    // compute new pwm value for that window&lt;br /&gt;
    if (t_set != 0)&lt;br /&gt;
      myPID.Compute();&lt;br /&gt;
&lt;br /&gt;
    // start a new relay window&lt;br /&gt;
    windowStartTime = now;&lt;br /&gt;
&lt;br /&gt;
    // restart averaging of temperature&lt;br /&gt;
    t_incub_disp = t_incub;&lt;br /&gt;
    t_incub = read_temperature();&lt;br /&gt;
    t_incub_N = 1;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void analogIn()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  a_Poti = read_AnalogIn();&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float read_temperature()&lt;br /&gt;
{&lt;br /&gt;
  float A = 0;&lt;br /&gt;
  for (int i=0 ; i &amp;lt; 10 ; i++)&lt;br /&gt;
    A += analogRead(temp_sen);&lt;br /&gt;
  A /= 10;&lt;br /&gt;
  return (A/1023.*3300 - 600)/10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float read_AnalogIn()&lt;br /&gt;
{&lt;br /&gt;
  float A = 0;&lt;br /&gt;
  for (int i=0 ; i &amp;lt; 100 ; i++)&lt;br /&gt;
    A += analogRead(poti_sen);&lt;br /&gt;
  A /= 100;&lt;br /&gt;
  return (A);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== dusjagr&amp;#039;s freq-measurement ==&lt;br /&gt;
&lt;br /&gt;
Adding an oscillator 4093 circuit and measuring the frequency with the arduino, display the count on the 4-digit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * (c) Fakufaku 2013&lt;br /&gt;
 * This is the code for the homebrew incubator &amp;#039;Fermento&amp;#039;&lt;br /&gt;
 * This code is released under the CC-BY-SA 3.0 License.&lt;br /&gt;
 * The part of the code that&amp;#039;s used for the display on the 7-segment was ripped off the BigTime code from Nathan Seidl. I owe him a beer then.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;PID_v1.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define TRUE 1&lt;br /&gt;
#define FALSE 0&lt;br /&gt;
&lt;br /&gt;
//Careful messing with the system color, you can damage the display if&lt;br /&gt;
//you assign the wrong color. If you&amp;#039;re in doubt, set it to red and load the code,&lt;br /&gt;
//then see what the color is.&lt;br /&gt;
#define RED  1&lt;br /&gt;
#define GREEN 2&lt;br /&gt;
#define BLUE  3&lt;br /&gt;
#define YELLOW  4&lt;br /&gt;
int systemColor = RED;&lt;br /&gt;
int display_brightness = 15000; //A larger number makes the display more dim. This is set correctly below.&lt;br /&gt;
// slow continuous PWM variables&lt;br /&gt;
#define PWM_MS 50  // this changes the update speed&lt;br /&gt;
#define PWM_MIN 100&lt;br /&gt;
#define RELAY_ON  LOW&lt;br /&gt;
#define RELAY_OFF HIGH&lt;br /&gt;
&lt;br /&gt;
// PID loop parameter&lt;br /&gt;
#define PID_KP  50&lt;br /&gt;
#define PID_KI  1&lt;br /&gt;
#define PID_KD  1&lt;br /&gt;
&lt;br /&gt;
// Some display related parameters (time in seconds, temperature in degrees Celsius)&lt;br /&gt;
#define TIME_INCREMENT 1800&lt;br /&gt;
#define MAX_TIME 356459&lt;br /&gt;
#define TEMP_INCREMENT 1&lt;br /&gt;
#define MAX_TEMP 65&lt;br /&gt;
&lt;br /&gt;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
// Uncomment following line for the homebrew (1-sided) PCB version&lt;br /&gt;
//#define FERMENTO_1SIDE&lt;br /&gt;
#define FERMENTO_DUSJAGR&lt;br /&gt;
&lt;br /&gt;
//Pin definitions&lt;br /&gt;
#ifdef FERMENTO_DUSJAGR&lt;br /&gt;
int digit1 = 13;    //Display pin 12&lt;br /&gt;
int digit2 = 10;    //Display pin 9&lt;br /&gt;
int digit3 = 9;    //Display pin 8&lt;br /&gt;
int digit4 = 7;     //Display pin 6&lt;br /&gt;
&lt;br /&gt;
int segA = 12;      //Display pin 11&lt;br /&gt;
int segB = 8;      //Display pin 7&lt;br /&gt;
int segC = 5;       //Display pin 4&lt;br /&gt;
int segD = 3;       //Display pin 2&lt;br /&gt;
int segE = 2;       //Display pin 1&lt;br /&gt;
int segF = 11;      //Display pin 10&lt;br /&gt;
int segG = 6;       //Display pin 5&lt;br /&gt;
&lt;br /&gt;
int colons = 4;     //Display pin 3&lt;br /&gt;
&lt;br /&gt;
int temp_sen = A5;  // to read the temperature sensor&lt;br /&gt;
int poti_sen = A4;  // to read the temperature sensor&lt;br /&gt;
&lt;br /&gt;
int pinInt = A5;&lt;br /&gt;
 &lt;br /&gt;
uint8_t input = 0;&lt;br /&gt;
uint8_t inputNext = 0;&lt;br /&gt;
 &lt;br /&gt;
uint16_t count = 0;&lt;br /&gt;
uint16_t countTMP = 0;&lt;br /&gt;
 &lt;br /&gt;
uint8_t countHB = 0;         &lt;br /&gt;
uint8_t countLB = 0; &lt;br /&gt;
uint16_t countSQ = 0; &lt;br /&gt;
&lt;br /&gt;
int averaging = 1;&lt;br /&gt;
&lt;br /&gt;
const static int buzz = A2;&lt;br /&gt;
const static int theButton = A1;&lt;br /&gt;
const static int theButton2 = A0;&lt;br /&gt;
const static int pwm_pin = A3;  // Pin 4&lt;br /&gt;
&lt;br /&gt;
// The interrupt of button1 is on external interrupt 0&lt;br /&gt;
// The interrupt of button2 is on external interrupt 1&lt;br /&gt;
#define BUTTON1_INT_VECT INT0_vect&lt;br /&gt;
#define BUTTON2_INT_VECT INT1_vect&lt;br /&gt;
#define BUTTONS_INT_SET() do  \&lt;br /&gt;
  {                           \&lt;br /&gt;
    EICRA = (1&amp;lt;&amp;lt;ISC11) + (1&amp;lt;&amp;lt;ISC01); /* falling edge */ \&lt;br /&gt;
    EIMSK = (1&amp;lt;&amp;lt;INT1) + (1&amp;lt;&amp;lt;INT0);      \&lt;br /&gt;
  }                           \&lt;br /&gt;
  while (0)&lt;br /&gt;
&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
// The interrupt of button1 is on external interrupt 0&lt;br /&gt;
// The interrupt of button2 is on PCINT13 (A5), on PCIE1.&lt;br /&gt;
#define BUTTON1_INT_VECT INT0_vect&lt;br /&gt;
#define BUTTON2_INT_VECT PCINT1_vect&lt;br /&gt;
#define BUTTONS_INT_SET() do  \&lt;br /&gt;
  {                           \&lt;br /&gt;
    EICRA = (1&amp;lt;&amp;lt;ISC01); /* falling edge */     \&lt;br /&gt;
    EIMSK = (1&amp;lt;&amp;lt;INT0);        \&lt;br /&gt;
    PCICR = (1 &amp;lt;&amp;lt; PCIE1);     \&lt;br /&gt;
    PCMSK1 = (1 &amp;lt;&amp;lt; PCINT13);  \&lt;br /&gt;
  }                           \&lt;br /&gt;
  while (0)&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Display status variable&lt;br /&gt;
#define TIME 1&lt;br /&gt;
#define TEMP 2&lt;br /&gt;
int display_status = TEMP;&lt;br /&gt;
int backoff = 0;  // just a short backoff for when we switch the display between TIME/TEMP&lt;br /&gt;
#define BACKOFFTIME 2&lt;br /&gt;
char disp_str[4];&lt;br /&gt;
&lt;br /&gt;
// Variable to keep track of PWM window&lt;br /&gt;
unsigned long windowStartTime;&lt;br /&gt;
&lt;br /&gt;
// control variables for PID&lt;br /&gt;
double t_incub;      // input to PID (temperature in incubator)&lt;br /&gt;
double t_incub_N;    // number of samples in t_incub average&lt;br /&gt;
double pwm_duty;     // output of PID&lt;br /&gt;
double t_set = 0;    // set point (target temperature)&lt;br /&gt;
double a_Poti;      // poti value&lt;br /&gt;
&lt;br /&gt;
//Specify the links and initial tuning parameters&lt;br /&gt;
PID myPID(&amp;amp;t_incub, &amp;amp;pwm_duty, &amp;amp;t_set, PID_KP, PID_KI, PID_KD, DIRECT);&lt;br /&gt;
&lt;br /&gt;
// display timer (freeze parameters to display for 2 seconds)&lt;br /&gt;
int t_incub_disp;&lt;br /&gt;
&lt;br /&gt;
// Timer variables&lt;br /&gt;
unsigned long timer_seconds = 0;&lt;br /&gt;
&lt;br /&gt;
//The very important 32.686kHz interrupt handler&lt;br /&gt;
SIGNAL(TIMER2_OVF_vect)&lt;br /&gt;
{&lt;br /&gt;
  if (timer_seconds &amp;gt; 1)&lt;br /&gt;
  {&lt;br /&gt;
    timer_seconds--;&lt;br /&gt;
  }&lt;br /&gt;
  else if (timer_seconds == 1)&lt;br /&gt;
  {&lt;br /&gt;
    // reset timer&lt;br /&gt;
    timer_seconds = 0;&lt;br /&gt;
    // turn off by setting target temperature to zero&lt;br /&gt;
    t_set = 0;&lt;br /&gt;
    // Reset the PID&lt;br /&gt;
    myPID.SetMode(MANUAL);&lt;br /&gt;
    myPID.SetMode(AUTOMATIC);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // decrement backoff&lt;br /&gt;
  if (backoff &amp;gt; 0)&lt;br /&gt;
    backoff--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//The interrupt occurs when you push the button&lt;br /&gt;
SIGNAL(BUTTON1_INT_VECT)&lt;br /&gt;
{&lt;br /&gt;
  display_status = TEMP;&lt;br /&gt;
  backoff = BACKOFFTIME;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SIGNAL(BUTTON2_INT_VECT)&lt;br /&gt;
{&lt;br /&gt;
  display_status = TIME;&lt;br /&gt;
  backoff = BACKOFFTIME;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // set ADC reference to 3.3V&lt;br /&gt;
  analogReference(DEFAULT);&lt;br /&gt;
&lt;br /&gt;
  // initialize pwm drive pin, and turn it off&lt;br /&gt;
  pinMode(pwm_pin, OUTPUT);&lt;br /&gt;
  digitalWrite(pwm_pin, HIGH);&lt;br /&gt;
&lt;br /&gt;
  // initialize buzzer pin&lt;br /&gt;
  pinMode(buzz, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  // initialize the buttons&lt;br /&gt;
  pinMode(theButton, INPUT);&lt;br /&gt;
  digitalWrite(theButton, HIGH); // pull-up&lt;br /&gt;
  pinMode(theButton2, INPUT);&lt;br /&gt;
  digitalWrite(theButton2, HIGH); // pull-up&lt;br /&gt;
  BUTTONS_INT_SET();&lt;br /&gt;
&lt;br /&gt;
  //Setup TIMER2&lt;br /&gt;
  TCCR2A = 0x00;&lt;br /&gt;
  TCCR2B = (1&amp;lt;&amp;lt;CS22)|(1&amp;lt;&amp;lt;CS20); //Set CLK/128 or overflow interrupt every 1s&lt;br /&gt;
  ASSR   = (1&amp;lt;&amp;lt;AS2); //Enable asynchronous operation&lt;br /&gt;
  TIMSK2 = (1&amp;lt;&amp;lt;TOIE2); //Enable the timer 2 interrupt&lt;br /&gt;
&lt;br /&gt;
  //These pins are used to control the display&lt;br /&gt;
  pinMode(segA, OUTPUT);&lt;br /&gt;
  pinMode(segB, OUTPUT);&lt;br /&gt;
  pinMode(segC, OUTPUT);&lt;br /&gt;
  pinMode(segD, OUTPUT);&lt;br /&gt;
  pinMode(segE, OUTPUT);&lt;br /&gt;
  pinMode(segF, OUTPUT);&lt;br /&gt;
  pinMode(segG, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  pinMode(digit1, OUTPUT);&lt;br /&gt;
  pinMode(digit2, OUTPUT);&lt;br /&gt;
  pinMode(digit3, OUTPUT);&lt;br /&gt;
  pinMode(digit4, OUTPUT);&lt;br /&gt;
  pinMode(colons, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  pinMode(pinInt, INPUT);&lt;br /&gt;
&lt;br /&gt;
  // setup PID stuff&lt;br /&gt;
  myPID.SetOutputLimits(PWM_MIN-1, PWM_MS-PWM_MIN+1);&lt;br /&gt;
  myPID.SetMode(AUTOMATIC);&lt;br /&gt;
  myPID.SetSampleTime(PWM_MS);&lt;br /&gt;
  windowStartTime = millis();&lt;br /&gt;
&lt;br /&gt;
  // initialize pwm&lt;br /&gt;
  pwm_duty = 0; // off&lt;br /&gt;
  t_incub = read_temperature();&lt;br /&gt;
  t_incub_N = 1;&lt;br /&gt;
&lt;br /&gt;
  // initialize slow variables for display&lt;br /&gt;
  t_incub_disp = t_incub;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  getFreq();&lt;br /&gt;
    &lt;br /&gt;
  for(int c = 0 ; c &amp;lt; 1; c +=1) { &lt;br /&gt;
  displayNumber(count, FALSE); //Each call takes about 8ms, display the colon&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  /*&lt;br /&gt;
  Serial.print(&amp;quot;sensor = &amp;quot; );                       &lt;br /&gt;
  Serial.print(count);      &lt;br /&gt;
  Serial.print(&amp;quot;\t output = &amp;quot;);      &lt;br /&gt;
  Serial.println(countSQ);  &lt;br /&gt;
  */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Simple PWM based on millis directly&lt;br /&gt;
&lt;br /&gt;
void temperatureControl()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  unsigned long now = millis();&lt;br /&gt;
&lt;br /&gt;
  // averaging over the whole 5 seconds&lt;br /&gt;
  t_incub += (read_temperature() - t_incub)/(++t_incub_N);&lt;br /&gt;
&lt;br /&gt;
  if(now - windowStartTime &amp;gt; PWM_MS)&lt;br /&gt;
  { &lt;br /&gt;
    // compute new pwm value for that window&lt;br /&gt;
    if (t_set != 0)&lt;br /&gt;
      myPID.Compute();&lt;br /&gt;
&lt;br /&gt;
    // start a new relay window&lt;br /&gt;
    windowStartTime = now;&lt;br /&gt;
&lt;br /&gt;
    // restart averaging of temperature&lt;br /&gt;
    t_incub_disp = t_incub;&lt;br /&gt;
    t_incub = read_temperature();&lt;br /&gt;
    t_incub_N = 1;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void analogIn()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  a_Poti = read_AnalogIn();&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void getFreq()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  countTMP = 0;&lt;br /&gt;
  count = 0;&lt;br /&gt;
 &lt;br /&gt;
  for(int c = 0 ; c &amp;lt; averaging; c +=1) { &lt;br /&gt;
 &lt;br /&gt;
    countTMP = 0; &lt;br /&gt;
 &lt;br /&gt;
    input = digitalRead(pinInt);&lt;br /&gt;
 &lt;br /&gt;
    for (int16_t i = 0; i &amp;lt; 3000; i++){&lt;br /&gt;
 &lt;br /&gt;
      inputNext = digitalRead(pinInt);&lt;br /&gt;
 &lt;br /&gt;
      if(input != inputNext){&lt;br /&gt;
        countTMP = countTMP + 1;&lt;br /&gt;
        input=inputNext;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    count = count + countTMP;&lt;br /&gt;
 &lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  count = count / averaging;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== * Routines to display on 7-segment * ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/************************************/&lt;br /&gt;
/* Routines to display on 7-segment */&lt;br /&gt;
/************************************/&lt;br /&gt;
&lt;br /&gt;
//Given 1022, we display &amp;quot;10:22&amp;quot;&lt;br /&gt;
//Each digit is displayed for ~2000us, and cycles through the 4 digits&lt;br /&gt;
//After running through the 4 numbers, the display is turned off&lt;br /&gt;
&lt;br /&gt;
void displayNumber(int toDisplay, boolean displayColon)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
#define DIGIT_ON   LOW&lt;br /&gt;
#define DIGIT_OFF  HIGH&lt;br /&gt;
&lt;br /&gt;
  for(int digit = 4 ; digit &amp;gt; 0 ; digit--) {&lt;br /&gt;
&lt;br /&gt;
    //Turn on a digit for a short amount of time&lt;br /&gt;
    switch(digit) {&lt;br /&gt;
    case 1:&lt;br /&gt;
      digitalWrite(digit1, DIGIT_ON);&lt;br /&gt;
      digitalWrite(colons, LOW);&lt;br /&gt;
      break;&lt;br /&gt;
    case 2:&lt;br /&gt;
      digitalWrite(digit2, DIGIT_ON);&lt;br /&gt;
      digitalWrite(colons, LOW);&lt;br /&gt;
      break;&lt;br /&gt;
    case 3:&lt;br /&gt;
      digitalWrite(digit3, DIGIT_ON);&lt;br /&gt;
      if(displayColon == TRUE) &lt;br /&gt;
        digitalWrite(colons, HIGH); //When we update digit 2, let&amp;#039;s turn on colons as well&lt;br /&gt;
      else&lt;br /&gt;
        digitalWrite(colons, LOW);&lt;br /&gt;
      break;&lt;br /&gt;
    case 4:&lt;br /&gt;
      digitalWrite(digit4, DIGIT_ON);&lt;br /&gt;
      digitalWrite(colons, LOW);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Now display this digit&lt;br /&gt;
    if (digit != 5)&lt;br /&gt;
    {&lt;br /&gt;
      if( (toDisplay/10 != 0) || (toDisplay % 10) != 0) // do not display leading zeros&lt;br /&gt;
        lightNumber(toDisplay % 10); //Turn on the right segments for this digit&lt;br /&gt;
&lt;br /&gt;
        toDisplay /= 10;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
     // lightNumber(0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    delayMicroseconds(2000); //Display this digit for a fraction of a second (between 1us and 5000us, 500-2000 is pretty good)&lt;br /&gt;
    //If you set this too long, the display will start to flicker. Set it to 25000 for some fun.&lt;br /&gt;
&lt;br /&gt;
    //Turn off all segments&lt;br /&gt;
    lightNumber(10);&lt;br /&gt;
&lt;br /&gt;
    //Turn off all digits&lt;br /&gt;
    digitalWrite(digit1, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit2, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit3, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit4, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(colons, DIGIT_OFF);&lt;br /&gt;
    //digitalWrite(ampm, DIGIT_OFF);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Takes a string like &amp;quot;gren&amp;quot; and displays it, left justified&lt;br /&gt;
//We don&amp;#039;t use the colons, or AMPM dot, so they are turned off&lt;br /&gt;
void displayLetters(char * colorName)&lt;br /&gt;
{&lt;br /&gt;
#define DIGIT_ON  HIGH&lt;br /&gt;
#define DIGIT_OFF  LOW&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(digit4, DIGIT_ON);&lt;br /&gt;
  digitalWrite(colons, DIGIT_OFF);&lt;br /&gt;
  //digitalWrite(ampm, DIGIT_OFF);&lt;br /&gt;
&lt;br /&gt;
  for(int digit = 0 ; digit &amp;lt; 4 ; digit++) {&lt;br /&gt;
    //Turn on a digit for a short amount of time&lt;br /&gt;
    switch(digit) {&lt;br /&gt;
    case 0:&lt;br /&gt;
      digitalWrite(digit1, DIGIT_ON);&lt;br /&gt;
      break;&lt;br /&gt;
    case 1:&lt;br /&gt;
      digitalWrite(digit2, DIGIT_ON);&lt;br /&gt;
      break;&lt;br /&gt;
    case 2:&lt;br /&gt;
      digitalWrite(digit3, DIGIT_ON);&lt;br /&gt;
      break;&lt;br /&gt;
    case 3:&lt;br /&gt;
      digitalWrite(digit4, DIGIT_ON);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //Now display this letter&lt;br /&gt;
    lightNumber(colorName[digit]); //Turn on the right segments for this letter&lt;br /&gt;
&lt;br /&gt;
    delayMicroseconds(2000); //Display this digit for a fraction of a second (between 1us and 5000us, 500-2000 is pretty good)&lt;br /&gt;
    //If you set this too long, the display will start to flicker. Set it to 25000 for some fun.&lt;br /&gt;
&lt;br /&gt;
    //Turn off all segments&lt;br /&gt;
    lightNumber(10);&lt;br /&gt;
&lt;br /&gt;
    //Turn off all digits&lt;br /&gt;
    digitalWrite(digit1, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit2, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit3, DIGIT_OFF);&lt;br /&gt;
    digitalWrite(digit4, DIGIT_OFF);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Given a number, turns on those segments&lt;br /&gt;
//If number == 10, then turn off all segments&lt;br /&gt;
void lightNumber(int numberToDisplay)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
#define SEGMENT_ON  HIGH&lt;br /&gt;
#define SEGMENT_OFF LOW&lt;br /&gt;
&lt;br /&gt;
  /*&lt;br /&gt;
Segments&lt;br /&gt;
   -  A&lt;br /&gt;
   F / / B&lt;br /&gt;
   -  G&lt;br /&gt;
   E / / C&lt;br /&gt;
   -  D&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  switch (numberToDisplay)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
  case 0:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 1:&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 2:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 3:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 4:&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 5:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 6:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 7:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 8:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 9:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case 10:&lt;br /&gt;
    digitalWrite(segA, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_OFF);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
Segments&lt;br /&gt;
     -  A&lt;br /&gt;
     F / / B&lt;br /&gt;
     -    G&lt;br /&gt;
     E / / C&lt;br /&gt;
     - D&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    //Letters&lt;br /&gt;
  case &amp;#039;b&amp;#039;: //cdefg&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039;L&amp;#039;: //def&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039;u&amp;#039;: //cde&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case &amp;#039;g&amp;#039;: //abcdfg&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039;r&amp;#039;: //eg&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039;n&amp;#039;: //ceg&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
    //case r&lt;br /&gt;
  case &amp;#039;e&amp;#039;: //adefg&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039;d&amp;#039;: //bcdeg&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  case &amp;#039; &amp;#039;: //None&lt;br /&gt;
    digitalWrite(segA, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_OFF);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_OFF);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case &amp;#039;y&amp;#039;: //bcdfg&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
    &lt;br /&gt;
  case &amp;#039;U&amp;#039;: //bcdfg&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
    &lt;br /&gt;
  case &amp;#039;C&amp;#039;: //bcdfg&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
    &lt;br /&gt;
  case &amp;#039;O&amp;#039;: //bcdfg&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
    &lt;br /&gt;
  case &amp;#039;K&amp;#039;: //bcdfg&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
  &lt;br /&gt;
    &lt;br /&gt;
    //case e &lt;br /&gt;
    //case L&lt;br /&gt;
  case &amp;#039;o&amp;#039;: //cdeg&lt;br /&gt;
    digitalWrite(segC, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segD, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segE, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  case &amp;#039;º&amp;#039;: // abfg&lt;br /&gt;
    digitalWrite(segA, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segB, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segF, SEGMENT_ON);&lt;br /&gt;
    digitalWrite(segG, SEGMENT_ON);&lt;br /&gt;
    break;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dusjagr</name></author>
	</entry>
</feed>