Реле + сеть= проблема

AlexTop
Offline
Зарегистрирован: 12.11.2016

Доброго времени суток, 

Долго пробовал сделать сам, но в итоге не получилось, так как руки из всем известного места. Что я пытался сделать:

По http (post) запросу arduino должно включить реле и по таймауту выключить.

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

#include "EtherCard.h"  // Подключаем скачанную библиотеку https://drive.google.com/open?id=0B-DqglGyhA7eN3lMbTN0WlUzdE0

static byte mymac[] = {0x5A,0x5A,0x5A,0x5A,0x5A,0x5A }; // MAC Address должен быть уникальным в локальной сети.

byte Ethernet::buffer[1200];BufferFiller bfill; // Буфер, чем больше данных на Web странице, тем больше требуется буфера.

int LedPins[] = {2,3,4,5,6,7,8,9}; // Массив задействованных номеров Pins Arduino, для управления например 8 реле.

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"
    "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"
    "<meta name='viewport' content='width=device-width, initial-scale=1.0'>"
    "<title>Управление Ардуино УНО</title>"
    "<h1 style='color:#0ea6f2'>Управление Ардуино</h1>"
    "<font size='3em'>"
    "<font style='display:none;'>Светодиод 1: <a href='?ArduinoPIN1=$F'>$F</a></font>"  
    "Светодиод 1: <a href='?ArduinoPIN2=$F'>$F</a><br /><br />"  

    "</font>"
    "<h4 style='color:#666666'>Управление Arduino Uno через Ethernet порт HanRun HR911105A 15/10</h4>"),   

  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>"));
}

//-------------

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()); 

  ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам автоматический присвоил Router
  //-----

  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 <= 8; i++)digitalWrite(LedPins[i],PinStatus[i+1]);
      }

      // "16" = количество символов "?ArduinoPIN1=on ".
      
// ВОТ ТУТ У МЕНЯ ВСЕ ОСТАНОВИЛОСЬ :(
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true; 
        delay(500);
        PinStatus[2] = false;       
        bfill.emit_p(http_Found);
      }

      

//------------- 

      // "17" = количество символов "?ArduinoPIN1=off ".

     // else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
     //   PinStatus[2] = false;        
     //   bfill.emit_p(http_Found);
     // }


//-------------

      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

После строки 91 и строки 97 поставльте вывод в сериал переменной data и посмотрите на неё. Сразу станет понятно что происходит. И почему все новички так луюят с завязанными глазами работать?

AlexTop
Offline
Зарегистрирован: 12.11.2016

ЕвгенийП пишет:

После строки 91 и строки 97 поставльте вывод в сериал переменной data и посмотрите на неё. Сразу станет понятно что происходит. И почему все новички так луюят с завязанными глазами работать?

Я не силен в программирование, по сути только начал, а руководство мне мозг сносит (

если не затруднит, приведите пример кода

osele
osele аватар
Offline
Зарегистрирован: 12.11.2016

ЕвгенийП пишет:

После строки 91 и строки 97 поставльте вывод в сериал переменной data и посмотрите на неё. Сразу станет понятно что происходит. И почему все новички так луюят с завязанными глазами работать?

Уважаемый гений блин ну напиши по русски 

милионы нихрена не понимают а как хобби занимаемся. ЧЁ НУЖНО после 91 и 97 написать по нерусски?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Помогу немножко гению отбиться:

osele  вам сюда : http://arduino.ru/Reference/Serial

osele
osele аватар
Offline
Зарегистрирован: 12.11.2016

trembo пишет:

Помогу немножко гению отбиться:

osele  вам сюда : http://arduino.ru/Reference/Serial

человек по русски пишет не силён и мозг закипает  мне тоже интересно что туда нужно вписать 

вы шарестые парни ,ну и наверно девчёнки, ЧЁ трудно помочь по братски????

bwn
Offline
Зарегистрирован: 25.08.2014

В Сериал надо напринтовать переменную и узреть на экране ее значение. Так понятно?

"И почему все новички так луюят с завязанными глазами работать?" А особенно отрадно, пофигисты взрывники. (С) Шаов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AlexTop пишет:

если не затруднит, приведите пример кода

Serial.print("data="); Serial.println(data);

AlexTop пишет:

Я не силен в программирование, по сути только начал, а руководство мне мозг сносит (

Так может тогда лучше "по одёжке"? Писать простые вещи, которые понятны, постепенно усложняя, а не скачивать сразу кусок кода за сотню строк в котором ничего не понимаете? Так со временем будете всё понимать. А без понимания. Вам и печать врядли поможет.