Тип данных char

motor
Offline
Зарегистрирован: 03.11.2017

Доброго дня. Ифо про веб сервер, отправляеться запрос с страницы методом get, в строке после отправки - "http://192.168.0.177/?ton=44&toff=33". Получаю отправленные данные так:

char c = client.read();

Делаю вывод инфы в терминал:

Serial.print(c);

В терминале вижу - "?ton=44&toff=33". Вот как так переменная типа char же максимум 1 байт, ну да ладно, а как мне теперь значения переменных (в моем случае ton и toff) получить из этой переменной "с", т.е. число 44 и 33 в отдельные переменные типа byte (они там максимум будут 100 минимум 0)?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
void loop(){
.........
char c = client.read();
switch(c){
  case '?':
     buf = '';
     break;
  case '=':
     var = buf;
     buf = '';
     break;
  case ' ':
  case '&':
    if(var == 'ton'){
      ton = buf; 
    }
    if(var == 'toff'){
      toff = buf;
    }
    buf = '';
    break;
  default:
    buf = buf + c;
} 
...........
}

Как то так, типы данных String, сравнение тоже надо написать правильно - я чисто для примера. На каждый символ нужно выполнить действие если это '=' значит то что было до - имя переменной. Если пробел или & - значит значение переменной полученно - присвоение в зависимости от имени переменной. Если что то другое - просто наполняем этим буфер, и так до прихода нужного символа - тогда и будет ясно что сделать с буфером.

motor
Offline
Зарегистрирован: 03.11.2017

Дело в том что чтение походу не посимвольно, а сразу строку.

Вывод в терминал уже дальше в теле программы.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

motor пишет:

Получаю отправленные данные так:

char c = client.read();

motor пишет:

Дело в том что чтение походу не посимвольно, а сразу строку.

Вы уж определитесь, посимвольно или в строку.

motor
Offline
Зарегистрирован: 03.11.2017

Вот код. Стрелками указанны те самые места записи и вывода информации

void loop() { 
float h = dht.readHumidity();  
float t = dht.readTemperature();
EthernetClient client = server.available(); 
if (client){ 
boolean currentLineIsBlank = true; 
while (client.connected()) { 
if (client.available()) { 
char c = client.read(); //<-----------------------------------------------------------------
if (newInfo && c == ' '){ 
newInfo = 0;  
} 
if (c == '$'){ 
newInfo = 1; 
}

if (c == '?'){
newInfo = 2; 
}
 

if (newInfo == 1){  
if (c == '1'){
servo.write(value_angle_open); 
} 
if (c == '2'){ 
servo.write(value_angle_close); 
} 
}

if (newInfo == 2){
  
 //EEPROM.write(address, value)
  Serial.print(c); //<---------------------------------------------
}

if (c == '\n') { 
currentLineIsBlank = true; 
} 
else if (c != '\r') { 
currentLineIsBlank = false; 
} 

if (c == '\n' && currentLineIsBlank) { 
//выводим HTML страницу
}
} 

 

motor
Offline
Зарегистрирован: 03.11.2017

Кажеться я понял свою ошибку, попробую сам исправить. О результатах отпишусь