Помогите облагородить безобразие!

nick209
Offline
Зарегистрирован: 13.08.2017

Добрый всем денёк! Помогите облагородить это безобразие... Оно жутко мозолит мне глаза и совершенно не поддается быстрому редактированию! Вроде понимаю что все это как-то нужно запихнуть в цикл for, но я уже весь мозг себе сломал!!!

void handle_Schedul()
{
  int h01, m01, h02, m02, h03, m03, h04, m04, h05, m05, h06, m06, h07, m07, h08, m08, h09, m09, h10, m10;

  if (HTTP.arg("h01") != "")
    {
      h01 = HTTP.arg("h01").toInt();
      if(h01 <= 23)
        {
          EEPROM.write(1, h01);
        } 
    }
  if (HTTP.arg("m01") != "")
    {
      m01 = HTTP.arg("m01").toInt();
      if(m01 <= 59)
        {
          EEPROM.write(2, m01);
        }
    }
  if (HTTP.arg("h02") != "")
    {
      h02 = HTTP.arg("h02").toInt();
      if(h02 <= 23)
        {
          EEPROM.write(3, h02);
        } 
    }
  if (HTTP.arg("m02") != "")
    {
      m02 = HTTP.arg("m02").toInt();
      if(m02 <= 59)
        {
          EEPROM.write(4, m02);
        }
    }
  if (HTTP.arg("h03") != "")
    {
      h03 = HTTP.arg("h03").toInt();
      if(h03 <= 23)
        {
          EEPROM.write(5, h03);
        } 
    }
  if (HTTP.arg("m03") != "")
    {
      m03 = HTTP.arg("m03").toInt();
      if(m03 <= 59)
        {
          EEPROM.write(6, m03);
        }
    }
  if (HTTP.arg("h04") != "")
    {
      h04 = HTTP.arg("h04").toInt();
      if(h04 <= 23)
        {
          EEPROM.write(7, h04);
        } 
    }
  if (HTTP.arg("m04") != "")
    {
      m04 = HTTP.arg("m04").toInt();
      if(m04 <= 59)
        {
          EEPROM.write(8, m04);
        }
    }
  if (HTTP.arg("h05") != "")
    {
      h05 = HTTP.arg("h05").toInt();
      if(h05 <= 23)
        {
          EEPROM.write(9, h05);
        } 
    }
  if (HTTP.arg("m05") != "")
    {
      m05 = HTTP.arg("m05").toInt();
      if(m05 <= 59)
        {
          EEPROM.write(10, m05);
        }
    }
  if (HTTP.arg("h06") != "")
    {
      h06 = HTTP.arg("h06").toInt();
      if(h06 <= 23)
        {
          EEPROM.write(11, h06);
        } 
    }
  if (HTTP.arg("m06") != "")
    {
      m06 = HTTP.arg("m06").toInt();
      if(m06 <= 59)
        {
          EEPROM.write(12, m06);
        }
    }
  if (HTTP.arg("h07") != "")
    {
      h07 = HTTP.arg("h07").toInt();
      if(h07 <= 23)
        {
          EEPROM.write(13, h07);
        } 
    }
  if (HTTP.arg("m07") != "")
    {
      m07 = HTTP.arg("m07").toInt();
      if(m07 <= 59)
        {
          EEPROM.write(14, m07);
        }
    }
  if (HTTP.arg("h08") != "")
    {
      h08 = HTTP.arg("h08").toInt();
      if(h08 <= 23)
        {
          EEPROM.write(15, h08);
        } 
    }
  if (HTTP.arg("m08") != "")
    {
      m08 = HTTP.arg("m08").toInt();
      if(m08 <= 59)
        {
          EEPROM.write(16, m08);
        }
    }
  if (HTTP.arg("h09") != "")
    {
      h09 = HTTP.arg("h09").toInt();
      if(h09 <= 23)
        {
          EEPROM.write(17, h09);
        } 
    }
  if (HTTP.arg("m09") != "")
    {
      m09 = HTTP.arg("m09").toInt();
      if(m09 <= 59)
        {
          EEPROM.write(18, m09);
        }
    }
  if (HTTP.arg("h10") != "")
    {
      h10 = HTTP.arg("h10").toInt();
      if(h10 <= 23)
        {
          EEPROM.write(19, h10);
        } 
    }
  if (HTTP.arg("m10") != "")
    {
      m10 = HTTP.arg("m10").toInt();
      if(m10 <= 59)
        {
          EEPROM.write(20, m10);
        }
    }
      
  EEPROM.commit(); 
}

 

Serega66
Offline
Зарегистрирован: 23.03.2018

Обычно часто повторяющиеся одинаковые действия выполняются при помощи функций тогда ваш код будет чутка покороче. Если конечно вы про это спашивали.

Serega66
Offline
Зарегистрирован: 23.03.2018

 прямо здесь на сайте про это очень хорошо написано http://arduino.ru/Reference/FunctionDeclaration

nick209
Offline
Зарегистрирован: 13.08.2017

Все верно, спрашивал именно про это... ну во первых оно итак уже в функции, но это не важно, я не об этом...

Меня беспокоит то, что все входящие данные являются String-ами, если бы они были числовыми переменными, я бы давно уже назначил  функцию и отправлял бы эти входящие как параметры для функции, а вот как в таком случае оперировать String-ами никак не соображу!!!!

Serega66
Offline
Зарегистрирован: 23.03.2018

команда (toInt()) преводит чар в инт у вас оно все преобразуется в инт. а потом (if(h01 <= 23)) это уже действие над инт

sadman41
Offline
Зарегистрирован: 19.10.2016

Наверное как-то вот так пойдет:

char* vars[] = {"h01", "m01", ...};
uint8_t limits[] = {23, 59, ...};

...
for (uint8_t i = 0; i < sizeof(vars); i++) {
    uint8_t value = HTTP.arg(vars[i]).toInt(); 
    if (value <= limits[i]) {
          EEPROM.update(i, value);
    }
}
EEPROM.commit();

 

nick209
Offline
Зарегистрирован: 13.08.2017

А как тогда контролировать пустую строку? Я с помощью 

if (HTTP.arg("h10") != "")

различаю пустую строку от строки с числом 0

в моем коде это принципиально важно

nick209
Offline
Зарегистрирован: 13.08.2017

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

if (HTTP.arg("h10") != "")

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну еще один if() по образцу можете же накатать. Так-то у вас и отрицательные значения не контролировались. А они легко превращаются в 255, 250 и т.д.

nick209
Offline
Зарегистрирован: 13.08.2017

То есть в массив я должен отправить только те строки, которые не пусты, верно?

Кстати насчет отрицательных значений спасибо, про них я совсем забыл)

nick209
Offline
Зарегистрирован: 13.08.2017

ААААА!!!!! ВСЕЕЕЕ!!!! ДОШЛООООО!!!!!! СПАСИБО!!!

Я же могу прям в цикле for проверять пустая ли строка)))) ТОЧНО!!!