checkbox EtherCard.h

rapidshe
Offline
Зарегистрирован: 31.12.2015

Люди, ктонибудь может скинуть пример применения чекбокса?

нашел применение в одном из примеров к EtherCard.h, но категорически не понял...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Что именно интересует? Как в HTML чекбокс сделать - если ты про вебморду? Или - как получить его значение? Или - ещё чего? Расшифруй - что хочешь, тогда будет понятнее. Пока - нифига не понял.

rapidshe
Offline
Зарегистрирован: 31.12.2015

пока излагал мысль решил что лучше использовать выпадающий список. выпадающим списком будет выбираться режим работы реле (ручной,включение по датчику, охлаждение, нагрев). ну по сути не важно что за режимы. пусть будет 1, 2, 3 и 4.

Потихоньку модернизирую под себя код Дмитрия Осипова 

/* Дмитрий Осипов. http://www.youtube.com/user/d36073?feature=watch
 v.02 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays. 
 Version 0.2 2014/10/02
 ----- 
 Обновление: в  Version 0.2.
 1). Web страница отображает, значения аналоговых входов analogRead(A0),(A1),(A2),(A3).
 2). Запись / восстановление, из EEPROM состояния LedPins.
 3). Установка времени авто обновления данных Web страницы, на устройстве клиента.
 Пригодится для скорости отображения изменений значений / данных, с датчиков.
 ----- 
 Что нам понадобится:
 1). ENC28J60 Ethernet LAN / Network Module. 
 http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=ENC28J60&rt=nc&LH_BIN=1
 
 2). Библиотека / Library - "ethercard".
 EtherCard is a driver for the ENC28J60 chip, compatible with Arduino IDE.
 https://github.com/jcw/ethercard
 Или берем здесь. https://yadi.sk/d/R57sVoglbhTRN
 3).
 Скачать sketch.
 v.02 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
 
 -----------------------
 *************************************************************** 
 Вспомогательные видео инструкции, sketch.
 ***************************************************************
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
 https://yadi.sk/i/KYFASZdnbhUr5
 Видео инструкция.
 v.01 Управляем Arduino с Web страницы Webserver Ethernet ENC28J60 Enternet HR911105A Pin ON OF Relays.
 http://www.youtube.com/watch?v=PPB2Xvubt4s&list=UU7aH7HVqDvwB1xNHfSl-fDw
 *************************************************************** 
 
 Подключаем Pins "ENC28J60 Module" к Arduino Uno.
 VCC -   3.3V
 GND -    GND
 SCK - Pin 13
 SO  - Pin 12
 SI  - Pin 11
 CS  - Pin 10 - Можно выбрать любой Pin. 
 
 Подключаем  "ENC28J60 Module" например к Router, загружаем sketch, открываем страницу
 в браузере например 192.168.1.222 , на странице можем включать выключат Pins / реле. 
 ---------
 Примечание: "ENC28J60 Module" питается от 3.3 volts, и потребляет по документации 250mA.
 Arduino Uno Максимальный допустимый ток, получаемый с 3V3 контакта — 50 мА.
 У меня прекрасно всё работает с 3V3 контакта Arduino Uno.
 На всякий случай, предупреждаю.
 ------------------
 */

#include <EtherCard.h>  // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN
#include <EEPROM.h> // Для  Записи / восстановление из EEPROM состояния LedPins.

// MAC Address должен быть уникальным в вашей сети. Можно менять. 
static byte mymac[] = { 
  0xD8,0xD8,0xD8,0xD8,0xD8,0xD8 };

// ip, статический / постоянный Address нашей Web страницы. Можно менять.  
static byte myip[] = { 
  192,168,1,222 };

// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[1150];
BufferFiller bfill;

// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
  2,3,4,5,6,7,8,9};

// Массив для фиксации изменений.
boolean PinStatus[7]; // с 0 до 7.


//-------------

const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";



//------------



