Управление релющками через инет

qwerty
Offline
Зарегистрирован: 02.04.2015

Ребята помогите новичок, имееться плата ардуино уно и шилд w5100. Задача: Управлять релюшками через интернет. Имеется скетч полученый из видео урока. Заливается отлично но не работает на IP ардуино пинг не идет. В чем загвоздка. В програмировании очень слаб но стараюсь наверстать. Заранее благодарю. 

whats app +79282901835

Почта qwerty2679@yandex.ru

_______________________________________________________

/* Дмитрий Осипов. http://www.youtube.com/user/d36073?feature=watch
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays. 
 ----- 
 Что нам понадобится:
 1). ENC28J60 Ethernet LAN / Network Module. 
 
 2). Библиотека / Library - "ethercard".
 EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.
 или берем здесь. https://yadi.sk/d/R57sVoglbhTRN
 3).
 Скачать sketch.
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
 
 -----------------------
 
 Подключаем Pins "ENC28J60 Module" к Arduino Uno.
 VCC -   3.3V
 GND -    GND
 SCK - Pin 13
 SO  - Pin 12
 SI  - Pin 11
 CS  - Pin 10 Можно выбрать любой. 
 
 Подключаем  "ENC28J60 Module" например к Router, загружаем sketch, открываем страницу
 в браузере например 192.168.1.222 , на странице можем включать выключат Pins / реле. 
 ---------
 Примечание: "ENC28J60 Module" питается от 3.3 volts, и потребляет по документации 250mA.
 Arduino Uno Максимальный допустимый ток, получаемый с 3V3 контакта — 50 мА.
 У меня прекрасно всё работает с 3V3 контакта Arduino Uno.
 На всякий случай, предупреждаю.
 ------------------
 */
 
#include <EtherCard.h>  // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN
 
// MAC Address должен быть уникальным в вашей сети. Можно менять. 
static byte mymac[] = { 
  0x5A,0x5A,0x5A,0x5A,0x5A,0x5A };
 
// ip статический / постоянный Address нашей Web страницы.  
static byte myip[] = { 
  192,168,1,222 };
 
// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[900];
BufferFiller bfill;
 
// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
  2,3,4,5,6,7,8,9};
 
// Массив для фиксации изменений.
boolean PinStatus[] = {
  1,2,3,4,5,6,7,8};
 
//-------------
 
const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";
 
const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";
 
const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";
 
//------------
 
// Делаем функцию для оформления нашей Web страницы. 
void homePage()
{
  bfill.emit_p(PSTR("$F"
    "<title>ArduinoPIN Webserver</title>" 
    "ArduinoPIN 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"
    "ArduinoPIN 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"  
    "ArduinoPIN 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
    "ArduinoPIN 4: <a href=\"?ArduinoPIN4=$F\">$F</a><br />"
    "ArduinoPIN 5: <a href=\"?ArduinoPIN5=$F\">$F</a><br />"
    "ArduinoPIN 6: <a href=\"?ArduinoPIN6=$F\">$F</a><br />"
    "ArduinoPIN 7: <a href=\"?ArduinoPIN7=$F\">$F</a><br />"   
    "ArduinoPIN 8: <a href=\"?ArduinoPIN8=$F\">$F</a>"),   
 
  http_OK,
  PinStatus[1]?PSTR("off"):PSTR("on"),
  PinStatus[1]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[2]?PSTR("off"):PSTR("on"),
  PinStatus[2]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[3]?PSTR("off"):PSTR("on"),
  PinStatus[3]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[4]?PSTR("off"):PSTR("on"),
  PinStatus[4]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[5]?PSTR("off"):PSTR("on"),
  PinStatus[5]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[6]?PSTR("off"):PSTR("on"),
  PinStatus[6]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[7]?PSTR("off"):PSTR("on"),
  PinStatus[7]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[8]?PSTR("off"):PSTR("on"),
  PinStatus[8]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
}
 
//------------------------
 
 
 
void setup()
{
  Serial.begin(9600);
 
  // По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
  // and change it to: Меняем (CS-pin) на 10.
  // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).
 
  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);
 
  if (!ether.dhcpSetup()); 
 
  // Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router. 
  // Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться. 
  // Нам придётся каждый раз узнавать кой адрес у нашей страницы.
  ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router. 
 
  // Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
  // Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222". 
  ether.staticSetup(myip);
 
  ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес. 
  //-----
 
  for(int i = 0; i <= 8; i++)
  {
    pinMode(LedPins[i],OUTPUT); 
    PinStatus[i]=false;
  }  
}
 
