{"id":611,"date":"2026-07-31T03:51:43","date_gmt":"2026-07-31T03:51:43","guid":{"rendered":"https:\/\/iotnoob.com\/wordpress\/?p=611"},"modified":"2026-07-31T03:51:43","modified_gmt":"2026-07-31T03:51:43","slug":"nonblocking-io-%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a-arduino","status":"publish","type":"post","link":"https:\/\/iotnoob.com\/wordpress\/2026\/07\/31\/nonblocking-io-%e0%b8%aa%e0%b8%b3%e0%b8%ab%e0%b8%a3%e0%b8%b1%e0%b8%9a-arduino\/","title":{"rendered":"Nonblocking IO \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a Arduino"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u0e40\u0e27\u0e25\u0e32\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e43\u0e19 arduino \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e2d\u0e23\u0e31\u0e1a\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01 I\/O \u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23\u0e2a\u0e31\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07 \u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49 INTERRUPT <br>\u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 delay \u0e43\u0e19\u0e01\u0e32\u0e23\u0e27\u0e19\u0e25\u0e39\u0e1b\u0e23\u0e2d\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e44\u0e14\u0e49 \u0e41\u0e15\u0e48\u0e40\u0e23\u0e32\u0e08\u0e30\u0e40\u0e08\u0e2d\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e27\u0e48\u0e32\u0e43\u0e19\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e23\u0e2d Arduino \u0e08\u0e30\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e44\u0e1b\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e37\u0e48\u0e19\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 \u0e40\u0e23\u0e35\u0e22\u0e01\u0e27\u0e48\u0e32\u0e21\u0e31\u0e19\u0e16\u0e39\u0e01 Blocking <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e23\u0e2d\u0e41\u0e25\u0e49\u0e27 Arduino \u0e44\u0e21\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e30\u0e44\u0e23\u0e40\u0e25\u0e22 \u0e40\u0e23\u0e32\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e27\u0e34\u0e18\u0e35\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e0a\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e46\u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49 \u0e41\u0e25\u0e49\u0e27\u0e43\u0e2b\u0e49 Arduino \u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e2d\u0e2d\u0e01\u0e44\u0e1b\u0e17\u0e33\u0e2d\u0e30\u0e44\u0e23\u0e1a\u0e32\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e01\u0e48\u0e2d\u0e19 \u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27\u0e01\u0e47\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2b\u0e25\u0e31\u0e01\u0e01\u0e48\u0e2d\u0e19 \u0e08\u0e32\u0e01\u0e19\u0e31\u0e49\u0e19\u0e1e\u0e2d\u0e16\u0e36\u0e07\u0e40\u0e27\u0e25\u0e32\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e01\u0e47\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e2d\u0e2d\u0e01\u0e44\u0e1b\u0e2d\u0e35\u0e01\u0e23\u0e2d\u0e1a \u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e44\u0e14\u0e49\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 \u0e08\u0e36\u0e07\u0e04\u0e48\u0e2d\u0e22\u0e17\u0e33\u0e07\u0e32\u0e19\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49 \u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e21\u0e31\u0e19\u0e44\u0e21\u0e48 block loop \u0e40\u0e2d\u0e32\u0e44\u0e27\u0e49 \u0e08\u0e36\u0e07\u0e40\u0e23\u0e35\u0e22\u0e01\u0e27\u0e48\u0e32 non-blocking \u0e42\u0e14\u0e22\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e21\u0e31\u0e19\u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19 multi task \u0e44\u0e14\u0e49 \u0e41\u0e15\u0e48\u0e08\u0e23\u0e34\u0e07\u0e46\u0e41\u0e25\u0e49\u0e27\u0e21\u0e31\u0e19\u0e41\u0e04\u0e48\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e40\u0e09\u0e22\u0e46<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\nclass TimerTask {\n  private:\n    unsigned long previousMillis;\n    unsigned long interval;\n  public:\n    TimerTask(unsigned long _interval);\n    bool isReady();\n};<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;Arduino.h>\n#include \"TimerTask.h\"\n\n\nTimerTask::TimerTask(unsigned long _interval) {\n  interval = _interval;\n  previousMillis = 0;\n}\n\nbool TimerTask::isReady() {\n  unsigned long currentMillis = millis();\n  if (currentMillis - previousMillis >= interval) {\n    previousMillis = currentMillis;\n    return true;\n  }\n  return false;\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include \"TimerTask.h\"\n\nTimerTask checkInTask(3600000); \/\/ 6000 = 6sec, 60000 = 1 minute, 3600000 = 1 Hr\nTimerTask commandInQTask(60000);\n\/\/TimerTask rtcTask(500);      \/\/ 1   sec\nTimerTask displayTimeOnLcdTask(1000);      \/\/ 1.2 sec\n\/\/TimerTask cmpTimeTask(5000);  \/\/ 5   second\nTimerTask updateValveStatus(6000);\n\n\nvoid loop() {\n  if (checkInTask.isReady()) {\n    checkInConfirm(\"REGULAR_CHECKIN\");\n  }\n\n  if (displayTimeOnLcdTask.isReady()) {\n    printCurrentDateOnLcd();\n  }\n\n  if (commandInQTask.isReady()) {\n    getArrayOfCommandInQueue();\n  }\n\n\n  \/*\n\n  ########### MAIN FLOW IS LYING HERE - AND IT IS NOT BLOCKING BY ABOVE COMMAND\/FUNCTION ########\n\n  *\/\n\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e04\u0e37\u0e2d Object TimerTask \u0e08\u0e30\u0e40\u0e01\u0e47\u0e1a\u0e04\u0e48\u0e32\u0e40\u0e27\u0e25\u0e32\u0e44\u0e27\u0e49\u0e2a\u0e2d\u0e07\u0e04\u0e48\u0e32 \u0e04\u0e37\u0e2d <br>previousMilli &#8211; \u0e0a\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e17\u0e35\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e1b\u0e04\u0e23\u0e31\u0e49\u0e07\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14<br>interval &#8211; \u0e0a\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e23\u0e2d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">isReady \u0e08\u0e30\u0e40\u0e0a\u0e47\u0e04\u0e27\u0e48\u0e32 currentMilli (\u0e40\u0e27\u0e25\u0e32\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19) &#8211; previousMilli (\u0e40\u0e27\u0e25\u0e32\u0e17\u0e35\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19\u0e04\u0e23\u0e31\u0e49\u0e07\u0e01\u0e48\u0e2d\u0e19) \u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32 interval \u0e2b\u0e23\u0e37\u0e2d\u0e22\u0e31\u0e07<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0e16\u0e49\u0e32\u0e22\u0e31\u0e07 \u0e01\u0e47\u0e44\u0e1b\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2b\u0e25\u0e31\u0e01\u0e15\u0e48\u0e2d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0e16\u0e49\u0e32\u0e40\u0e1b\u0e47\u0e19 TRUE \u0e41\u0e2a\u0e14\u0e07\u0e27\u0e48\u0e32\u0e44\u0e14\u0e49\u0e40\u0e27\u0e25\u0e32\u0e17\u0e33\u0e07\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27 \u0e01\u0e47\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e2d\u0e2d\u0e01\u0e44\u0e1b\u0e01\u0e48\u0e2d\u0e19 \u0e40\u0e0a\u0e48\u0e19\u0e44\u0e1b\u0e2d\u0e48\u0e32\u0e19 sensor \u0e14\u0e39\u0e27\u0e48\u0e32 sensor \u0e40\u0e1b\u0e47\u0e19 On \u0e2b\u0e23\u0e37\u0e2d\u0e22\u0e31\u0e07 \u0e16\u0e49\u0e32\u0e22\u0e31\u0e07\u0e01\u0e47\u0e01\u0e25\u0e31\u0e1a \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e2d \u0e16\u0e49\u0e32 On \u0e41\u0e25\u0e49\u0e27 \u0e01\u0e47\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0e08\u0e23\u0e34\u0e07\u0e46 \u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07 TimerTask \u0e01\u0e47\u0e44\u0e14\u0e49\u0e41\u0e2b\u0e25\u0e48\u0e30 \u0e41\u0e15\u0e48\u0e21\u0e31\u0e19\u0e04\u0e37\u0e2d code \u0e08\u0e30\u0e14\u0e39\u0e22\u0e32\u0e27\u0e46 \u0e44\u0e21\u0e48\u0e2a\u0e27\u0e22 \u0e41\u0e25\u0e49\u0e27\u0e21\u0e31\u0e19\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e08\u0e30\u0e43\u0e2b\u0e49\u0e17\u0e33\u0e07\u0e32\u0e19\u0e17\u0e38\u0e01\u0e46\u0e01\u0e35\u0e48\u0e19\u0e32\u0e17\u0e35 \u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e21\u0e31\u0e19\u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19\u0e17\u0e38\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07\u0e17\u0e35\u0e48\u0e27\u0e19\u0e25\u0e39\u0e1b <br>\u0e0b\u0e36\u0e48\u0e07\u0e01\u0e32\u0e23\u0e17\u0e33 TimerTask \u0e21\u0e31\u0e19\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49 code \u0e40\u0e23\u0e32\u0e14\u0e39\u0e07\u0e48\u0e32\u0e22\u0e02\u0e36\u0e49\u0e19 \u0e41\u0e25\u0e49\u0e27\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e27\u0e25\u0e32\u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e40\u0e08\u0e19 \u0e44\u0e21\u0e48\u0e2d\u0e48\u0e32\u0e19 sensor \u0e2b\u0e23\u0e37\u0e2d api \u0e1a\u0e48\u0e2d\u0e22\u0e08\u0e19\u0e40\u0e01\u0e34\u0e19\u0e44\u0e1b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0e40\u0e27\u0e25\u0e32\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e43\u0e19 arduino \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e2d\u0e23\u0e31\u0e1a\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01 I\/O \u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23\u0e2a\u0e31\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07 \u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49 INTERRUPT \u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 delay \u0e43\u0e19\u0e01\u0e32\u0e23\u0e27\u0e19\u0e25\u0e39\u0e1b\u0e23\u0e2d\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e08\u0e31\u0e1a\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e44\u0e14\u0e49 \u0e41\u0e15\u0e48\u0e40\u0e23\u0e32\u0e08\u0e30\u0e40\u0e08\u0e2d\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e27\u0e48\u0e32\u0e43\u0e19\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e23\u0e2d Arduino \u0e08\u0e30\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e44\u0e1b\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e37\u0e48\u0e19\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 \u0e40\u0e23\u0e35\u0e22\u0e01\u0e27\u0e48\u0e32\u0e21\u0e31\u0e19\u0e16\u0e39\u0e01 Blocking&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-611","post","type-post","status-publish","format-standard","hentry","category-engineering"],"_links":{"self":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/comments?post=611"}],"version-history":[{"count":1,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/611\/revisions"}],"predecessor-version":[{"id":612,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/posts\/611\/revisions\/612"}],"wp:attachment":[{"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/media?parent=611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/categories?post=611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iotnoob.com\/wordpress\/wp-json\/wp\/v2\/tags?post=611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}