// Делаем функцию для оформления нашей Web страницы. 
void homePage()
{
  // Раскомментируйте / закомментируйте нужное вам количество датчиков.
  int sensor0 = analogRead(A0);
  int sensor1 = analogRead(A1);
  int sensor2 = analogRead(A2);
  int sensor3 = analogRead(A3);


  bfill.emit_p(PSTR("$F"
    "<title>ArduinoPIN Webserver</title>"    
    "ArduinoPIN 2: <a href=\"?ArduinoPIN2=$F\">$F</a><br />"  
    "ArduinoPIN 3: <a href=\"?ArduinoPIN3=$F\">$F</a><br />"
    "ArduinoPIN 4: <a href=\"?ArduinoPIN4=$F\">$F</a><br />"
    "ArduinoPIN 5: <a href=\"?ArduinoPIN5=$F\">$F</a><br />"
    "ArduinoPIN 6: <a href=\"?ArduinoPIN6=$F\">$F</a><br />"
    "ArduinoPIN 7: <a href=\"?ArduinoPIN7=$F\">$F</a><br />"
    "ArduinoPIN 8: <a href=\"?ArduinoPIN8=$F\">$F</a><br />"   
    "ArduinoPIN 9: <a href=\"?ArduinoPIN9=$F\">$F</a>"),   

  http_OK,

  PinStatus[0]?PSTR("off"):PSTR("on"),
  PinStatus[0]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[1]?PSTR("off"):PSTR("on"),
  PinStatus[1]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[2]?PSTR("off"):PSTR("on"),
  PinStatus[2]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[3]?PSTR("off"):PSTR("on"),
  PinStatus[3]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[4]?PSTR("off"):PSTR("on"),
  PinStatus[4]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[5]?PSTR("off"):PSTR("on"),
  PinStatus[5]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"),
  PinStatus[6]?PSTR("off"):PSTR("on"),
  PinStatus[6]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"), 
  PinStatus[7]?PSTR("off"):PSTR("on"),
  PinStatus[7]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));

  //------------


  // Для отображения на Web странице значений с аналоговых входов analogRead(A0),(A1),(A2),(A3).

  // Авто обновление Web страницы, пригодится для частоты отображения данных с датчиков.
  // После нажатия на устройстве клиента "ArduinoPIN ON или OFF", 
  // происходит обновление Web страницы, и значение с датчиков на ней.
  // Можно этот процесс автоматизировать, + установить таймер / время авто обновление Web страницы.
  // Если авто обновление Web страницы вам не нужно, закомментируйте стоку "<meta http-equiv='refresh' content='10'/>".  
  // Время таймера устанавливается content='2'/>" '2' это 2 секунды.

  // выводим значения analogRead(A0);.
  bfill.emit_p(PSTR(
  "<meta http-equiv='refresh' content='2'/>" // Авто обновление Web страницы клиента, каждые 2 секунды.
  "<font color=\"brown\"><h3>AnalogRead(A0)</h3>""<h1>$D</h1>"),sensor0);  // h1 размер шрифта.


  // Раскомментируйте / закомментируйте нужное вам количество датчиков.

  // выводим значения analogRead(A1);.
  bfill.emit_p(PSTR("<font color=\"blue\"><h3>AnalogRead(A1)</h3>""<h1>$D</h1>"),sensor1);

  // выводим значения analogRead(A2);.
  bfill.emit_p(PSTR("<font color=\"Amber\"><h3>AnalogRead(A2)</h3>""<h3>$D</h3>"),sensor2);  

  // выводим значения analogRead(A3);.
  bfill.emit_p(PSTR("<font color=\"Burnt Orange\"><h3>AnalogRead(A3)</h3>" "<h3>$D</h3>"),sensor3);

  // Можно в одной строке.
  bfill.emit_p(PSTR("<h1>(A0)=$D"": (A1)=$D"": (A2)=$D"": (A3)=$D</h1>"),sensor0, sensor1 ,sensor2 ,sensor3);
}