// --------------------------------------
 
void loop()
{
 
  delay(1); // Дёргаем микроконтроллер.
 
  word len = ether.packetReceive();   // check for ethernet packet / проверить ethernet пакеты.
  word pos = ether.packetLoop(len);   // check for tcp packet / проверить TCP пакеты.
 
  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {
 
      data += 5;
      if (data[0] == ' ') {       
        homePage(); // Return home page Если обнаружено изменения на станице, запускаем функцию.
        for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i],PinStatus[i+1]);
      }
 
      // "16" = количество символов "?ArduinoPIN1=on ".
      else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[3] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[4] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=on ", data, 16) == 0) {
        PinStatus[5] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=on ", data, 16) == 0) {
        PinStatus[6] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=on ", data, 16) == 0) {
        PinStatus[7] = true;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=on ", data, 16) == 0) {
        PinStatus[8] = true;        
        bfill.emit_p(http_Found);
      }
 
 
      //------------------------------------------------------  
 
 
      else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[2] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[3] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[4] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=off ", data, 17) == 0) {
        PinStatus[5] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=off ", data, 17) == 0) {
        PinStatus[6] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=off ", data, 17) == 0) {
        PinStatus[7] = false;        
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=off ", data, 17) == 0) {
        PinStatus[8] = false;        
        bfill.emit_p(http_Found);
      }
 
 
      //---------------------------
 
 
      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}
 
 

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Вы на w5100 заливаете скетч от ENC28J60?

qwerty
Offline
Зарегистрирован: 02.04.2015

Я позже понял. Нашел вчера скетч "Управление релюшками" залил подкорректировал под себя. Управлять получается добавил еще пару кнопок под скетч. Кому нужно скидывают скетч под w5100/ 

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
byte ip[] = { 192, 168, 0, 2 }; // IP адрес (В броузере вводим 192.168.0.2)
EthernetServer server(80);

int numPins = 4;
int pins[] = { 2, 3, 4, 5 };    // Пины для реле
int pinState[] = {0, 0, 0, 0};  // Состояние пинов

void setup()
{
  // Изначально выключаем все реле
  for (int i = 0; i < numPins; i++)
  {
    pinMode(pins[i], OUTPUT);
    digitalWrite(pins[i], 1);
  }
  
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  EthernetClient client = server.available();
  if (client)
  {
    // Проверяем подключен ли клиент к серверу
    while (client.connected())
    {
      // Проверяем идет ли запрос к серверу
      int dataCount = client.available();
      if (dataCount > 0)
      {
        // Считываем данные передаваемые серверу с клиента (броузера)
        for (int i = 0; i < dataCount; i++)
        {
          char ch = client.read();
          // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P'
          if (i == 0 && ch != 'P')
            break;
          if (ch == '\n' && i < dataCount - 1)
          {
             // Находим строку, в которой содержатся передаваемые данные
             char chNext = client.read();
             // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле)
             if (chNext == 'r')
             {
               // Выключаем все реле
               pinState[0] = 0;
               pinState[1] = 0;
               pinState[2] = 0;
               pinState[3] = 0;
               
               // Считываем первый номер реле, который нужно включить
               char relayNum = client.read();
               pinState[relayNum-'0'] = 1;
               Serial.write(relayNum);
               
               // Считываем вспомогательную информацию (=on&)
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
                
               // Пока есть данные об остальных реле, считываем и заносим в массив pinState
               while (relayNum != -1)
               {
                  relayNum = client.read();
                  relayNum = client.read();
                  pinState[relayNum-'0'] = 1;
                  Serial.write(relayNum);
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
               }
             } else
             {
                // Если не было передано данных, то выключаем все реле
                pinState[0] = 0;
                pinState[1] = 0;
                pinState[2] = 0;
                pinState[3] = 0;
             }
          }
        }
      }
      
      // В соответствие с переданными данными включаем реле
      for (int i = 0; i < 4; i++)
      {
         digitalWrite(pins[i], !pinState[i]);
      }
      
      // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();
      client.println("<html>");
      client.println("<head>");
      client.println("<title>Zelectro. Relay + Ethernet shield.</title>");
      client.println("</head>");
      client.println("<body>");
      client.println("<h3>Zelectro. Relay + Ethernet shield.</h3>");
      client.println("<form method='post'>");
      client.print("<div>Relay 1 <input type='checkbox' ");
      if (pinState[0] == 1)
        client.print("checked");
      client.println(" name='r0'></div>");
      client.print("<div>Relay 2 <input type='checkbox' ");
      if (pinState[1] == 1)
        client.print("checked");
      client.println(" name='r1'></div>");
      client.print("<div>Relay 3 <input type='checkbox' ");
      if (pinState[2] == 1)
        client.print("checked");
      client.println(" name='r2'></div>");
      client.print("<div>Relay 4 <input type='checkbox' ");
      if (pinState[3] == 1)
        client.print("checked");
      client.println(" name='r3'></div>");
      client.println("<input type='submit' value='Refresh'>");
      client.println("</form>");
      client.println("</body>");
      client.println("</html>");
      client.stop(); 
    }
  }
}

