#1 2017-09-02 20:39:37

sqafarov
Учасник
Зареєстрований: 2017-09-02
Повідомлень: 5

WEB сервер

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

Помогите пожалуйста с кодом, я пытаюсь собрать систему для удаленного управления воротами и шлагбаумами. А во всех примерах которые я нарыл в инете кнопки в веб морде нажимаются и не "отщелкиваются". А мне нужно чтобы было как при нажатии на обыкновенную кнопку (нажал включилась - отпустил отключилась). Ниже привожу код, заранее оговорюсь он не мой. Также не могу задать айпишник, пишу одно а по видимому DHCP меняет его на свой. Из оборудования вот это: Arduino Nano v3, EthernetShield ENC28J60, релюшки обычные ардуиновские, библиотека для EtherCard. Слезно прошу вашей помощи.

/* 
 -----------------------
 Ïîäêëþ÷àºìî ï³íè "ENC28J60 Module" äî Arduino Uno.
 VCC -   3.3V
 GND -    GND
 SCK - Pin 13
 SO  - Pin 12
 SI  - Pin 11
 CS  - Pin 10 Ìîæíà âèáðàòè áóäü-ÿêèé. 
  ------------------
 */

#include <EtherCard.h>  // Ïîäêëþ÷àºì ñêà÷àíó á³áë³îòåêó. https://yadi.sk/d/R57sVoglbhTRN

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // присваиваем mac адрес
static byte myip[] = { 192, 168, 1, 222 };                    // ip в локальной сети
static byte subnet[] = { 255, 255, 255, 0 };  // присваиваем маску подсети
static byte gateway[] = { 192, 168, 1, 1 };   // присваиваем адрес шлюза по умолчанию
static byte hisport[] = { 80 }; // присваиваем порт для подключения


// Áóôåð, ÷èì á³ëüøå äàíèõ íà Web ñòîð³íö³, òèì á³ëüøå ïîòð³áíå çíà÷åííÿ áóôåðà.
byte Ethernet::buffer[1000];
BufferFiller bfill;

// Ìàñèâ çàä³ÿíèõ íîìåð³â ï³í³â Arduino, äëÿ êåðóâàííÿ 4 ðåëå.
int LedPins[] = {
  2,3,4,5};

// Ìàñèâ äëÿ ô³êñàö³¿ çì³í.
boolean PinStatus[] = {
  1,2,3,4};

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

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