//------------------------



void setup()
{
  Serial.begin(9600);

  // По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
  // and change it to: Меняем (CS-pin) на 10.
  // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);

  if (!ether.dhcpSetup()); 

  // Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router. 
  // Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться. 
  // Нам придётся каждый раз узнавать кой адрес у нашей страницы.
  ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router. 

  // Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
  // Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222". 
  ether.staticSetup(myip);

  ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес. 
  //-----

  for(int i = 0; i <= 7; i++)
  {
    pinMode(LedPins[i],OUTPUT); // весь массив LedPins делаем OUTPUT.
    PinStatus[i]=EEPROM.read(i); // Перезаписываем значения массива PinStatus, значениями из EEPROM.
    digitalWrite(LedPins[i],PinStatus[i]); // Восстанавливаем прошлое состояние LedPins.  
  }

}

// --------------------------------------

void loop()
{

  delay(1); // Дёргаем микроконтроллер.

  word len = ether.packetReceive();   // check for ethernet packet / проверить ethernet пакеты.
  word pos = ether.packetLoop(len);   // check for tcp packet / проверить TCP пакеты.

  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {

      data += 5;
      if (data[0] == ' ') {       
        homePage(); // Return home page, Если обнаружено изменения на станице, запускаем функцию.
        // for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i],PinStatus[i]);                              
        // EEPROM.write(i,PinStatus[i]);delay(10);Serial.println(1);

      }


      // "16" = количество символов "?ArduinoPIN1=on ".
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[0] = true; 
        digitalWrite(LedPins[0],PinStatus[0]); 
        EEPROM.write(0,PinStatus[0]); // записываем в ячейку EEPROM №0, текущее состояние LedPins[0].    
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[1] = true;
        digitalWrite(LedPins[1],PinStatus[1]); 
        EEPROM.write(1,PinStatus[1]);
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[2] = true;
        digitalWrite(LedPins[2],PinStatus[2]); 
        EEPROM.write(2,PinStatus[2]);
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=on ", data, 16) == 0) {
        PinStatus[3] = true;
        digitalWrite(LedPins[3],PinStatus[3]); 
        EEPROM.write(3,PinStatus[3]);
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=on ", data, 16) == 0) {
        PinStatus[4] = true; 
        digitalWrite(LedPins[4],PinStatus[4]);  
        EEPROM.write(4,PinStatus[4]);      
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=on ", data, 16) == 0) {
        PinStatus[5] = true; 
        digitalWrite(LedPins[5],PinStatus[5]);  
        EEPROM.write(5,PinStatus[5]);      
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=on ", data, 16) == 0) {
        PinStatus[6] = true; 
        digitalWrite(LedPins[6],PinStatus[6]); 
        EEPROM.write(6,PinStatus[6]);       
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN9=on ", data, 16) == 0) {
        PinStatus[7] = true;
        digitalWrite(LedPins[7],PinStatus[7]); 
        EEPROM.write(7,PinStatus[7]);
        bfill.emit_p(http_Found);
      }



      //------------------------------------------------------  



      else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[0] = false; 
        digitalWrite(LedPins[0],PinStatus[0]); 
        EEPROM.write(0,PinStatus[0]);       
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[1] = false; 
        digitalWrite(LedPins[1],PinStatus[1]);  
        EEPROM.write(1,PinStatus[1]);      
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[2] = false; 
        digitalWrite(LedPins[2],PinStatus[2]); 
        EEPROM.write(2,PinStatus[2]);       
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN5=off ", data, 17) == 0) {
        PinStatus[3] = false; 
        digitalWrite(LedPins[3],PinStatus[3]); 
        EEPROM.write(3,PinStatus[3]);       
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN6=off ", data, 17) == 0) {
        PinStatus[4] = false;  
        digitalWrite(LedPins[4],PinStatus[4]); 
        EEPROM.write(4,PinStatus[4]);      
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN7=off ", data, 17) == 0) {
        PinStatus[5] = false; 
        digitalWrite(LedPins[5],PinStatus[5]); 
        EEPROM.write(5,PinStatus[5]);       
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN8=off ", data, 17) == 0) {
        PinStatus[6] = false; 
        digitalWrite(LedPins[6],PinStatus[6]);  
        EEPROM.write(6,PinStatus[6]);      
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN9=off ", data, 17) == 0) {
        PinStatus[7] = false; 
        digitalWrite(LedPins[7],PinStatus[7]); 
        EEPROM.write(7,PinStatus[7]);       
        bfill.emit_p(http_Found);
      }
      //---------------------------


      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