Парни подскажите пожалуйста кто в теме как добавить туда вывод температуры на экран. Копирую код с другого скетча он не заливается. Заранее спасибо. 

komsadiman
Offline
Зарегистрирован: 13.05.2016

Всем привет, а как включить пин ссылкой из браузера? так не получается http://192.168.3.222/r3=on

inspiritus
Онлайн
Зарегистрирован: 17.12.2012
komsadiman
Offline
Зарегистрирован: 13.05.2016

Спасибо за ответ, но этот скрипт рабочий, мне надо включить пин через ссылку в этом скрипте, помоги пожалуйста.

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
byte ip[] = { 192, 168, 0, 2 }; // IP адрес (В броузере вводим 192.168.0.2)
EthernetServer server(80);

int numPins = 4;
int pins[] = { 2, 3, 4, 5 };    // Пины для реле
int pinState[] = {0, 0, 0, 0};  // Состояние пинов

void setup()
{
  // Изначально выключаем все реле
  for (int i = 0; i < numPins; i++)
  {
    pinMode(pins[i], OUTPUT);
    digitalWrite(pins[i], 1);
  }
  
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  EthernetClient client = server.available();
  if (client)
  {
    // Проверяем подключен ли клиент к серверу
    while (client.connected())
    {
      // Проверяем идет ли запрос к серверу
      int dataCount = client.available();
      if (dataCount > 0)
      {
        // Считываем данные передаваемые серверу с клиента (броузера)
        for (int i = 0; i < dataCount; i++)
        {
          char ch = client.read();
          // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P'
          if (i == 0 && ch != 'P')
            break;
          if (ch == '\n' && i < dataCount - 1)
          {
             // Находим строку, в которой содержатся передаваемые данные
             char chNext = client.read();
             // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле)
             if (chNext == 'r')
             {
               // Выключаем все реле
               pinState[0] = 0;
               pinState[1] = 0;
               pinState[2] = 0;
               pinState[3] = 0;
               
               // Считываем первый номер реле, который нужно включить
               char relayNum = client.read();
               pinState[relayNum-'0'] = 1;
               Serial.write(relayNum);
               
               // Считываем вспомогательную информацию (=on&)
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
                
               // Пока есть данные об остальных реле, считываем и заносим в массив pinState
               while (relayNum != -1)
               {
                  relayNum = client.read();
                  relayNum = client.read();
                  pinState[relayNum-'0'] = 1;
                  Serial.write(relayNum);
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
               }
             } else
             {
                // Если не было передано данных, то выключаем все реле
                pinState[0] = 0;
                pinState[1] = 0;
                pinState[2] = 0;
                pinState[3] = 0;
             }
          }
        }
      }
      
      // В соответствие с переданными данными включаем реле
      for (int i = 0; i < 4; i++)
      {
         digitalWrite(pins[i], !pinState[i]);
      }
      
      // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();
      client.println("<html>");
      client.println("<head>");
      client.println("<title>Zelectro. Relay + Ethernet shield.</title>");
      client.println("</head>");
      client.println("<body>");
      client.println("<h3>Zelectro. Relay + Ethernet shield.</h3>");
      client.println("<form method='post'>");
      client.print("<div>Relay 1 <input type='checkbox' ");
      if (pinState[0] == 1)
        client.print("checked");
      client.println(" name='r0'></div>");
      client.print("<div>Relay 2 <input type='checkbox' ");
      if (pinState[1] == 1)
        client.print("checked");
      client.println(" name='r1'></div>");
      client.print("<div>Relay 3 <input type='checkbox' ");
      if (pinState[2] == 1)
        client.print("checked");
      client.println(" name='r2'></div>");
      client.print("<div>Relay 4 <input type='checkbox' ");
      if (pinState[3] == 1)
        client.print("checked");
      client.println(" name='r3'></div>");
      client.println("<input type='submit' value='Refresh'>");
      client.println("</form>");
      client.println("</body>");
      client.println("</html>");
      client.stop(); 
    }
  }
}

 

