Тип данных char
- Войдите на сайт для отправки комментариев
Вс, 25/03/2018 - 21:47
Доброго дня. Ифо про веб сервер, отправляеться запрос с страницы методом 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)?
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, сравнение тоже надо написать правильно - я чисто для примера. На каждый символ нужно выполнить действие если это '=' значит то что было до - имя переменной. Если пробел или & - значит значение переменной полученно - присвоение в зависимости от имени переменной. Если что то другое - просто наполняем этим буфер, и так до прихода нужного символа - тогда и будет ясно что сделать с буфером.
Дело в том что чтение походу не посимвольно, а сразу строку.
Вывод в терминал уже дальше в теле программы.
Получаю отправленные данные так:
Дело в том что чтение походу не посимвольно, а сразу строку.
Вы уж определитесь, посимвольно или в строку.
Вот код. Стрелками указанны те самые места записи и вывода информации
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 страницу } }Кажеться я понял свою ошибку, попробую сам исправить. О результатах отпишусь