{"id":120,"date":"2015-12-02T18:52:55","date_gmt":"2015-12-02T15:52:55","guid":{"rendered":"http:\/\/arduinolab.pw\/?p=120"},"modified":"2016-01-07T18:53:37","modified_gmt":"2016-01-07T15:53:37","slug":"elektronnyj-zamok-s-ibutton-klyuchami-na-arduino","status":"publish","type":"post","link":"https:\/\/arduinolab.pw\/index.php\/2015\/12\/02\/elektronnyj-zamok-s-ibutton-klyuchami-na-arduino\/","title":{"rendered":"\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u043a \u0441 iButton \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043d\u0430 Arduino"},"content":{"rendered":"<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/_r-jpQSj3sE\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><br \/>\n<!--more--><\/p>\n<p>&nbsp;<\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u043a \u0441 iButton (touch memory) \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043d\u0430 \u0430\u0440\u0434\u0443\u0438\u043d\u043e,<\/p>\n<p>\u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043d\u0430 63 \u043a\u043b\u044e\u0447\u0430 \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0435\u0440\u0438 \u0441\u0435\u0440\u0432\u043e\u043f\u0440\u0438\u0432\u043e\u0434\u043e\u043c.<\/p>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0435\u0439 DALLAS DS1990, \u043d\u0430 \u0442\u0430\u043a\u0438\u0445, \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e 1-Bus \u0438\u043b\u0438 1-Ware \u0438\u043b\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438.<\/p>\n<p>&nbsp;<\/p>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<p><a href=\"https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-135\" src=\"https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb-300x267.jpg\" alt=\"Untitled Sketch_bb\" width=\"300\" height=\"267\" srcset=\"https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb-300x267.jpg 300w, https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb-1024x910.jpg 1024w, https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb-624x555.jpg 624w, https:\/\/arduinolab.pw\/wp-content\/uploads\/2015\/12\/Untitled-Sketch_bb.jpg 1374w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u043a\u043e\u0434<\/p><div class=\"yxpwi6ab4962be2210\" ><hr>\n<!-- Yandex.RTB R-A-1793072-2 -->\n<div id=\"yandex_rtb_R-A-1793072-2\"><\/div>\n<script>window.yaContextCb.push(()=>{\n  Ya.Context.AdvManager.render({\n    renderTo: 'yandex_rtb_R-A-1793072-2',\n    blockId: 'R-A-1793072-2'\n  })\n})<\/script><\/div><style type=\"text\/css\">\r\n@media screen and (min-width: 1201px) {\r\n.yxpwi6ab4962be2210 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 993px) and (max-width: 1200px) {\r\n.yxpwi6ab4962be2210 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 769px) and (max-width: 992px) {\r\n.yxpwi6ab4962be2210 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (min-width: 768px) and (max-width: 768px) {\r\n.yxpwi6ab4962be2210 {\r\ndisplay: block;\r\n}\r\n}\r\n@media screen and (max-width: 767px) {\r\n.yxpwi6ab4962be2210 {\r\ndisplay: block;\r\n}\r\n}\r\n<\/style>\r\n\n<pre>#include\u00a0&lt;<span style=\"color: #cc6600;\">Servo<\/span>.h&gt;\r\n#include\u00a0&lt;<span style=\"color: #cc6600;\">EEPROM<\/span>.h&gt;\r\n#include\u00a0&lt;<span style=\"color: #cc6600;\">OneWire<\/span>.h&gt;\r\n\u00a0\r\n<span style=\"color: #cc6600;\">const<\/span> <span style=\"color: #cc6600;\">byte<\/span> saveKey = 2; <span style=\"color: #7e7e7e;\">\/\/ \u0432\u0445\u043e\u0434 \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u0438\u044f<\/span>\r\n<span style=\"color: #cc6600;\">const<\/span> <span style=\"color: #cc6600;\">byte<\/span> statusLed = 13; \r\n<span style=\"color: #cc6600;\">const<\/span> <span style=\"color: #cc6600;\">byte<\/span> doorPin = 3; \r\n\r\n<span style=\"color: #cc6600;\">OneWire<\/span>  ds(8); \r\n<span style=\"color: #cc6600;\">Servo<\/span> servo;\r\n\r\n<span style=\"color: #cc6600;\">byte<\/span> addr[8];\r\n<span style=\"color: #cc6600;\">byte<\/span> allKey; <span style=\"color: #7e7e7e;\">\/\/ \u0432\u0441\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0439<\/span>\r\n\u00a0\r\n<span style=\"color: #7e7e7e;\">\/\/\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u00a0\u0441\u0432\u0435\u0440\u044f\u0435\u0442\u00a0\u0434\u0432\u0430\u00a0\u0430\u0434\u0440\u0435\u0441\u0430\u00a0(\u0434\u0432\u0430\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0430)<\/span>\r\n<span style=\"color: #cc6600;\">boolean<\/span> addrTest(<span style=\"color: #cc6600;\">byte<\/span> addr1[8], <span style=\"color: #cc6600;\">byte<\/span> addr2[8]){\r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">for<\/span>(<span style=\"color: #cc6600;\">int<\/span> i = 0; i &lt; 8; i++) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (addr1[i] != addr2[i]) <span style=\"color: #cc6600;\">return<\/span> 0;\r\n\u00a0\u00a0}\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">return<\/span> 1;\r\n}\r\n\r\n<span style=\"color: #cc6600;\">void<\/span> error(){\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">while<\/span>(1){\r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">digitalWrite<\/span>(statusLed, !<span style=\"color: #cc6600;\">digitalRead<\/span>(statusLed));\r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">delay<\/span>(300);\r\n\u00a0\u00a0}\r\n}<span style=\"color: #7e7e7e;\">\/\/<\/span>\r\n\r\n<span style=\"color: #cc6600;\">boolean<\/span> keyTest(){ <span style=\"color: #7e7e7e;\">\/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 1 \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u0435\u0441\u0442\u044c \u0432 \u0435\u0435\u043f\u0440\u043e\u043c<\/span>\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">byte<\/span> addrTemp[8];  \r\n\u00a0\u00a0<span style=\"color: #cc6600;\">for<\/span> (<span style=\"color: #cc6600;\">int<\/span> i = 0; i &lt; allKey; i++){  \r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">for<\/span>(<span style=\"color: #cc6600;\">int<\/span> y = 0; y &lt; 8; y++) addrTemp[y] = <span style=\"color: #cc6600;\">EEPROM<\/span>.<span style=\"color: #cc6600;\">read<\/span>((i &lt;&lt; 3) + y );   \r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (addrTest(addrTemp, addr)) <span style=\"color: #cc6600;\">return<\/span> 1;\r\n\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">return<\/span> 0;\r\n}<span style=\"color: #7e7e7e;\">\/\/<\/span>\r\n\r\n<span style=\"color: #cc6600;\">void<\/span> save(){ <span style=\"color: #7e7e7e;\">\/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u043b\u044e\u0447 \u0432 \u0435\u0435\u043f\u0440\u043e\u043c<\/span>\r\n\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">digitalWrite<\/span>(statusLed, <span style=\"color: #006699;\">HIGH<\/span>);    \r\n\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (allKey &gt;= 63) error(); <span style=\"color: #7e7e7e;\">\/\/ \u0435\u0441\u043b\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0435\u0442 <\/span>\r\n\u00a0\r\n\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">while<\/span> (!ds.<span style=\"color: #cc6600;\">search<\/span>(addr)) ds.<span style=\"color: #cc6600;\">reset_search<\/span>(); <span style=\"color: #7e7e7e;\">\/\/ \u0436\u0434\u0435\u043c \u043a\u043b\u044e\u0447 <\/span>\r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> ( <span style=\"color: #cc6600;\">OneWire<\/span>::<span style=\"color: #cc6600;\">crc8<\/span>( addr, 7) != addr[7]) error();\r\n\u00a0\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (keyTest()) error(); <span style=\"color: #7e7e7e;\">\/\/ \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u043b\u0438 \u043a\u043b\u044e\u0447 \u0432 \u0435\u0435\u043f\u0440\u043e\u043c.<\/span>\r\n\u00a0\u00a0\r\n\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">for<\/span>(<span style=\"color: #cc6600;\">int<\/span> i = 0; i &lt; 8; i++) <span style=\"color: #cc6600;\">EEPROM<\/span>.<span style=\"color: #cc6600;\">write<\/span>((allKey &lt;&lt; 3) + i, addr[i]);    \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0allKey++;\u00a0<span style=\"color: #7e7e7e;\">\/\/ \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043b\u044e\u0447\u0435\u0439 <\/span>\r\n\u00a0\u00a0\u00a0<span style=\"color: #cc6600;\">EEPROM<\/span>.<span style=\"color: #cc6600;\">write<\/span>(511, allKey); \r\n\u00a0\u00a0\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">digitalWrite<\/span>(statusLed, <span style=\"color: #006699;\">LOW<\/span>);\r\n}<span style=\"color: #7e7e7e;\">\/\/<\/span>\r\n\r\n<span style=\"color: #cc6600;\">void<\/span> openDoor(){ <span style=\"color: #7e7e7e;\">\/\/ \u0442\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c\\\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434 \u0438\u043b\u0438 \u043a\u0440\u0443\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0443<\/span>\r\n<span style=\"color: #7e7e7e;\">\/*\u00a0\u00a0\u00a0\u00a0digitalWrite(doorPin,\u00a0HIGH);<\/span>\r\n<span style=\"color: #7e7e7e;\">\u00a0\u00a0\u00a0\u00a0delay(5000);<\/span>\r\n<span style=\"color: #7e7e7e;\">\u00a0\u00a0\u00a0\u00a0digitalWrite(doorPin,\u00a0LOW);\u00a0\u00a0<\/span>\r\n<span style=\"color: #7e7e7e;\">*\/<\/span>\r\n\u00a0\u00a0servo.<span style=\"color: #cc6600;\">write<\/span>(150);\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">delay<\/span>(3000); <span style=\"color: #7e7e7e;\">\/\/ \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043b\u0438\u043d\u0435\u0435 <\/span>\r\n\u00a0\u00a0servo.<span style=\"color: #cc6600;\">write<\/span>(0);\r\n}<span style=\"color: #7e7e7e;\">\/\/<\/span>\r\n\r\n<span style=\"color: #cc6600;\">void<\/span> <span style=\"color: #cc6600;\"><b>setup<\/b><\/span>() { \r\n<span style=\"color: #7e7e7e;\">\/\/\u00a0\u00a0Serial.begin(9600);<\/span>\r\n<span style=\"color: #7e7e7e;\">\/\/\u00a0\u00a0pinMode(doorPin,\u00a0OUTPUT);<\/span>\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">pinMode<\/span>(statusLed, <span style=\"color: #006699;\">OUTPUT<\/span>);  \r\n\u00a0\u00a0<span style=\"color: #cc6600;\">pinMode<\/span>(saveKey, <span style=\"color: #006699;\">INPUT_PULLUP<\/span>);\r\n\u00a0\u00a0servo.<span style=\"color: #cc6600;\">attach<\/span>(doorPin);\r\n\u00a0\u00a0servo.<span style=\"color: #cc6600;\">write<\/span>(0);\r\n\u00a0\u00a0<span style=\"color: #7e7e7e;\">\/\/ \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u044e\u0447\u0438 \u043d\u0430 0 <\/span>\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (!<span style=\"color: #cc6600;\">digitalRead<\/span>(saveKey)) <span style=\"color: #cc6600;\">EEPROM<\/span>.<span style=\"color: #cc6600;\">write<\/span>(511, 0);\r\n\u00a0\u00a0\r\n\u00a0\u00a0allKey\u00a0=\u00a0<span style=\"color: #cc6600;\">EEPROM<\/span>.<span style=\"color: #cc6600;\">read<\/span>(511); <span style=\"color: #7e7e7e;\">\/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439<\/span>\r\n}\r\n\r\n<span style=\"color: #cc6600;\">void<\/span> <span style=\"color: #cc6600;\"><b>loop<\/b><\/span>(){    \r\n\u00a0\u00a0ds.<span style=\"color: #cc6600;\">reset_search<\/span>();\r\n\u00a0\u00a0\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (!<span style=\"color: #cc6600;\">digitalRead<\/span>(saveKey)) save(); <span style=\"color: #7e7e7e;\">\/\/ \u0435\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443  <\/span>\r\n\u00a0\u00a0<span style=\"color: #7e7e7e;\">\/\/ \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0448\u0438\u043d\u0443, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 loop<\/span>\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (!ds.<span style=\"color: #cc6600;\">search<\/span>(addr)) <span style=\"color: #cc6600;\">return<\/span>; \r\n\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> ( <span style=\"color: #cc6600;\">OneWire<\/span>::<span style=\"color: #cc6600;\">crc8<\/span>( addr, 7) != addr[7]) <span style=\"color: #cc6600;\">return<\/span>;  \r\n\u00a0\u00a0\r\n\u00a0\u00a0<span style=\"color: #cc6600;\">if<\/span> (keyTest()) openDoor(); <span style=\"color: #7e7e7e;\">\/\/ \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u043b\u0438 \u043a\u043b\u044e\u0447 \u0432 \u0435\u0435\u043f\u0440\u043e\u043c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0434\u0432\u0435\u0440\u044c<\/span>\r\n\u00a0\u00a0\r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[57,2],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","hentry","category-arduino","category-project"],"_links":{"self":[{"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":0,"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"wp:attachment":[{"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arduinolab.pw\/index.php\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}