valera678
Offline
Зарегистрирован: 04.11.2016

komsadiman пишет:

 мне надо включить пин через ссылку в этом скрипте, помоги пожалуйста.

 

Какой пин,какую ссылку? По-твоему здесь телепаты сидят?)

komsadiman
Offline
Зарегистрирован: 13.05.2016

Мне надо включить 8 пин по ссылки, например переходишь по ссылки http://192.168.3.222/pins8 и включается реле, а сейчас нужно зайти на страницу нажать 8 пин и нажать выполнить. 

Lamalgol
Offline
Зарегистрирован: 01.12.2017

Подскажите как вы добавили еще реле к этому проекту, я когда 5 реле добавляю там происходит какая то ошибка и каждое реле по отдельности только включается, а все вместе не могут, помогите пожалуйста!

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Lamalgol пишет:

Подскажите как вы добавили еще реле к этому проекту, я когда 5 реле добавляю там происходит какая то ошибка и каждое реле по отдельности только включается, а все вместе не могут, помогите пожалуйста!

Легко!!!Все обмотки реле параллельно и все релюшки "вкл" и "выкл ".Вуаля!То что вам надо!

Lamalgol
Offline
Зарегистрирован: 01.12.2017

Нет как изменить в коде и добавить в веб интерфейс еще реле, что бы было больше, а не 4?

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Lamalgol пишет:

я когда 5 реле добавляю там происходит какая то ошибка и каждое реле по отдельности только включается

А покажите как вы добавляете 5-ое реле.

Lamalgol
Offline
Зарегистрирован: 01.12.2017

Показать в данный момент не смогу, но я просто добавляю везде 5 строчки, типо сначала добавляю 5 пин потом то что реле выключено и тд, но там потом на сайте нельзя включать все сразу, а только пока одно активно другое не включишь

 

Lamalgol
Offline
Зарегистрирован: 01.12.2017

Штирлиц пишет:

Lamalgol пишет:

я когда 5 реле добавляю там происходит какая то ошибка и каждое реле по отдельности только включается

А покажите как вы добавляете 5-ое реле.

Я и хочу спросить как тут еще добавить релюх

b707
Offline
Зарегистрирован: 26.05.2017

Lamalgol пишет:

Показать в данный момент не смогу, но я просто добавляю везде 5 строчки, типо сначала добавляю 5 пин потом то что реле выключено и тд, но там потом на сайте нельзя включать все сразу, а только пока одно активно другое не включишь

 

так причем здесь добавление пятого, шестого... десятого реле? Программа написана так, что при включении одного реле выключаются остальные. Если вам надо, чтобы реле включались в любом порядке и комбинации - придется модифицировать логику.

Кстати, если будете редактировать - не советую использовать этот код - написано очень криво. Лучше пишите свой.

Lamalgol
Offline
Зарегистрирован: 01.12.2017

b707 пишет:

Lamalgol пишет:

Показать в данный момент не смогу, но я просто добавляю везде 5 строчки, типо сначала добавляю 5 пин потом то что реле выключено и тд, но там потом на сайте нельзя включать все сразу, а только пока одно активно другое не включишь

 

так причем здесь добавление пятого, шестого... десятого реле? Программа написана так, что при включении одного реле выключаются остальные. Если вам надо, чтобы реле включались в любом порядке и комбинации - придется модифицировать логику.

Кстати, если будете редактировать - не советую использовать этот код - написано очень криво. Лучше пишите свой.

Да нет же, я когда использую 4 реле могу их все сразу включать и выключать и пораздельно, а с 5 ни как

