Вопрос с функциями в ESP8266

LoveDream
Offline
Зарегистрирован: 25.01.2018

Почему вот так работает:

int test = 0;
HTTP.on("/test", HTTP_GET, []()
{
if(test == LOW)
     {
test = HIGH;
HTTP.send(200, "text/html","ON");
     }
else
     {
test = LOW;
HTTP.send(200, "text/html","OFF");
     }
});

А если в функции, то не работает.....

 

int test = 0;
HTTP.on("/test", HTTP_GET, []()
{
    toggleTEST(test);
});

void toggleTEST (int X)  
{
   if(X == LOW) 
     {
       X = HIGH;
     HTTP.send(200, "text/html","ON");
     }        
   else 
     {
       X = LOW;
     HTTP.send(200, "text/html","OFF");
      }                     
}

Где ошибка понять то не могу?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А Вы уверенеы, что Вам это надо, и что Вы знаете, что делаете? Точно уверены?

Здесь используются лямбда выражения, о которых 99% людей реально, профессионально работающих на С++ вообще никогда не слышали. И ничего, как-то работают. 

Если Вы действительно хотите лезть в такие дебри, то изучайте - https://msdn.microsoft.com/ru-ru/library/dd293608.aspx, там помёте, что во втором случае нужен иной синтакис вызова. Если же Вы не профи, а просто случайно скачали этот код откуда-то, выбросьте и ищите другой - на этой дороге, это далеко не последние грабли.

Судя по Вашим другим вопросам на форуме, Вы не профессиональный программитс, а значит Вам реально лучше выбросить этот код и писать нормально, без лямбд.

LoveDream
Offline
Зарегистрирован: 25.01.2018

Функция нужна, чтоб ~60 кнопок описать.
Нет, я не профи совсем. 
Скилл по чуть поднимаю свой)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, тогда забудьте про лямбды и пишите нормально (или ищите нормальный код). Нет, если хотите, исправьте то, что есть (по той ссылке, что я дал, там всё понятно), но потом не жалуйтесь - это не последние грабли.

LoveDream
Offline
Зарегистрирован: 25.01.2018

Чушь короче. 
 

HTTP.on("/test", HTTP_GET, []() { toggle(test, 1);});   //тест
HTTP.on("/test2", HTTP_GET, []() { toggle(test2, 2);}); //тест2
}
void toggle(String data, int index) {
if (data == "0")
{
data = "1";
HTTP.send(200, "text/html","ON");
}
else
{
data = "0";
HTTP.send(200, "text/html","OFF");
}
Serial.write (1); Serial.print (index); Serial.write (2); Serial.print (data); Serial.write (3);
}

ESP отправляет в Arduino mega, и обратно получает значение от меги.

if((data.index==1)&&(data.port==0)){test = ((data.data).toInt());}  //приём из меги
if((data.index==2)&&(data.port==0)){test2 = ((data.data).toInt());}  //приём из меги

И этот говнокод работает как надо. ХЗ вобшем.