Покачто в конце void homePage приписываю что хочу использовать...

Ввод текста прикрутился нормально  

  bfill.emit_p(PSTR("<form><input type=text name=ttemp2 size=10> <input type=submit value=ОК> </form>"));


 вот с чекбоксом непонятно... хоть он и не нужен, на будущее хочу разобраться.

  bfill.emit_p(PSTR("<form><input type=checkbox name=ttemp2333 size=10> <value=ОК> </form>"));
   bfill.emit_p(PSTR("<form><input type=checkbox name=c value='1'> ""</form>")); 

Результатом этих строчек на страничке появляются чекбоксы, в них можно ставить/убирать галки... но как сделать чтобы отсылалось условно 1/0 в зависимости от галки.

 

пс: буду мудрить со списком сейчас...


Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

rapidshe пишет:
вот с чекбоксом непонятно... хоть он и не нужен, на будущее хочу разобраться.

<form>
<input type=checkbox name=ttemp2333 size=10> 
<input type=submit value=ОК>
</form>

или

<form>
<input type=checkbox name=ttemp2333 size=10 onclick=this.form.submit()> 
</form>

Только имей в виду, что в форме отправляется только checked состояние. Если галка снята - отправится пустая форма.

rapidshe
Offline
Зарегистрирован: 31.12.2015

Спасибо! заодно и с выпадающим списком  помогли)

<select name=mode size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

Новая проблемка... нужно будет использовать несколько выпадающих списков в разных местах(разные ячейки таблицы).