b707
Offline
Зарегистрирован: 26.05.2017

Lamalgol пишет:

Да нет же, я когда использую 4 реле могу их все сразу включать и выключать и пораздельно, а с 5 ни как

Можете, но только в случае включения всех реле одной командой. А по отдельности - никак.

В коде нет никаких ограничений на добавление пятого, шестого... и тд реле - если у вас не работает, ищите ошибку, видимо не везде добавили пятую строчку. Я ж говорю, код кривой, при добавлении пятого реле "пятую строчку" приходится добавлять не в одно и не в два места.

Lamalgol
Offline
Зарегистрирован: 01.12.2017

b707 пишет:

Lamalgol пишет:

Да нет же, я когда использую 4 реле могу их все сразу включать и выключать и пораздельно, а с 5 ни как

Можете, но только в случае включения всех реле одной командой. А по отдельности - никак.

В коде нет никаких ограничений на добавление пятого, шестого... и тд реле - если у вас не работает, ищите ошибку, видимо не везде добавили пятую строчку. Я ж говорю, код кривой, при добавлении пятого реле "пятую строчку" приходится добавлять не в одно и не в два места.

Хорошо, я все понял спасибо, а можете посоветовать мне код, в котором удобно добавлять реле и что бы каждое реле можно было отдельно включать и выключать?

b707
Offline
Зарегистрирован: 26.05.2017

Lamalgol пишет:

а можете посоветовать мне код, в котором удобно добавлять реле и что бы каждое реле можно было отдельно включать и выключать?

Что значит "посоветовать"? :) Откуда ж я его возьму да под вашу задачу?

Могу вам подсказать, что в текущем коде не так - блоа анализа команды (строки 47 - 87) написан очень плохо, проверок входящей строки минимум. Правильной командой считается любая строка, начинающаяся с "r" и в которой встречаются цифры каждые 6 символов. Чтобы пояснить ненадежность такого "анализа" - вот пример. Для включения реле 1,2 и 4 автор предполагает команду "r1=on&r2=on&r4=on&". Однако если вместо нее послать строчку "r1PAPA+2MAMA=4LOVE" - все сработает точно так же, можете проверить.

Чтобы удобнее работать с кучей реле и не добавлять дополнительные строчки под каждое - их надо использовать в виде массива. Автор исходного скетча, видимо, так и собирался делать (или где-то скрпипастил код) - у него пины и сами реле уже организованы в массивы. Только почему-то в коде он эти массивы не использует и адресует каждое реле отдельно, вместо того, чтобы, например, обнулять все реле разом в цикле.

 

Lamalgol
Offline
Зарегистрирован: 01.12.2017

b707 пишет:

Lamalgol пишет:

а можете посоветовать мне код, в котором удобно добавлять реле и что бы каждое реле можно было отдельно включать и выключать?

Что значит "посоветовать"? :) Откуда ж я его возьму да под вашу задачу?

Могу вам подсказать, что в текущем коде не так - блоа анализа команды (строки 47 - 87) написан очень плохо, проверок входящей строки минимум. Правильной командой считается любая строка, начинающаяся с "r" и в которой встречаются цифры каждые 6 символов. Чтобы пояснить ненадежность такого "анализа" - вот пример. Для включения реле 1,2 и 4 автор предполагает команду "r1=on&r2=on&r4=on&". Однако если вместо нее послать строчку "r1PAPA+2MAMA=4LOVE" - все сработает точно так же, можете проверить.

Чтобы удобнее работать с кучей реле и не добавлять дополнительные строчки под каждое - их надо использовать в виде массива. Автор исходного скетча, видимо, так и собирался делать (или где-то скрпипастил код) - у него пины и сами реле уже организованы в массивы. Только почему-то в коде он эти массивы не использует и адресует каждое реле отдельно, вместо того, чтобы, например, обнулять все реле разом в цикле.

 

а вы не можете помочь с написание такого скетча, в качестве рабочего примера для меня?

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

b707 пишет:

Lamalgol пишет:

а можете посоветовать мне код, в котором удобно добавлять реле и что бы каждое реле можно было отдельно включать и выключать?

Что значит "посоветовать"? :)

 

Совет:

0)Или включи моск для поиска готовых решений   ,

1)или " Все обмотки реле параллельно".

2)Или учись .

ТретьЕГО не дано!