Web + реле

Тема в разделе "Arduino & Shields", создана пользователем jks123, 18 мар 2014.

  1. jks123

    jks123 Нерд

    увы знаний не хватает, но спасибо. попробую конечно как то в кучу слепить
     
  2. jks123

    jks123 Нерд

    Код (Text):
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int DPin3 = 3;
    int DPin4 = 4;
    int DPin5 = 5;
    int DPin6 = 6;
    int DPin7 = 7;
    int DPin8 = 8;
    int DPin9 = 9;
    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,

    static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(DPin3, OUTPUT);
      pinMode(DPin4, OUTPUT);
      pinMode(DPin5, OUTPUT);
      pinMode(DPin6, OUTPUT);
      pinMode(DPin7, OUTPUT);
      pinMode(DPin8, OUTPUT);
      pinMode(DPin9, OUTPUT);
     
    }

    void loop()
    {
      char* params;
      if (params = e.serviceRequest())
      {
        e.print("<H1>JKS home</H1>");
        if (strcmp(params, "?led1=on") == 0)
        {
          if (!digitalRead(DPin4))
          {
            digitalWrite(DPin4, HIGH);
          }
        }
        else if (strcmp(params, "?led2=on") == 0)
        {
          if (!digitalRead(DPin5))
          {
            digitalWrite(DPin5, HIGH);
          }
        }
        else if (strcmp(params, "?led3=on") == 0)
        {
          if (!digitalRead(DPin6))
          {
            digitalWrite(DPin6, HIGH);
          }
        }
        else if (strcmp(params, "?led4=on") == 0)
        {
          if (!digitalRead(DPin7))
          {
            digitalWrite(DPin7, HIGH);
          }
        }
        else if (strcmp(params, "?led5=on") == 0)
        {
          if (!digitalRead(DPin8))
          {
            digitalWrite(DPin8, HIGH);
          }
        }
        else if (strcmp(params, "?led6=on") == 0)
        {
          if (!digitalRead(DPin9))
          {
            digitalWrite(DPin9, HIGH);
          }
        }
        else if (strcmp(params, "?led7=on") == 0)
        {
          if (!digitalRead(DPin3))
          {
            digitalWrite(DPin3, HIGH);
          }
        }
        else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler
        {
          if (digitalRead(DPin4))
          {
            digitalWrite(DPin4, LOW);
          }
        }
        else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin5))
          {
            digitalWrite(DPin5, LOW);
          }
        }
        else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin6))
          {
            digitalWrite(DPin6, LOW);
          }
        }
        else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin7))
          {
            digitalWrite(DPin7, LOW);
          }
        }
        else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin8))
          {
            digitalWrite(DPin8, LOW);
          }
        }
        else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin9))
          {
            digitalWrite(DPin9, LOW);
          }
        }
        else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin3))
          {
            digitalWrite(DPin3, LOW);
          }
        }
        if (digitalRead(DPin4))
        {
          e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>");
        }
        else
        {
          e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>");
        }
        if (digitalRead(DPin5))
        {
          e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>");
        }
        if (digitalRead(DPin6))
        {
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }
       
        e.respond();
        delay(50);
      }
       
    }
     
     
  3. jks123

    jks123 Нерд

    рабочий на 7 выходов, 3 веб кнопки, остальное только через адресс. Хелп, как добавить кнопок? при добавлении в таком виде то нано виснет.
     
  4. Alex19

    Alex19 Гуру

    Извините, немного выбыл из темы, последние 2 дня, покупал осциллограф + др у друга. Сейчас изучаю его.

    Попробую глянуть, но с первого взгляда, вроде норм. Даже как-то странно.
     
  5. jks123

    jks123 Нерд

    кстати на кану думал с китая осцилограф с генератором частоты в одной коробке взять, но в связи с калапсом приостановил закупки.
     
  6. Alex19

    Alex19 Гуру

    Попробуйте этот код, если он заработает, можно будет строить предположения

    Код (Text):
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int DPin3 = 3;
    int DPin4 = 4;
    int DPin5 = 5;
    int DPin6 = 6;
    int DPin7 = 7;
    int DPin8 = 8;
    int DPin9 = 9;
    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,

    static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(DPin3, OUTPUT);
      pinMode(DPin4, OUTPUT);
      pinMode(DPin5, OUTPUT);
      pinMode(DPin6, OUTPUT);
      pinMode(DPin7, OUTPUT);
      pinMode(DPin8, OUTPUT);
      pinMode(DPin9, OUTPUT);
    }

    void loop()
    {
      char* params;
      if (params = e.serviceRequest())
      {
        e.print("<H1>JKS home</H1>");
        if (strcmp(params, "?led1=on") == 0)
        {
          if (!digitalRead(DPin4))
          {
            digitalWrite(DPin4, HIGH);
          }
        }
        else if (strcmp(params, "?led2=on") == 0)
        {
          if (!digitalRead(DPin5))
          {
            digitalWrite(DPin5, HIGH);
          }
        }
        else if (strcmp(params, "?led3=on") == 0)
        {
          if (!digitalRead(DPin6))
          {
            digitalWrite(DPin6, HIGH);
          }
        }
        else if (strcmp(params, "?led4=on") == 0)
        {
          if (!digitalRead(DPin7))
          {
            digitalWrite(DPin7, HIGH);
          }
        }
        else if (strcmp(params, "?led5=on") == 0)
        {
          if (!digitalRead(DPin8))
          {
            digitalWrite(DPin8, HIGH);
          }
        }
        else if (strcmp(params, "?led6=on") == 0)
        {
          if (!digitalRead(DPin9))
          {
            digitalWrite(DPin9, HIGH);
          }
        }
        else if (strcmp(params, "?led7=on") == 0)
        {
          if (!digitalRead(DPin3))
          {
            digitalWrite(DPin3, HIGH);
          }
        }
        else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler
        {
          if (digitalRead(DPin4))
          {
            digitalWrite(DPin4, LOW);
          }
        }
        else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin5))
          {
            digitalWrite(DPin5, LOW);
          }
        }
        else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin6))
          {
            digitalWrite(DPin6, LOW);
          }
        }
        else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin7))
          {
            digitalWrite(DPin7, LOW);
          }
        }
        else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin8))
          {
            digitalWrite(DPin8, LOW);
          }
        }
        else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin9))
          {
            digitalWrite(DPin9, LOW);
          }
        }
        else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          if (digitalRead(DPin3))
          {
            digitalWrite(DPin3, LOW);
          }
        }
     
        if (digitalRead(DPin4))
        {
          e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>");
        }
        else
        {
          e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>");
        }
        if (digitalRead(DPin5))
        {
          e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>");
        }
        if (digitalRead(DPin6))
        {
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }
     
        if (digitalRead(DPin6))
        {
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }
     
        if (digitalRead(DPin6))
        {
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }

        e.respond();
        delay(100);
      }
    }
    Не боитесь, вдруг бракованный или повредят при транспортировке

    UPD.
    Это Вы о чем?
     
    Последнее редактирование: 23 мар 2014
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Давайте будем подобные вопросы обсуждать в личке. Не надо засорять Амперку политикой.
     
  8. jks123

    jks123 Нерд

    такая же ситуация с Вашим кодом, в вебке только три кнопки нажать низя, через адрес можно включить 5 выходов и потом полностью висит
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Вставляйте в код вывод отладочных сообщений и анализируйте, в каком именно месте происходит зависание.
     
    Alex19 нравится это.
  10. jks123

    jks123 Нерд

    пардон, эт кукисы -кнопок нет вообще. включение через адрес
     
  11. jks123

    jks123 Нерд

    Сори за тупость, а как?
     
  12. Alex19

    Alex19 Гуру

    Сочувствую у самого много друзей и знакомых там.

    Будем исправятся.

    Очень странно. Все что было добавлено к Вашему последнему коду, это всего лишь кнопки. При этом я сознательно добавлял с пином 6, как проверенный. Даже не знаю, за что ухватится.

    Да наверно только так, можно вставлять Serial.println("0"), Serial.println("1") и т.д.

    Еще как вариант.
    Может быть дело в нестабильной библиотеки. Как вариант, попробовать поискать другие, просто ума не приложу, что может быть еще.
     
  13. Alex19

    Alex19 Гуру

    Сейчас сделаю
     
  14. jks123

    jks123 Нерд

    ладно, попробую библиотеки новее
     
  15. Alex19

    Alex19 Гуру

    Код (Text):
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int DPin3 = 3;
    int DPin4 = 4;
    int DPin5 = 5;
    int DPin6 = 6;
    int DPin7 = 7;
    int DPin8 = 8;
    int DPin9 = 9;
    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,

    static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(DPin3, OUTPUT);
      pinMode(DPin4, OUTPUT);
      pinMode(DPin5, OUTPUT);
      pinMode(DPin6, OUTPUT);
      pinMode(DPin7, OUTPUT);
      pinMode(DPin8, OUTPUT);
      pinMode(DPin9, OUTPUT);
     
      Serial.begin(9600);
    }

    void loop()
    {
      char* params;
      if (params = e.serviceRequest())
      {
        e.print("<H1>JKS home</H1>");
        Serial.println("1");
        if (strcmp(params, "?led1=on") == 0)
        {
          Serial.println("2");
          if (!digitalRead(DPin4))
          {
            digitalWrite(DPin4, HIGH);
            Serial.println("3");
          }
        }
        else if (strcmp(params, "?led2=on") == 0)
        {
          Serial.println("4");
          if (!digitalRead(DPin5))
          {
            Serial.println("5");
            digitalWrite(DPin5, HIGH);
          }
        }
        else if (strcmp(params, "?led3=on") == 0)
        {
          Serial.println("6");
          if (!digitalRead(DPin6))
          {
            Serial.println("7");
            digitalWrite(DPin6, HIGH);
          }
        }
        else if (strcmp(params, "?led4=on") == 0)
        {
          Serial.println("8");
          if (!digitalRead(DPin7))
          {
            Serial.println("9");
            digitalWrite(DPin7, HIGH);
          }
        }
        else if (strcmp(params, "?led5=on") == 0)
        {
          Serial.println("10");
          if (!digitalRead(DPin8))
          {
            Serial.println("11");
            digitalWrite(DPin8, HIGH);
          }
        }
        else if (strcmp(params, "?led6=on") == 0)
        {
          Serial.println("12");
          if (!digitalRead(DPin9))
          {
            Serial.println("13");
            digitalWrite(DPin9, HIGH);
          }
        }
        else if (strcmp(params, "?led7=on") == 0)
        {
          Serial.println("14");
          if (!digitalRead(DPin3))
          {
            Serial.println("15");
            digitalWrite(DPin3, HIGH);
          }
        }
        else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler
        {
          Serial.println("16");
          if (digitalRead(DPin4))
          {
            Serial.println("17");
            digitalWrite(DPin4, LOW);
          }
        }
        else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("18");
          if (digitalRead(DPin5))
          {
            Serial.println("19");
            digitalWrite(DPin5, LOW);
          }
        }
        else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("20");
          if (digitalRead(DPin6))
          {
            Serial.println("21");
            digitalWrite(DPin6, LOW);
          }
        }
        else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("22");
          if (digitalRead(DPin7))
          {
            Serial.println("23");
            digitalWrite(DPin7, LOW);
          }
        }
        else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("24");
          if (digitalRead(DPin8))
          {
            Serial.println("25");
            digitalWrite(DPin8, LOW);
          }
        }
        else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("26");
          if (digitalRead(DPin9))
          {
            Serial.println("27");
            digitalWrite(DPin9, LOW);
          }
        }
        else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler
        {
          Serial.println("28");
          if (digitalRead(DPin3))
          {
            Serial.println("29");
            digitalWrite(DPin3, LOW);
          }
        }
     
     
        if (digitalRead(DPin4))
        {
          Serial.println("30");
          e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>");
        }
        else
        {
          Serial.println("31");
          e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>");
        }
        if (digitalRead(DPin5))
        {
          Serial.println("32");
          e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>");
        }
        else
        {
          Serial.println("33");
          e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>");
        }
        if (digitalRead(DPin6))
        {
          Serial.println("34");
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          Serial.println("35");
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }
     
        if (digitalRead(DPin6))
        {
          Serial.println("36");
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          Serial.println("37");
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }
     
        if (digitalRead(DPin6))
        {
          Serial.println("38");
          e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>");
        }
        else
        {
          Serial.println("39");
          e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>");
        }

        e.respond();
        Serial.println("40");
        delay(100);
      }
     
      Serial.println("41");
      delay(40);
    }
     
  16. Alex19

    Alex19 Гуру

    Заливаете код, открываете монитор порта. Открываете страницу в браузере.
    И смотрите, что приходит.

    Если ардуина повиснет, то передача прекратится.
    По цифрам, можно увидеть последнюю операцию, которая прошла успешно.

    Это общая схема отладки, но ступил, спасибо Megakoteyka напомнил.
    Включается сериал Serial.begin(9600); в setup и потом после каждой операции прописывается Serial.println
    с цифрой к примеру, для понимания, где происходит остановка.

    UPD. В Serial.println можно так же вставлять переменные, константы и тем самым проверять их значения. Не удобный, но все же способ отладки.

    Сам ищу нормальный как в C#. Но, все что нашел, только под AVR на котом построены почти все ардуины, но там знаний пока не хватает.
     
    Последнее редактирование: 23 мар 2014
  17. Megakoteyka

    Megakoteyka Оракул Модератор

    Можно выводить разбираемую строку и вставлять в ветки условий вывод строчек с описанием сработавшего условия.
    Просто "0" и "1" не особо информативно, лучше "что-то случилось".

    Есть классический подход к отладке программ с использованием условной компиляции.
    В начале программы определяем метку DEBUG
    Код (Text):
    #define DEBUG
    В "интересных" местах кода вставляем
    Код (Text):
    #if(DEBUG)
    Serial.println("программа сделала то-то и то-то");
    #endif
    Теперь мы можем просматривать лог работы программы в мониторе последовательного порта.
    Если закомментируем объявление метки DEBUG, компилятор пропустит весь код, находящийся между #if(DEBUG) и #endif и мы получим версию программы без логов.
     
  18. jks123

    jks123 Нерд

    41 безконечно. в браузере пусто
     
  19. jks123

    jks123 Нерд

    может контроллер косячный?!
     
  20. Alex19

    Alex19 Гуру

    Открываете страницу в браузере, я не правильно выразился.
    Сделайте запрос, попробуйте включить какой-то пин