Помогите со скетчем.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Здравствуйте. Имеется скетч стандартного WEB сервера на шилде W5100.

#include <SPI.h>
#include <Ethernet.h>
boolean InboundRequest = 0;
byte MAC[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 55);
EthernetServer arduino(81);

void setup() {
  pinMode(5, OUTPUT);
  Serial.begin(9600);
  Ethernet.begin(MAC, IP);
  arduino.begin();
}

void loop() {
  EthernetClient client = arduino.available();
  if(client) {
    boolean currentLineIsBlank = true;
    while(client.connected()) {
      if(client.available()) {
        char c = client.read();
        Serial.write(c);
        if(c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<body>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if(InboundRequest && c == ' ') {
          InboundRequest = 0;
        }
        if(c == '?') {
          InboundRequest = 1;
        }
        if(InboundRequest == 1) {
          if(c == '0') {
            digitalWrite(5, LOW);
          }
          if(c == '1') {
            digitalWrite(5, HIGH);
          }
        }
        if(c == '\n') {
          currentLineIsBlank = true;
        } else if(c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("The client disconnected.");
  }
}

В скетче имеются адреса, то есть если перейти по адресу: http://example.com/?1 - зажигается светодиод, а если перейти по адресу http://example.com/?0 светодиод выключается.

В общем мне нужно сделать так, чтобы я переходил по адресу http://example.com/1 или http://example.com/0 и оно работало так же, только сделать нужно приблизительно вот как:

         if(InboundRequest == 1) {
          if(c == переменная) {
            digitalWrite(5, переменная);
          }

Чтобы в digitalWrite(); записывалось то значение, что я ввожу по адресу http://example.com/1 или 0.

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

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

Спасибо!

negavoid
Offline
Зарегистрирован: 09.07.2016
if(InboundRequest == 1) {
   int x = c - '0';
   digitalWrite(5, x);
}

 

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

negavoid пишет:

if(InboundRequest == 1) {
   int x = c - '0';
   digitalWrite(5, x);
}

 

Включает, и отключает, но когда отключается, через секунду само включается.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

negavoid пишет:

if(InboundRequest == 1) {
   int x = c - '0';
   digitalWrite(5, x);
}

 

И почему выполняет 2 запроса? 1 запрос идёт на ?1, а второй favicon.ico

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Разобрался. Не выключалось, так как выполнялось 2 запроса.

А всё потому, что ардуинка искала файл favicon.ico, вернее не сама ардуинка, а браузер.

Добавление строки:

client.println("<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://arduino.cc/en/favicon.png\"/>");

Решило проблему.

Если кому то вдруг пригодится...

#include <SPI.h>
#include <Ethernet.h>
byte MAC[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 55);
EthernetServer arduino(81);
boolean InboundRequest = 0;

void setup() {
  pinMode(5, OUTPUT);
  Serial.begin(9600);
  Ethernet.begin(MAC, IP);
  arduino.begin();
}

void loop() {
  EthernetClient client = arduino.available();
  if(client) {
    boolean EmptyLine = true;
    while(client.connected()) {
      if(client.available()) {
        char data = client.read();
        Serial.write(data);
        if(data == '\n' && EmptyLine) {
          client.println("HTTP/1.1 200 OK");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head>");
          client.println("<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://arduino.cc/en/favicon.png\"/>");
          client.println("</head>");
          client.println("<body>");
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if(InboundRequest && data == ' ') {
          InboundRequest = 0;
        }
        if(data == '?') {
          InboundRequest = 1;
        }
        if(InboundRequest == 1) {
          int value = data - '0';
          digitalWrite(5, value);
        }
        if(data == '\n') {
          EmptyLine = true;
        } else if(data != '\r') {
          EmptyLine = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("--------------------------");
    Serial.println("The client disconnected.");
    Serial.println("--------------------------");
  }
}