Одна строка работает (вторая закомментирована), страница загружается

  bfill.emit_p(PSTR("<form>
<select name=modeR1 size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
</form>"));
// bfill.emit_p(PSTR("<form>
// <select name=modeR2 size=1 onchange=this.form.submit();>
// <option value=1>1</option>
// <option selected value=2>2</option>
// <option value=3>3</option>
// <option value=4>4</option>
// </select></form>"));

Если вторую раскомментировать, то страница уже не загружается (размер буфера увеличил, всёравно...)

  bfill.emit_p(PSTR("<form>
<select name=modeR1 size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select></form>"));
  bfill.emit_p(PSTR("<form>
<select name=modeR2 size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
</form>"));

Страница загружается и оба списка появляются если засунуть в общие (форм) (/форм)

  bfill.emit_p(PSTR("<form>
<select name=modeR1 size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
<select name=modeR2 size=1 onchange=this.form.submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
</form>"));

но тогда в ответ (как называются данные, которые отправляются на сервер при нажатии на ссылку?) прилетает http://192.168.1.12/?modeR1=3&modeR2=2, т.е. сразу от обоих списков. впринципи разделить данные смогу... но мне будет нужно в разных местах кода размещать эти выпадающие списки

ПС: у меня всё в одну строчку пишется, поэтому ковычек минимум. тут разбил на строки для удобства чтения

rapidshe
Offline
Зарегистрирован: 31.12.2015

При этом перед этими строками идут две идентичные друг дружке в индифидуальных тегах <form></form>

  bfill.emit_p(PSTR("<form><input type=text name=ttemp2 size=10> <input type=submit value=ОК> </form>"));
  bfill.emit_p(PSTR("<form><input type=text name=ttemp3 size=10> <input type=submit value=ОК> </form>"));

и в браузере отлично отображается 2 тестовых окошка

rapidshe
Offline
Зарегистрирован: 31.12.2015

убираю onchange=this.form.submit(); и грузится

rapidshe
Offline
Зарегистрирован: 31.12.2015

победил. в таком варианте работает как надо

  bfill.emit_p(PSTR("<form>
<select name=modeR1 size=1 onchange=submit();>
<option value=1>1</option>
<option selected value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
</select>
</form>"));
  bfill.emit_p(PSTR("<form>
 <select name=modeR2 size=1 onchange=submit();>
 <option value=1>1</option>
 <option selected value=2>2</option>
 <option value=3>3</option>
 <option value=4>4</option>
 </select></form>"));

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

не победил... добавляю третью аналогичную строчку - страничка не грузится. буфер увеличил, толку нет. как можно посмотреть в чем причина?

снова если засуну 3 строки в общие теги <form></form>, то грузится.

если каждая строка в индивидуальных тегах <form></form>, не грузится страничка...

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Полагаю обратным слэшем должны строки заканчиваться

  bfill.emit_p(PSTR("<form>\
<select name=modeR1 size=1 onchange=submit();>\
<option value=1>1</option>\
<option selected value=2>2</option>\
<option value=3>3</option>\
<option value=4>4</option>\
</select>\
</form>"));

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

я ж написал что построчно только тут выкладываю, чтоб читать было удобнее всем.

в коде у меня выглядит так:

  bfill.emit_p(PSTR("<form><select name=modeR1 size=1 onchange=submit();><option value=1>1</option><option selected value=2>2</option><option value=3>3</option><option value=4>4</option></select></form>"));

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

вот так работает:

bfill.emit_p(PSTR("<form><select name=R1mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));
bfill.emit_p(PSTR("<form><select name=R2mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));
//bfill.emit_p(PSTR("<form><select name=R3mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));

вот так уже не работает:

bfill.emit_p(PSTR("<form><select name=R1mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));
bfill.emit_p(PSTR("<form><select name=R2mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));
bfill.emit_p(PSTR("<form><select name=R3mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));

вот так работает, но это не то что нужно. не смогу распихать в разные части кода. тут просто совместил 3 строчки в общих тегах <form></form>

bfill.emit_p(PSTR("<form><select name=modeR1 size=1 onchange=submit();><option value=1>1</option><option selected value=2>2</option><option value=3>3</option><option value=4>4</option></select><select name=R3mode size=1 onchange=submit();><option value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select><select name=modeR2 size=1 onchange=submit();><option value=1>1</option><option selected value=2>2</option><option value=3>3</option><option value=4>4</option></select></form>"));

 

rapidshe
Offline
Зарегистрирован: 31.12.2015

работает:

bfill.emit_p(PSTR("<form><select name=R1mode size=1 onchange=submit();><option selected value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option></select><select name=R2mode size=1 onchange=submit();><option selected value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option></select><select name=R3mode size=1 onchange=submit();><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option></select></form>"));

не работает:

bfill.emit_p(PSTR("<form><select name=R1mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select><select name=R2mode size=1 onchange=submit();><option selected value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select><select name=R3mode size=1 onchange=submit();><option value=1>Ручной</option><option value=2>По датчику</option><option value=3>Обогрев</option><option value=4>Охлаждение</option></select></form>"));

разница в названии вариантов. в первом варианте цифры, во втором слова на кирилице.

какой-нибудь памяти/пропускной способности не хватает? это ограничение по железу?

блин голова опухла...

 

пс: проверяю на хроме, я.браузере, ИЕ новом

пс2: в хроме и ИЕ вместо кирилицы кракозябры. в я.браузере норм. что странно, т.к. в основе я.браузера хром...

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Чтобы изчезли "краякозаблы"

Нужно заменить

const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";

на

const char http_ok[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html; charset=utf-8 \r\n"
"Pragma: no-cache\r\n";