Возьму 30 мин консультацию по программированию

Wrongbee13
Offline
Зарегистрирован: 05.11.2014

Приветствую, друзья!

ESP8266. MQTT. Скопипэстил рабочий скетч. Немного доработал, все работает.  Несколько моментов в коде непонятны (напр Callback как таковой). Хочется досконально разобраться, в связи с чем и ищу доброжелательного грамотного форумчанина.

пс Без петросянщины за 5000$ в час

rkit
Offline
Зарегистрирован: 23.11.2016

"Досконально разобраться" и "30 минут" это не слишком совместимые понятия.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Wrongbee13 пишет:

Приветствую, друзья!

ESP8266. MQTT. Скопипэстил рабочий скетч. Немного доработал, все работает.  Несколько моментов в коде непонятны (напр Callback как таковой). Хочется досконально разобраться, в связи с чем и ищу доброжелательного грамотного форумчанина.

пс Без петросянщины за 5000$ в час

А интернет не помог не тему коллбэка ? Не мудрите, конкретнее пишите, что вам нужно. Может это вообще будет бесплатно. Совет например...

Wrongbee13
Offline
Зарегистрирован: 05.11.2014

Да не только насчет колбека.Досконально разобраться всего с 3-5 не до конца понятными строчками кода. Интернет помог частично - могу сыпать запомненными терминами, готовыми ответами,  а полного понимания нет, но очень хочется. :)  Я накопил и выписал на бумажку непонятные вещи. Пока 4 вопросика :) Поэтому и хочется 30-60 минуточек в качестве очного диалога. Чтобы побыстрее двигаться дальше. Это как в играх - можно нудно качаться полгода забесплатно, а можно взять премиум и начать получать удовольствие :)

b707
Offline
Зарегистрирован: 26.05.2017

Wrongbee13 пишет:

Пока 4 вопросика :) Поэтому и хочется 30-60 минуточек в качестве очного диалога. Чтобы побыстрее двигаться дальше.

нереально это. За 30 минут чтения книги можжно узнать раза в 3 больше, чем за полчаса болтовни.

Если вы уже сформулировали вопросы - вот как сформулировали, там в гугль и забивайте. Вероятность получить ответ весьма велика...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

да пиши ты свои вопросы тут, не стесняйся. Мы гнобим тех, кто "20 языков на профессорском уровне" знает. А тех, кто честно говорит - "не понял", мы не обижаем! ;))

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

Так шо за вопросы? Задавай здесь, если ответы не помогут - тогда уже можно будет переходить на следующий этап.

По поводу коллбэка: представь, есть тёмная комната, в которой внутри что-то происходит. Есть верёвочка, которую закинули в окошко, на другом конце верёвочки - колокольчик. Как только кому-то внутри комнаты надо обозначить что-то - он дёргает за твою верёвочку, и колокольчик звенит.

Давая такую верёвочку в тёмную комнату - ты получаешь звон колокольчика, при этом тебе неважно, что творится в комнате, тебе важно, что колокольчик будет звонить. Колокольчик прозвенел два раза - в комнате перекур, три раза - в комнате обед, один раз - там клеят обои.

Так вот, верёвочка - это коллбэк, а звон колокольчика - переданные в него параметры. 

Wrongbee13
Offline
Зарегистрирован: 05.11.2014

Как я понял, огромный плюс колбека в том, что одна функция передает результаты во вторую. Причем вторая не тратит время на ожидание, и запускается только тогда, когда ей передают результат. Если пишу код сам, то понимаю, что и зачем хочу сделать. А вот чужой посложнее. Если стоят коменты, или функция названа бла бла callback, то вопросов не возникает. А вот если нет, я не пойму - где просто функция с несколькими аргументами, а где callback. И ступор. Пока для понимания пытаюсь так. Именно пытаюсь. Сделать функцию мигания светодиодом. Специально именно  на delay побольше, бех millis,  чтобы программа останавливалась. Вторая функция - что-то написать в порт. В этом случае ведь разумно применить колбэк? То есть мигаем диодом и тормозим, а по выполнении запускаем вторую печать в порт.

 

b707
Offline
Зарегистрирован: 26.05.2017

Wrongbee13 - вы это вообще спрашиваете или применительно только к WebClient на ESP8266?

Если вопрос про  PubSubClient.h - то определить калбек очень просто - им может стать любая ваша процедура, адрес которой вы передадите методу setCallback()

Но почему-то мне кажется, что вы думаете , что коллбек - это такой особый тип функций, доступный в ардуино или ЕСП8266 - тогда вы ошибаетесь, по умолчанию такого мезанизма нет, вы его должны написать сами

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

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

Что касается вашего примера - неудачный пример, там коллбэк не нужен. Коллбэк чаще применяют для асинхронных вызовов, например: вы передали указатель на вашу функцию в метод класса, который что-то там получает из сети. И как только он получит данные - он вызовет ваш коллбэк. Когда это будет - неизвестно: через секунду, через минуту, через час. Но это - будет.

Это, на мой взгляд, совершенно оправданный use case использования механизма коллбэков. Конечно, их можно применять так, как душа пожелает, например:

typedef void (*PMyCallback)(int counter); // указатель на функцию, принимающую параметр типа int и не возвращающую ничего


// метод, который будет дёргать наш коллбэк
void doSomething(PMyCallback callback)
{
	for(int i=0;i<10;i++)
	{
		callback(i);
		delay(1000);
	}
}

// наш коллбэк №1
void callee1(int param)
{
	Serial.print("Counter is: ");
	Serial.println(param);
}

// наш коллбэк №2
void callee2(int param)
{
	digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
}


void setup()
{
	Serial.begin(9600);
	pinMode(LED_BUILTIN,OUTPUT);

	doSomething(callee1); // вызываем функцию, передав ей наш коллбэк №1, он будет писать в Serial
	doSomething(callee2); // вызываем функцию, передав ей наш коллбэк №2, он будет мигать светодиодом
}

void loop()
{
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый ТС - идите в песочницу и скажите "скопирастил скетч, и хочу сделать то-то, но не получается". После обычных "обратись к создателю" пойдут нормальные комментарии (если у Вас хватит терпения). На онлайн согласятся или мошенники (они потребуют деньги вперед) или безбашенные. Ведь Вы всегда можете сказать, что было дано недостаточно информации...

Wrongbee13
Offline
Зарегистрирован: 05.11.2014

Друзья, спасибо! Действительно код был, где PubSubClient. Но мне настолько понравилась красота реализации, что захотелось копнуть поглубже и взять себе в арсенал