void homePage()
{
  bfill.emit_p(PSTR("$F"
    "<title>.:: TS Group ::.</title>" 
    "<br>"
    "<h1><p align = center>BARRIER Control Center</p></h1>"
    "<br>"
    "<h2><p align = center>Open the barrier</p></h2>"
    "<p align = center><button><h1><a href=\"?ArduinoPIN1=$F\">$F</a></h1></button></p>"
    "<br>"
    "<h2><p align = center>Stop the barrier</p></h2>"
    "<p align = center><button><h1><a href=\"?ArduinoPIN2=$F\">$F</a></h1></button></p>"  
    "<br>"
    "<h2><p align = center>Close the barrier</p></h2>"
    "<p align = center><button><h1><a href=\"?ArduinoPIN3=$F\">$F</a></h1></button></p>"
    "<br>"
    "<h2><p align = center>Auto</p></h2>"
    "<p align = center><button><h1><a href=\"?ArduinoPIN4=$F\">$F</a></h1></button></p>"),   

  http_OK,
  PinStatus[1]?PSTR("off"):PSTR("on"),
  PinStatus[1]?PSTR("<font color=\"green\"><b>OPENING</b></font>"):PSTR("<font color=\"red\">STAY</font>"),
  PinStatus[2]?PSTR("off"):PSTR("on"),
  PinStatus[2]?PSTR("<font color=\"green\"><b>STOPING</b></font>"):PSTR("<font color=\"red\">STAY</font>"),
  PinStatus[3]?PSTR("off"):PSTR("on"),
  PinStatus[3]?PSTR("<font color=\"green\"><b>CLOSING</b></font>"):PSTR("<font color=\"red\">STAY</font>"),
  PinStatus[4]?PSTR("off"):PSTR("on"),
  PinStatus[4]?PSTR("<font color=\"green\"><b>ENABLE</b></font>"):PSTR("<font color=\"red\">DISABLE</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 àäðåñà íåçðó÷íà, áî ïåð³îäè÷íî çì³íþºòüñÿ. 
  // Íàì äîâåäåòüñÿ ÷àñòî ä³çíàâàòèñÿ, ÿêà àäðåñà íàøî¿ Web ñòîð³íêè.
  ether.printIp("My Router IP: ", ether.myip); // Âèâîäèìî â Serial ìîí³òîð IP àäðåñó, ÿêó íàì ïðèñâî¿â Router. 

  //Òàêîæ ìè ìîæåìî âñòàíîâèòè ñòàòè÷íó IP àäðåñó íàøî¿ ñòîð³íêè ³ çâåðòàòèñÿ äî Arduino ïî í³é 
  
    //ether.staticSetup(myip);

  ether.printIp("My SET IP: ", ether.myip); // Âèâîäèìî â Serial ìîí³òîð ñòàòè÷íó IP àäðåñó. 
  //-----

  for(int i = 0; i <= 4; i++)
  {
    pinMode(LedPins[i],OUTPUT); 
    digitalWrite (LedPins[i],HIGH);
    PinStatus[i]=false;
  }  
}

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

void loop()
{

  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 <= 3; 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("?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 {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

Неактивний

#2 2017-09-02 22:05:06

sqafarov
Учасник
Зареєстрований: 2017-09-02
Повідомлень: 5

Re: WEB сервер

Вячеслав Азаров пише:

А как вы хотите, что бы вам помогли?

Подсказать, направить )) но конечно не посылать ))

Неактивний

#3 2017-09-02 22:22:53

sqafarov
Учасник
Зареєстрований: 2017-09-02
Повідомлень: 5

Re: WEB сервер

Вячеслав Азаров пише:

Если вы хотите иметь видимый везде сервер то вам придется купить статический IP адрес. Для того, что бы сделать такую кнопку как вам хочется нужно написать обработку событий кнопки на JS и передавть ее состояние серверу по AJAX.

Насчет статики я знаю, а вот обработка JS и передача по Ajax ... это пипец

Неактивний

#4 2017-09-03 19:04:26

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: WEB сервер

зачем ajax?
вот есть вариант on / off
https://gist.github.com/bbx10/667e3d4f5f2c0831d00b

а на js есть куча всяких евентов..

надите веб девелопера ) 
он все все сделает. задача то для молодых по рангу.

Неактивний

#5 2017-09-03 19:34:45

sqafarov
Учасник
Зареєстрований: 2017-09-02
Повідомлень: 5

Re: WEB сервер

NoName пише:

зачем ajax?
вот есть вариант on / off
https://gist.github.com/bbx10/667e3d4f5f2c0831d00b

а на js есть куча всяких евентов..

надите веб девелопера ) 
он все все сделает. задача то для молодых по рангу.

Большое спасибо )) Есть такой ))

Неактивний

#6 2017-09-04 11:35:33

sqafarov
Учасник
Зареєстрований: 2017-09-02
Повідомлень: 5

Re: WEB сервер

Вячеслав Азаров пише:
sqafarov пише:
NoName пише:

зачем ajax?
вот есть вариант on / off
https://gist.github.com/bbx10/667e3d4f5f2c0831d00b

а на js есть куча всяких евентов..

надите веб девелопера ) 
он все все сделает. задача то для молодых по рангу.

Большое спасибо )) Есть такой ))

Можно вообще без HTTP обойтись, а страницу, для браузера, хранить у себя на диске. Это кому как хочется.

Можно поподробнее?

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму