Mega + Ethernet время сессии

Sorny
Offline
Зарегистрирован: 20.02.2013

Приветствую всех!

Вопрос следующий: Можно-ли указывать в скетче ограничение времени сессии при работе с Ethernet шилдом? Или каким-нить еще способом. А назрел такой вопрос вот почему. Если захожу с браузера и делаю действия на сервере (шилде т.е.) - то все ок, все работает. Стоит зайти с телефона - и начинаются затупы. Не срабатывают команды отправляемые этому серверу. Простейший пример - зажигать светодиод. С браузера - все норм, вкл и выкл. Только захожу с телефона и жму, допустим вкл - диод мигает и не загорается, хотя по-идее должен. Приходится ждать неопределенное время, чтоб все заработало и с телефона.

maksim
Offline
Зарегистрирован: 12.02.2012

Sorny пишет:

Можно-ли указывать в скетче ограничение времени сессии при работе с Ethernet шилдом?

Можно. А еще возможно устранить причину и не пытаться устранять последствия...

Sorny
Offline
Зарегистрирован: 20.02.2013

maksim пишет:

Можно. А еще возможно устранить причину и не пытаться устранять последствия...

Нужно показать код? Он стандартный, с примера.

maksim
Offline
Зарегистрирован: 12.02.2012

Да, нужно.

Sorny
Offline
Зарегистрирован: 20.02.2013
#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
/*Управление светодиодом через Ethernet */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac - адрес ethernet shielda
byte ip[] = { 192, 168, 1, 15 };        // ip адрес ethernet shielda
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети
EthernetServer server(80); //порт сервера
int ledPin = 13; // указываем что светодиод будет управляться через 13 Pin 
String readString = String(30); //string for fetching data from address
boolean LEDON = false; //изначальный статус светодиода - выключен

void setup(){
  //запускаем Ethernet
  Ethernet.begin(mac, ip, subnet);
  //устанавливаем pin 4 на выход
  pinMode(ledPin, OUTPUT);
  //enable serial datada print
  Serial.begin(9600); 
}
void loop(){
  // Создаем клиентское соединение
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
    if (client.available()) {
      char c = client.read();
      //read char by char HTTP request
      if (readString.length() < 30) {
        //store characters to string
        readString.concat( c); }
        //output chars to serial port
        Serial.print( c);
        //if HTTP request has ended
        if (c == '\n') {
        //Проверяем включили ли светодиод?
        //Level=1 - включен
        //Level=0 - выключен
          if(readString.indexOf("Level=1") >=0) {
            //Включаем светодиод
            digitalWrite(ledPin, HIGH); // set the LED on
            LEDON = true;
          }else{
            //Выключаем светодиод
            digitalWrite(ledPin, LOW); // set the LED OFF
            LEDON = false; 
          }
          // Формируем HTML
          client.println("HTTP/1.0 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<head> ");
          client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
          client.println("<title> Arduino :: Управление V0.1</title>");
          client.println("</head> ");
          client.println("<body>");
          //controlling led via radio elements
          client.println("<h3>Управление светодиодом 13 pin</h3>");
          if (LEDON){
            client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить<input type=radio name=Level value=0>Выключить<input type=submit value=Применить></form>");
            client.println("<font size=’5′>LED-статус: ");
            client.println("<font size=’5′>Вкл.");
          }else{
            client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить<input type=radio name=Level value=0 CHECKED>Выключить<input type=submit value=Применить></form>");
            client.println("<font size=’5′>LED-статус: ");
            client.println("<font size=’5′>Выкл");
          }
            client.println("<hr />");
            client.println("</body></html>");
            //clearing string for next read
            readString="";
            //останавливаем web-client
            client.stop();
          }
        }
      }
    }
  }

 

maksim
Offline
Зарегистрирован: 12.02.2012

Впервую очередь нужно сделать это:

          if(readString.indexOf("Level=1") >=0) {
            //Включаем светодиод
            digitalWrite(ledPin, HIGH); // set the LED on
            LEDON = true;
          }else if(readString.indexOf("Level=0") >=0){
            //Выключаем светодиод
            digitalWrite(ledPin, LOW); // set the LED OFF
            LEDON = false; 
          }

 

Sorny
Offline
Зарегистрирован: 20.02.2013

Большое спасибо maksim. Доберусь до дома - проверю.

Sorny
Offline
Зарегистрирован: 20.02.2013

Да, все работает. Еще раз спасибо!

Извините что к ...
Offline
Зарегистрирован: 29.11.2013

[quote=Sorny   Если захожу с браузера и делаю действия на сервере (шилде т.е.) - то все ок, все работает. Стоит зайти с телефона - и начинаются затупы. Не срабатывают команды отправляемые этому серверу. Простейший пример - зажигать светодиод. С браузера - все норм, вкл и выкл. Только захожу с телефона и жму, допустим вкл - диод мигает и не загорается, хотя по-идее должен. Приходится ждать неопределенное время, чтоб все заработало и с телефона. [/quote]

расскажите какой магией работало через browser ?

Sorny
Offline
Зарегистрирован: 20.02.2013

Извините что к вам обращаемся мы сами не местные пишет:

расскажите какой магией работало через browser ?

Не совсем понял Ваш вопрос. В браузере вбиваю IP заданный в скетче и жамкаю нужные мне действия.

Извините что к ...
Offline
Зарегистрирован: 29.11.2013

Sorny пишет:

Извините что к вам обращаемся мы сами не местные пишет:

расскажите какой магией работало через browser ?

Не совсем понял Ваш вопрос. В браузере вбиваю IP заданный в скетче и жамкаю нужные мне действия.

 

ардуина для browser догадливая else if(readString.indexOf("Level=0") >=0){ ,  а для телефона нет?