{"id":242477,"date":"2014-11-07T11:41:02","date_gmt":"2014-11-07T07:41:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=242477"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=242477","title":{"rendered":"<span class=\"post_title\">\u0421\u043b\u0435\u0436\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u043e\u0439 \u0432 WoT c \u043f\u043e\u043c\u043e\u0449\u044c\u044e Arduino<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b7d\/e21\/f99\/b7de21f99e8545058226be151bfd3607.png\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0441\u0432\u043e\u044e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0443\u044e \u043c\u043e\u043b\u043e\u0434\u043e\u0441\u0442\u044c, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0441 \u0436\u0435\u043b\u0435\u0437\u043a\u0430\u043c\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a PIC&#8217;\u0430\u043a\u043c \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u043d\u0433\u0443 \u043d\u0430 \u0430\u0441\u043c\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u043b\u0435\u043d\u044c (\u0442\u0440\u0430\u0432\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0442\u0441\u043a\u0438\u0435 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043e \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0431\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441 \u0448\u0438\u043d\u043e\u0439 i2c \u0438 HD44780), \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0435\u0437 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u0443\u0437\u043d\u0430\u043b \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Arduino. <\/p>\n<p>  \u0411\u0435\u0433\u043b\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0437\u044b\u0432\u043e\u0432. \u041d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434 \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u043d\u0430\u0431\u043e\u0440. \u041c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0431\u044b\u0432\u0448\u0435\u043c\u0443 \u0438\u043d\u0436\u0435\u043d\u0435\u0433\u0440\u0443 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0449\u0438\u043a\u0443 \u0441 \u043f\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043a\u043e\u043c\u0438\u043b\u044c\u0444\u043e, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u0442\u0430\u043d\u043a\u0430\u0445 (\u043a\u0430\u044e\u0441\u044c, \u0433\u0440\u0435\u0448\u0435\u043d&#8230;). \u042d\u0442\u043e \u043c\u043e\u0439 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u00abHello, Habr!\u00bb \u0438 \u00abHello, World!\u00bb.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430 \u2014 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 Wargaming \u0438 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c \u044e\u0437\u0435\u0440\u0430 \u043e \u0435\u0433\u043e \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0443\u0441\u043f\u0435\u0445\u0430\u0445 (\u0438\u043b\u0438 \u043d\u0430 \u043e\u0431\u043e\u0440\u043e\u0442). \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Wargaming API, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0434\u0435\u044f \u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0443\u043f\u0435\u0440\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u0437\u043c\u0435\u0440 RAM (8\u043a\u0431 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u0441\u0435\u0442\u044c \u0448\u0438\u043b\u0434\u0430 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 W5100.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u0437\u044f\u043b \u0442\u043e \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u2014 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 1602. \u041d\u043e \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u0443\u0436 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e, \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 74HC595. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0434\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0442\u0430\u0440\u0443\u044e \u0438\u0441\u0442\u0438\u043d\u0443, \u0447\u0442\u043e \u0432\u0441\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043e \u0434\u043e \u043d\u0430\u0441: <a href=\"http:\/\/playground.arduino.cc\/Main\/LiquidCrystal\">link<\/a>. \u0414\u0438\u0441\u043f\u043b\u0435\u0439 \u0441\u0430\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0448\u0438\u043d\u0443 SPI \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u0438\u043d \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0443 \u043c\u0435\u043d\u044f 3-\u0439). \u0414\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 LiquidCrystal \u043d\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u0437 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u044b\u0448\u0435. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u044b\u0448\u0435 \u0430\u0432\u0442\u043e\u0440 \u0437\u0430\u0431\u044b\u043b \u043f\u043e\u0441\u0430\u0434\u0438\u0442\u044c r\/w \u043f\u0438\u043d \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u043d\u0430 \u0437\u0435\u043c\u043b\u044e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439. \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043c\u043e\u044f \u0431\u0440\u0435\u0434\u043e\u0432\u0430\u044f \u0434\u043e\u0441\u043a\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Breadboard<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/8b8\/079\/2fe\/8b80792fed4f46d798e5c8f47e91919a.png\"\/><\/div>\n<\/div>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 SD \u043a\u0430\u0440\u0442\u0443, \u043d\u043e \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u043a\u0430\u043a \u0438 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0435\u0442\u0447<\/b><\/p>\n<div class=\"spoiler_text\">#include &lt;SPI.h&gt;<br \/>  #include &lt;Ethernet.h&gt;<br \/>  #include &lt;LiquidCrystal.h&gt;<\/p>\n<p>  #define ETHERNET_PIN 10<br \/>  #define LCD_PIN 3<\/p>\n<p>  \/\/\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u0432 \u0441\u0435\u0442\u0438<br \/>  IPAddress ip(192, 168, 1, 40);<\/p>\n<p>  \/\/MAC<br \/>  byte mac[] = { 0x42, 0x42, 0x42, 0x42, 0x42, 0x42 };<\/p>\n<p>  \/\/\u0421\u0435\u0440\u0432\u0430\u043a, \u0437\u0430\u0440\u0435\u0433\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u0448\u043d\u0438\u043a, \u043d\u043e\u043c\u0435\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f<br \/>  const char server[] = \u00abapi.worldoftanks.ru\u00bb;<br \/>  const char application_id[] = \u00abdemo\u00bb;<br \/>  const char account_id[] = \u00ab4848655\u00bb;<\/p>\n<p>  \/\/\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043c\u0438\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445<br \/>  const unsigned int UpdateDelta = 20000;<br \/>  \/\/\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f <br \/>  unsigned int UpdateTime = 0;<\/p>\n<p>  \/\/\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442<br \/>  EthernetClient client;<br \/>  \/\/LCD<br \/>  LiquidCrystal lcd(LCD_PIN);<\/p>\n<p>  byte newChar1[8] = {<br \/>   B00100,<br \/>   B01110,<br \/>   B10101,<br \/>   B00100,<br \/>   B00100,<br \/>   B00100,<br \/>   B00100,<br \/>   B00000<br \/>  };<\/p>\n<p>  byte newChar2[8] = {<br \/>   B00100,<br \/>   B00100,<br \/>   B00100,<br \/>   B00100,<br \/>   B10101,<br \/>   B01110,<br \/>   B00100,<br \/>   B00000<br \/>  };<\/p>\n<p>  \/\/\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<br \/>  enum ReadStatusEnum {<br \/>   WiteTag,<br \/>   ReadTag,<br \/>   WiteValue<br \/>  } ReadStatus = WiteTag;<\/p>\n<p>  String nickname = \u00abUnknown Noob\u00bb;<br \/>  long WG_rating, pre_WG_rating, buf_WG_rating = 0;<br \/>  unsigned long battles, pre_battles, buf_battles = 0;<br \/>  unsigned long wins, pre_wins, buf_wins = 0;<br \/>  unsigned long damage, pre_damage, buf_damage = 0;<br \/>  unsigned long frags, pre_frags, buf_frags = 0;<\/p>\n<p>  String LCD_strings[6];<\/p>\n<p>  \/\/\u0418\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0438 \u0442\u0435\u0433\u043e\u0432<br \/>  void FilterData(String SectionTagName, String TagName, String Value)<br \/>  {<br \/>   if (SectionTagName.compareTo(\u00abstatistics\u00bb) == 0) {<br \/>   if (TagName.compareTo(\u00abnickname\u00bb) == 0)<br \/>   nickname = Value;<br \/>   if (TagName.compareTo(\u00abglobal_rating\u00bb) == 0)<br \/>   buf_WG_rating = Value.toInt();<br \/>   }<br \/>   if (SectionTagName.compareTo(\u00aball\u00bb) == 0) {<br \/>   if (TagName.compareTo(\u00abbattles\u00bb) == 0)<br \/>   buf_battles = Value.toInt();<br \/>   if (TagName.compareTo(\u00abwins\u00bb) == 0)<br \/>   buf_wins = Value.toInt();<br \/>   if (TagName.compareTo(\u00abdamage_dealt\u00bb) == 0)<br \/>   buf_damage = Value.toInt();<br \/>   if (TagName.compareTo(\u00abfrags\u00bb) == 0)<br \/>   buf_frags = Value.toInt();<br \/>   }<br \/>   }<\/p>\n<p>  void readServer() <br \/>  {<br \/>   \/\/\u041a\u043e\u043d\u0435\u043a\u0442\u0438\u043c\u0441\u044f<br \/>   if (client.connect(server, 80)) {<br \/>   client.print(\u00abGET \/wot\/account\/info\/?application_id=\u00bb);<br \/>   client.print(application_id);<br \/>   client.print(&quot;&#038;account_id=&quot;);<br \/>   client.print(account_id);<br \/>   client.println(&quot; HTTP\/1.1&quot;);<br \/>   client.print(\u00abHost: \u201e);<br \/>   client.println(server);<br \/>   client.println(\u201cUser-Agent: arduino-ethernet\u00bb);<br \/>   client.println(\u00abAccept: text\/html\u00bb);<br \/>   client.println(\u00abConnection: close\u00bb);<br \/>   client.println();<\/p>\n<p>   \/\/\u0416\u0434\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438<br \/>   bool Wait = true;<br \/>   unsigned int Time = 0;<br \/>   while (Wait)<br \/>   {<br \/>   Wait = !client.available();<br \/>   if (Time &gt; 200) Wait = false;<br \/>   Time++;<br \/>   delay(10);<br \/>   }<\/p>\n<p>   char symbol = &#8216; &#8216;;<br \/>   char pre_symbol = &#8216; &#8216;;<br \/>   String TagName = &quot;&quot;;<br \/>   String SectionTagName = &quot;&quot;;<br \/>   String Value = &quot;&quot;;<br \/>   String PreSectionTagName = &quot;&quot;;<\/p>\n<p>   ReadStatus = WiteTag;<\/p>\n<p>  \/\/\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0434\u043e \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430<br \/>   while (client.available()) {<br \/>   \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u0431\u0430\u0439\u0442 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430<br \/>   pre_symbol = symbol;<br \/>   symbol = client.read();<br \/>   \/\/Serial.print(symbol);<br \/>   if ( ReadStatus == WiteTag &#038;&#038; pre_symbol == &#8216;&quot;&#8217; &#038;&#038; symbol != &#8216;:&#8217;) {<br \/>   \/\/\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u0435\u0433\u0430<br \/>   ReadStatus = ReadTag;<br \/>   TagName = &quot;&quot;;<br \/>   }<\/p>\n<p>  if (ReadStatus == ReadTag) {<br \/>   if(symbol != &#8216;&quot;&#8217;) {<br \/>   \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u0438\u043c\u044f \u0442\u0435\u0433\u0430<br \/>   TagName += symbol;<br \/>   }<br \/>   else<br \/>   {<br \/>   \/\/\u041d\u0430\u0439\u0434\u0435\u043d \u043a\u043e\u043d\u0435\u0446 \u0442\u0435\u0433\u0430<br \/>   Value = &quot;&quot;;<br \/>   ReadStatus = WiteValue;<br \/>   }<br \/>   }<\/p>\n<p>   if (ReadStatus == WiteValue){<br \/>   if(symbol == &#8216;,&#8217; || symbol == &#8216;}&#8217;){<br \/>   \/\/\u041a\u043e\u043d\u0435\u0446 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<br \/>   ReadStatus = WiteTag;<br \/>   FilterData(SectionTagName, TagName, Value);<br \/>   if (symbol == &#8216;}&#8217;) {<br \/>   \/\/\u041a\u043e\u043d\u0435\u0446 \u0441\u0435\u043a\u0446\u0438\u0438<br \/>   SectionTagName = PreSectionTagName;<br \/>   }<br \/>   }<br \/>   else {<br \/>   if (symbol == &#8216;{&#8216;) {<br \/>   \/\/\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0435\u043a\u0446\u0438\u0438<br \/>   PreSectionTagName = SectionTagName;<br \/>   SectionTagName = TagName;<br \/>   ReadStatus = WiteTag;<br \/>   }<br \/>   else {<br \/>   \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>   if (symbol != &#8216;:&#8217; &#038;&#038; symbol != &#8216;&quot;&#8217; &#038;&#038; symbol != &#8216; &#8216;)<br \/>   Value += symbol;<br \/>   }<br \/>   }<br \/>   }<br \/>   }<br \/>   } <br \/>   \/\/\u0421\u0442\u043e\u043f\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442<br \/>   client.flush();<br \/>   client.stop();<br \/>  }<\/p>\n<p>  void generateSrings()<br \/>  {<br \/>   if(pre_battles == 0 || battles == 0) {<br \/>   \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<br \/>   pre_WG_rating = buf_WG_rating;<br \/>   WG_rating = buf_WG_rating;<br \/>   pre_battles = buf_battles;<br \/>   battles = buf_battles;<br \/>   pre_wins = buf_wins;<br \/>   wins = buf_wins;<br \/>   pre_damage = buf_damage;<br \/>   damage = buf_damage;<br \/>   pre_frags = buf_frags;<br \/>   frags = buf_frags;<br \/>   }<\/p>\n<p>   if (buf_battles &gt; battles)<br \/>   {<br \/>   \/\/\u0411\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044b<br \/>   pre_WG_rating = WG_rating;<br \/>   WG_rating = buf_WG_rating;<br \/>   pre_battles = battles;<br \/>   battles = buf_battles;<br \/>   pre_wins = wins;<br \/>   wins = buf_wins;<br \/>   pre_damage = damage;<br \/>   damage = buf_damage;<br \/>   pre_frags = frags;<br \/>   frags = buf_frags;<br \/>   }<\/p>\n<p>   if (pre_battles == battles)<br \/>   {<br \/>   LCD_strings[0] = nickname + &quot; &quot;;<br \/>   LCD_strings[0] = LCD_strings[0].substring(0,16);<\/p>\n<p>   LCD_strings[1] = \u00abBtl:\u00bb + String(battles) + &quot; \u2014 &quot;;<br \/>   LCD_strings[1] = LCD_strings[1].substring(0,16);<\/p>\n<p>   float wins_percent = (float)wins\/(float)battles*100.0;<br \/>   LCD_strings[2] = \u00abWins:\u00bb + String(wins_percent) + &quot; \u2014 &quot;;<br \/>   LCD_strings[2] = LCD_strings[2].substring(0,16);<\/p>\n<p>   float avrage_damage = (float)damage\/(float)battles;<br \/>   String D = String(avrage_damage);<br \/>   D = D.substring(0,D.length()-1);<br \/>   LCD_strings[3] = \u00abDmg:\u00bb + D + &quot; \u2014 &quot;;<br \/>   LCD_strings[3] = LCD_strings[3].substring(0,16);<\/p>\n<p>   float avrage_frags = (float)frags\/(float)battles;<br \/>   LCD_strings[4] = \u00abFrag:\u00bb + String(avrage_frags) + &quot; \u2014 &quot;;<br \/>   LCD_strings[4] = LCD_strings[4].substring(0,16);<\/p>\n<p>  LCD_strings[5] = &quot; WG:&quot; + String(WG_rating) + &quot; \u2014 &quot;;<br \/>   LCD_strings[5] = LCD_strings[5].substring(0,16);<br \/>   }<br \/>   else<br \/>   {<br \/>   LCD_strings[0] = nickname + &quot; &quot;;<br \/>   LCD_strings[0] = LCD_strings[0].substring(0,16);<\/p>\n<p>   LCD_strings[1] = \u00abBtl:\u00bb + String(battles) + &quot; &quot; + char(0x01) + String(battles-pre_battles) +&quot; &quot;;<br \/>   LCD_strings[1] = LCD_strings[1].substring(0,16);<\/p>\n<p>   float wins_percent = (float)wins\/(float)battles*100.0;<br \/>   float pre_wins_percent = (float)pre_wins\/(float)pre_battles*100.0;<br \/>   char Delta = char(0x01);<br \/>   if (wins_percent &lt; pre_wins_percent) Delta = char(0x02);<br \/>   LCD_strings[2] = \u00abWins:\u00bb + String(wins_percent) + &quot; &quot; + Delta + String(abs(wins_percent \u2014 pre_wins_percent)) + &quot; &quot;;<br \/>   LCD_strings[2] = LCD_strings[2].substring(0,16);<\/p>\n<p>   float avrage_damage = (float)damage\/(float)battles;<br \/>   float pre_avrage_damage = (float)pre_damage\/(float)pre_battles;<br \/>   Delta = char(0x01);<br \/>   if (avrage_damage &lt; pre_avrage_damage) Delta = char(0x02);<br \/>   String D = String(avrage_damage);<br \/>   D = D.substring(0,D.length()-1);<br \/>   LCD_strings[3] = \u00abDmg:\u00bb + D + &quot; &quot; + Delta + String(abs(avrage_damage \u2014 pre_avrage_damage)) + &quot; &quot;;<br \/>   LCD_strings[3] = LCD_strings[3].substring(0,16);<\/p>\n<p>   float avrage_frags = (float)frags\/(float)battles;<br \/>   float pre_avrage_frags = (float)pre_frags\/(float)pre_battles;<br \/>   Delta = char(0x01);<br \/>   if (avrage_frags &lt; pre_avrage_frags) Delta = char(0x02);<br \/>   LCD_strings[4] = \u00abFrag:\u00bb + String(avrage_frags) + &quot; &quot; + Delta + String(abs(avrage_frags \u2014 pre_avrage_frags)) + &quot; &quot;;<br \/>   LCD_strings[4] = LCD_strings[4].substring(0,16);<\/p>\n<p>  Delta = char(0x01);<br \/>   if (WG_rating &lt; pre_WG_rating) Delta = char(0x02);<br \/>   LCD_strings[5] = &quot; WG:&quot; + String(WG_rating) + &quot; &quot; + Delta + String(abs(WG_rating \u2014 pre_WG_rating)) + &quot; &quot;;<br \/>   LCD_strings[5] = LCD_strings[5].substring(0,16);<br \/>   }<br \/>  }<\/p>\n<p>  void PrintMSG(int LCD_tick, int ScrNum)<br \/>  {<br \/>   if (LCD_tick &lt;= 16)<br \/>   {<br \/>   lcd.setCursor(0, 0);<br \/>   lcd.print(LCD_strings[ScrNum*2 + 0].substring(0, LCD_tick) + &quot;_ &quot;);<br \/>   }<br \/>   else<br \/>   {<br \/>   lcd.setCursor(0, 1);<br \/>   lcd.print(LCD_strings[ScrNum*2 + 1].substring(0, LCD_tick-16) + &quot;_ &quot;);<br \/>   }<br \/>  }<\/p>\n<p>  unsigned int LCD_Screen = 0;<br \/>  unsigned int LCD_tick = 0;<br \/>  void UpdateLCD(unsigned int UpdateTime)<br \/>  {<br \/>   if (UpdateTime &gt; UpdateDelta\/3*2)<br \/>   {<br \/>   \/\/\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043a\u0440\u0430\u043d<br \/>   if(LCD_Screen != 0) {<br \/>   LCD_Screen = 0;<br \/>   LCD_tick = 0;<br \/>   }<br \/>   PrintMSG( LCD_tick, LCD_Screen);<br \/>   }<br \/>   else<br \/>   {<br \/>   if (UpdateTime &gt; UpdateDelta\/3)<br \/>   {<br \/>   \/\/\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0440\u0430\u043d<br \/>   if(LCD_Screen != 1) {<br \/>   LCD_Screen = 1;<br \/>   LCD_tick = 0;<br \/>   }<br \/>   PrintMSG( LCD_tick, LCD_Screen);<br \/>   }<br \/>   else<br \/>   {<br \/>   \/\/\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u043a\u0440\u0430\u043d<br \/>   if(LCD_Screen != 2) {<br \/>   LCD_Screen = 2;<br \/>   LCD_tick = 0;<br \/>   }<br \/>   PrintMSG( LCD_tick, LCD_Screen);<br \/>   }<br \/>   }<\/p>\n<p>   LCD_tick++;<br \/>   if (LCD_tick &gt; 32) LCD_tick = 32;<br \/>  }<\/p>\n<p>  void setup() <br \/>  {<br \/>   \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f<br \/>   lcd.createChar(1, newChar1);<br \/>   lcd.createChar(2, newChar2);<br \/>   lcd.begin(16, 2);<\/p>\n<p>   \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430<br \/>   \/\/Serial.begin(57600);<br \/>   pinMode(ETHERNET_PIN, OUTPUT);<br \/>   digitalWrite(ETHERNET_PIN, LOW);<br \/>   delay(1000);<br \/>   Ethernet.begin(mac, ip);<br \/>   delay(1000);<br \/>   digitalWrite(ETHERNET_PIN, HIGH);<br \/>  }<\/p>\n<p>  void loop() <br \/>  {<br \/>   \/\/\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0443<br \/>   if (UpdateTime == 0) {<br \/>   UpdateTime = UpdateDelta; <br \/>   digitalWrite(ETHERNET_PIN, LOW);<br \/>   readServer();<br \/>   digitalWrite(ETHERNET_PIN, HIGH);<br \/>   generateSrings();<br \/>   }<\/p>\n<p>  UpdateLCD(UpdateTime);<br \/>   delay(100);<br \/>   UpdateTime -= 100;<br \/>  }  <\/div>\n<\/div>\n<p>  \u0410 \u0432\u043e\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Wargaming \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438:<\/p>\n<p>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/-yDMSDDlr0c?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  <s>\u041d\u0443 \u0438 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043b\u043e\u0436\u043a\u0430 \u0434\u0435\u0433\u0442\u044f \u2014 \u043f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0434\u0435\u0432\u0430\u0439\u0441 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u043e \u0434\u0435\u0431\u0430\u0433\u0443 \u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0445\u043e\u0434\u0438\u0442, \u0430 \u0432\u043e\u0442 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435\u0442. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e \u0438\u0437-\u0437\u0430 \u043c\u043e\u0435\u0433\u043e \u043a\u0440\u0438\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430.<\/s><br \/>  Upd. \u0423\u0436\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b \u0441\u043a\u0435\u0442\u0447 \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/242477\/\"> http:\/\/habrahabr.ru\/post\/242477\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b7d\/e21\/f99\/b7de21f99e8545058226be151bfd3607.png\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0441\u0432\u043e\u044e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0443\u044e \u043c\u043e\u043b\u043e\u0434\u043e\u0441\u0442\u044c, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0441 \u0436\u0435\u043b\u0435\u0437\u043a\u0430\u043c\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a PIC&#8217;\u0430\u043a\u043c \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u043d\u0433\u0443 \u043d\u0430 \u0430\u0441\u043c\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u043b\u0435\u043d\u044c (\u0442\u0440\u0430\u0432\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0442\u0441\u043a\u0438\u0435 \u0432\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043e \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0431\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441 \u0448\u0438\u043d\u043e\u0439 i2c \u0438 HD44780), \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0435\u0437 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u0443\u0437\u043d\u0430\u043b \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Arduino. <\/p>\n<p>  \u0411\u0435\u0433\u043b\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0437\u044b\u0432\u043e\u0432. \u041d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u0437\u0430\u0434 \u0431\u044b\u043b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u043d\u0430\u0431\u043e\u0440. \u041c\u0438\u0433\u0430\u0442\u044c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u043c \u0431\u044b\u0432\u0448\u0435\u043c\u0443 \u0438\u043d\u0436\u0435\u043d\u0435\u0433\u0440\u0443 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0449\u0438\u043a\u0443 \u0441 \u043f\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043a\u043e\u043c\u0438\u043b\u044c\u0444\u043e, \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 \u0442\u0430\u043d\u043a\u0430\u0445 (\u043a\u0430\u044e\u0441\u044c, \u0433\u0440\u0435\u0448\u0435\u043d&#8230;). \u042d\u0442\u043e \u043c\u043e\u0439 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u00abHello, Habr!\u00bb \u0438 \u00abHello, World!\u00bb.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-242477","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/242477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=242477"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/242477\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=242477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=242477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=242477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}