Принятие и обработка метода Get с дальнейшем использованием

Alex-human
Offline
Зарегистрирован: 03.11.2014

Применив код в посте 99, вот что получаю

G
GE
GET
GET 
GET /
GET /$
$
GET /$t
t
GET /$tm
m
GET /$tmi
i
GET /$tmin
n
GET /$tmin=
=
GET /$tmin=2
2
OFF
GET /$tmin=20
0
GET /$tmin=20!
!
GET /$tmin=20! 
GET /$tmin=20! H
GET /$tmin=20! HT
GET /$tmin=20! HTT
GET /$tmin=20! HTTP
GET /$tmin=20! HTTP/
GET /$tmin=20! HTTP/1
GET /$tmin=20! HTTP/1.
GET /$tmin=20! HTTP/1.1
GET /$tmin=20! HTTP/1.1
 
GET /$tmin=20! HTTP/1.1
JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Вы не понимаете чем отличается массив от объекта.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Так с помощью чего мне надо вытащить строку запроса?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Alex-human пишет:

Применив код в посте 99, вот что получаю

...

Опять угадайка...

Вот та последняя строка, что вы получили

Alex-human пишет:
GET /$tmin=20! HTTP/1.1

Это и есть заголовок ответа. Его нужно распарсить, чтобы получить строку "20", затем перевести эту строку в INT.

Для этого вам нужно найти начало этой строки (подстрока tmin + 1 символ, или символ "="), в вашем случае - этого достаточно, но правильно будет найти еще и символ "!".

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

так он так и будет играть в угадайку пока ты будешь писать за него код...

Alex-human
Offline
Зарегистрирован: 03.11.2014
#include <SPI.h>
#include <Ethernet.h>
 
boolean incoming = 0;
int tt=45;
String b;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, x x, x); 
byte gateway[] = { 192, x, x, x }; 
byte subnet[] = { 255, 255, 255, 0 }; 
EthernetServer server(80); 
 
void setup()
{
  pinMode(2, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}
 
void loop()
{
  EthernetClient client = server.available();
  if (client) 
  {
    boolean currentLineIsBlank = true;
     String requestString="";
     char c;
     while (client.connected()) 
     {
       if (client.available()) 
       {
         c = client.read();
         requestString = requestString + c;
       
          if (c == '\n') 
          {
              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("<meta http-equiv=\"refresh\" content=\"5\">");
              client.println("XXX");
              //client.println(str); 
              client.println("<br />");     
              client.println("</html>");
              break;
          }
      }

    
      if(tt==25)
        {
           digitalWrite(2, HIGH);
        }
      else
        {
          digitalWrite(2, LOW);
        }
    }
   
    b=requestString.substring(11,13);
    tt=b.toInt();
    Serial.print(tt);
    
    delay(1);
    client.stop();
  }
}

Вот я получаю данные. получаю и переприсваиваю переменной полученное число. tt. Но не работает условие. Что если я передал 25, то светодиод должен загореться. Что не так?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Все не так. Почитайте как работают циклы и условия.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Я с 65 по 68 строк считываю значение нормально.ю вывожу там 25. а как вот раньше в цикл обратиться не могу. потому что если эти строки перенесу выше, выведет совсем другое

Araris
Offline
Зарегистрирован: 09.11.2012

Строки 55-62 должны находиться ПОСЛЕ присвоения значения переменной tt.

Alex-human
Offline
Зарегистрирован: 03.11.2014

Спасибо большое

Alex-human
Offline
Зарегистрирован: 03.11.2014

Такой вопрос. В запросе я передаю tmin=20. Вывожу сейчас только значение, т.е. 20. Как проверить,  что написано tmin или tmax? 

Считать сначала после $ несколько символов и проверить? Или как? Поскажите как логичнее сделать.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Логичнее взять всю строку, разбить ее на составляющие, а потом из них вычленять название переменных и их значение.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Alex-human, через три дня сами-же и свихнетесь пытаясь понять смысл переменных tt, b и смысл чисел 11 и 13.
Не ленитесь - именуйте переменные правильно.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Alex-human пишет:

Такой вопрос. В запросе я передаю tmin=20. Вывожу сейчас только значение, т.е. 20. Как проверить,  что написано tmin или tmax? 

Считать сначала после $ несколько символов и проверить? Или как? Поскажите как логичнее сделать.

На предыдущей странице я вам написал, как сделать.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016
//?bed=22door=26bathroom=24
int bedRangeValue,  doorRangeValue, bathroomRangeValue;

void parseGetRequest(String str){
  Serial.print("Parsing this string: ");
  Serial.println(str);
  
  int bedIndex = str.indexOf("bed");
  int doorIndex = str.indexOf("door");
  int bathroomIndex = str.indexOf("bathroom");
  String bedString = str.substring(bedIndex+4);
  String doorString = str.substring(doorIndex+5);
  String bathroomString = str.substring(bathroomIndex+9);
  
  bedRangeValue = bedString.toInt();
  doorRangeValue = doorString.toInt();
  bathroomRangeValue = bathroomString.toInt();
    
}

подыму старую тему, как быть если нудно в переменную сохранить отрицательное значение или типа флоат (с точкой)