{"id":411,"date":"2017-02-24T21:58:26","date_gmt":"2017-02-24T19:58:26","guid":{"rendered":"http:\/\/sv1qzk.gr\/?p=411"},"modified":"2017-02-26T20:53:56","modified_gmt":"2017-02-26T18:53:56","slug":"countdown-timer-with-arduino","status":"publish","type":"post","link":"https:\/\/sv1qzk.gr\/index.php\/2017\/02\/24\/countdown-timer-with-arduino\/","title":{"rendered":"Countdown timer with Arduino"},"content":{"rendered":"<p>The need arose a construction of countdown timer. My first thought was to create\u00a0something, using a NIDRUINO (equivalent of Arduino UNO) that existed in my stock&#8230;<br \/>\nTo be able to have the adjustment and display parameters I use\u00a0the module:\u00a0<span style=\"font-size: 8pt;\"><a class=\"vip\" title=\"Click this link to access LCD 1602 16x2 2x16 Keypad Shield For Arduino Duemilanove UNO R3\" href=\"http:\/\/www.ebay.com\/itm\/LCD-1602-16x2-2x16-Keypad-Shield-For-Arduino-Duemilanove-UNO-R3-\/201776854363?hash=item2efad6755b:g:wcUAAOSw241Yb-sF\">LCD 1602 \u00a02&#215;16<\/a><\/span>\u00a0which is accompanied by a number of push buttons for easy management of this where I wanted to construct.\u00a0Unfortunately, this module does not directly output analog and digital ports so add to the standby holes, single row breakaway male pins like that:\u00a0<a href=\"http:\/\/www.ebay.com\/itm\/10pc-black-40pin-2-54mm-Single-Row-Breakaway-Male-Pin-Header-for-Arduino-uno-R3-\/281773614793?\">http:\/\/www.ebay.com\/itm\/10pc-black-40pin-2-54mm-Single-Row-Breakaway-Male-Pin-Header-for-Arduino-uno-R3-\/281773614793?<\/a>\u00a0to be able easily get some of the available ports (A0,A1,A2,A3,A4,D2,D3).<img loading=\"lazy\" decoding=\"async\" width=\"4928\" height=\"3264\" class=\"size-full wp-image-453 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6493-1.jpg\" alt=\"\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6493-1.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6493-1-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6493-1-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6493-1-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-442 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6492.jpg\" width=\"4928\" height=\"3264\" \/><\/p>\n<p>The LCD 1602 module use the following analog and digital ports:<\/p>\n<table style=\"width: 336px;\">\n<tbody>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Analog 0<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Buttons (select, up, right, down and left)<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 4<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">DB4<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 5<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">DB5<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 6<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">DB6<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 7<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">DB7<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 8<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">RS (Data or Signal Display Selection)<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 9<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Enable<\/span><\/td>\n<\/tr>\n<tr style=\"height: 10px;\">\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Digital 10<\/span><\/td>\n<td style=\"width: 54px; height: 10px;\"><span style=\"font-family: arial, helvetica, sans-serif;\">Backlit Control<\/span><br \/>\n<span style=\"font-family: arial, helvetica, sans-serif;\"> HIGH = Backlight on<\/span><br \/>\n<span style=\"font-family: arial, helvetica, sans-serif;\"> LOW = Backlight off<\/span><br \/>\n<span style=\"font-family: arial, helvetica, sans-serif;\"> Use PWM signal to control brightness<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>And the code for the function as a countdown timer&#8230;<br \/>\nI use one buzzer (YL-44) in digital port 2 for sound alarm<\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">\/\/ Countdown Timer<br \/>\n\/\/ Vlassis Christodoulopoulos 2017<br \/>\n<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#include &lt;LiquidCrystal.h&gt;<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">LiquidCrystal lcd(8, 9, 4, 5, 6, 7); \u00a0 \/\/ ports used from\u00a0LCD panel<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int lcd_key = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int adc_key_in = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int backlight = 10;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long tim = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long x = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long s;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long thou = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long tmin = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">long tsec = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int ct = 0; \/\/change tag (ct) 1 for Hours, 2 for min, and 3 for sec<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int buzzer = 2;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int bl = 1;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int ot = 2; \u00a0\/\/default 2 seconds<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">int otf = 0; \u00a0\/\/ flag for editing ON TIME time<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">#define RIGHT 0<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#define UP 1<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#define DOWN 2<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#define LEFT 3<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#define SELECT 4<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">#define NONE 5<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">int read_LCD_buttons() \u00a0\/\/ read the buttons<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">{<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> adc_key_in = analogRead(0); \/\/ read the value from the sensor<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> \/\/ my buttons when read are centered at these valies: 0, 144, 329, 504, 741<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> \/\/ we add approx 50 to those values and check to see if we are close<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (adc_key_in &gt; 1000) return NONE; \/\/ We make this the 1st option for speed reasons since it will be the most likely result<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">if (adc_key_in &lt; 50) return RIGHT;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (adc_key_in &lt; 250) return UP;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (adc_key_in &lt; 450) return DOWN;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (adc_key_in &lt; 650) return LEFT;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (adc_key_in &lt; 850) return SELECT;<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">return NONE; \u00a0\/\/ when all others fail, return this&#8230;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">}<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">void buzzering(int t, int l)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">{<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> for (int to = (t \/ (2 * l)); to &gt;= 0; &#8211;to) \/\/ length loop 2*l milliseconds<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> digitalWrite(buzzer, LOW);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(l);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> digitalWrite(buzzer, HIGH);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(l);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">}<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">void setup()<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">{<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> pinMode(buzzer, OUTPUT);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> pinMode(backlight, OUTPUT);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> digitalWrite(buzzer, HIGH);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> digitalWrite(backlight, HIGH);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.begin(16, 2); \/\/ start the library<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8220;Ver4 Vlassis (c)&#8221;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8220;Initialising &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> for (int x = 1; x &lt;= 4; x++)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(1000);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;.&#8221;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">}<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">void loop()<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\">{<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd_key = read_LCD_buttons(); \u00a0\/\/ read the buttons<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> switch (lcd_key) \u00a0\/\/ depending on which button was pushed, we perform an action<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case RIGHT:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> otf = 1;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;ON TIME &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(10, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(ot);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;s&#8221;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> break;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case LEFT:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> otf = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct &gt; 3) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ct = 1;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> } else {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ++ct;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 1 )<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;Change HOURS &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 2 )<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;Change MINUTES &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 3 )<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;Change SECONDS &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> break;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case UP:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (otf == 1)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ++ot;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(10, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(ot);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;s &#8220;);<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">}<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> else<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 1)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ++thou;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( thou &gt; 99) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> thou = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 2)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ++tmin;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( tmin &gt; 59) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> tmin = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 3)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> ++tsec;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( tsec &gt; 59) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> tsec = 0;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">tim = thou * 3600 + tmin * 60 + tsec;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> break;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case DOWN:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (otf == 1)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(100);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> &#8211;ot;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(10, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(ot);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;s &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> else<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 1)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> &#8211;thou;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( thou &lt; 0) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> thou = 99;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 2)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> &#8211;tmin;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( tmin &lt; 0) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> tmin = 59;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if (ct == 3)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> &#8211;tsec;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> if ( tsec &lt; 0) {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> tsec = 59;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> tim = thou * 3600 + tmin * 60 + tsec;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> break;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case SELECT:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> analogWrite(backlight, 30); \u00a0\/\/ Change background light to minimum for countdown mode&#8230;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;COUNTDOWN&#8230; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> for (long x = tim; x &gt; 0; x&#8211;)<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> s = x \/ 3600;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (s);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8220;h &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> s = x &#8211; (s * 3600);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (s \/ 60);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8220;m &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (s % 60 );<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print (&#8220;s &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> delay(996); \u00a0\/\/ Change this value for time base calibration purpose<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;BEEP&#8230; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> buzzering (ot * 1000, 50); \u00a0\/\/ sec * milliseconds<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> analogWrite(backlight, 1200); \u00a0\/\/ Change background light to maximum for edit mode&#8230;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 1);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> case NONE:<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> {<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(0, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;TIME&#8221;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.setCursor(5, 0);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(thou);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;h &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(tmin);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;m &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(tsec);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8220;s&#8221;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> lcd.print(&#8221; &#8220;);<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> break;<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><br \/>\n<span style=\"color: #0000ff; font-size: 10pt;\"> }<\/span><\/p>\n<p style=\"padding-left: 120px;\"><span style=\"color: #0000ff; font-size: 10pt;\">}<\/span><\/p>\n<p>The code is not the best (optimized)&#8230; but can be a basis for making many improvements and additions!<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-476\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6495.jpg\" alt=\"\" width=\"4928\" height=\"3264\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6495.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6495-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6495-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6495-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"4928\" height=\"3264\" class=\"size-full wp-image-458 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6496.jpg\" alt=\"\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6496.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6496-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6496-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6496-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"4928\" height=\"3264\" class=\"size-full wp-image-463 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6497.jpg\" alt=\"\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6497.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6497-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6497-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6497-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"4928\" height=\"3264\" class=\"size-full wp-image-464 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6498.jpg\" alt=\"\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6498.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6498-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6498-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6498-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"4928\" height=\"3264\" class=\"size-full wp-image-466 aligncenter\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6499.jpg\" alt=\"\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6499.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6499-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6499-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6499-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-468\" src=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6500.jpg\" alt=\"\" width=\"4928\" height=\"3264\" srcset=\"https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6500.jpg 4928w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6500-300x199.jpg 300w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6500-768x509.jpg 768w, https:\/\/sv1qzk.gr\/wp-content\/uploads\/2017\/02\/IMGP6500-1280x848.jpg 1280w\" sizes=\"auto, (max-width: 4928px) 100vw, 4928px\" \/><\/p>\n<p><span style=\"color: #ff0000; font-size: 12pt;\">Push buttons<br \/>\n<\/span><span style=\"color: #ff0000;\">Left\u00a0<\/span> = \u00a0(edit mode) -&gt; change hours -&gt; change minutes -&gt; change seconds<br \/>\n<span style=\"color: #ff0000;\">Up<\/span>\u00a0 = Increase value<br \/>\n<span style=\"color: #ff0000;\">Down\u00a0<\/span> = \u00a0Decrease value<br \/>\n<span style=\"color: #ff0000;\">Right<\/span>\u00a0 = \u00a0Change activation time value with <span style=\"color: #ff0000;\">Up<\/span>, <span style=\"color: #ff0000;\">Down<\/span> buttons<br \/>\n<span style=\"color: #ff0000;\">Rst<\/span>\u00a0 = \u00a0Reset<br \/>\n<span style=\"color: #ff0000;\">Select<\/span>\u00a0 = \u00a0Go to countdown mode<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The need arose a construction of countdown timer. My first thought was to create\u00a0something, using a NIDRUINO (equivalent of Arduino UNO) that existed in my stock&#8230; To be able to have the adjustment and display parameters I use\u00a0the module:\u00a0LCD 1602 \u00a02&#215;16\u00a0which is accompanied by a number of push buttons for easy management of this where &hellip; <a href=\"https:\/\/sv1qzk.gr\/index.php\/2017\/02\/24\/countdown-timer-with-arduino\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Countdown timer with Arduino<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-411","post","type-post","status-publish","format-standard","hentry","category-arduino"],"_links":{"self":[{"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/posts\/411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/comments?post=411"}],"version-history":[{"count":38,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/posts\/411\/revisions"}],"predecessor-version":[{"id":484,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/posts\/411\/revisions\/484"}],"wp:attachment":[{"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/media?parent=411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/categories?post=411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sv1qzk.gr\/index.php\/wp-json\/wp\/v2\/tags?post=411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}