0 голосов

Здравствуйте.
Перехожу на искру с ардуино и не совсем понимаю как выполнить две операции последовательно, учитывая, что на искре нет блокирующих функций.
Задача: 

При включении искры посылать запрос на отключение автокалибровки датчика MH-Z19, затем начать считывать показание датчика. Соединение организовано через Serial3 (P0, P1).

Встречал на форуме такой вариант:

function check_co2() {
  Serial3.write("\xFF\x01\x86\x00\x00\x00\x00\x00\x79");
  print_data(Serial3.read(9));
}

Но у меня после write сразу ничего не считывается, т.е. Serial3.read(9) ничего не возвращает.
Пробую решить таким методом(ниже), но проблема в том, что ответ с датчика приходит уже после завершения функции writeCommand. Можно ли как-то выполнить ожидание ответа? Как понять когда можно начать считывание показаний датчика? Запускать SetInterval внутри SetTimeout'а, а SetTimeout ставить на то кол-во мс, за которое выполнится отключение автокалибровки?

MHZ19_uart.prototype.writeCommand = function(cmd) {
    Serial3.setup(9600, { tx: this._pintx, rx: this._pinrx });
    var checksum = this.checksum(cmd);
    Serial3.write([cmd, checksum]); //Отправляем команду на отключение автокалибровки
    var a = setInterval(function()
    {
        if(Serial3.available() > 0) //на второе срабатывание функции ответ с датчика уже пришел
        {
            clearInterval(a);
            var count = Serial3.available();
            var res = Serial3.read(9);
            for(var i = 0; i < count; i++)
            {
                console.log(res[i].charCodeAt(0), typeof res[i]);
            }
        }
    }, 50);
}

Про подписку на событие data знаю, но не уверен, что она решит проблему.

Хотелось бы в целом узнать как реализовывать алгоритмы в Iskra js, где необходимо посылать запрос, дожидаться ответа и только потом переходить к следующей операции.

(2 баллов) 1 2

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...