Неясность с gprsSerial.available()

VeD
Offline
Зарегистрирован: 21.02.2016

Объясните пожалуйста понятным языком, для чего нужна данная функция.

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

Для проверки наличия данных в приемном буфере.

VeD
Offline
Зарегистрирован: 21.02.2016

Если стоит так, 

!gprsSerial.available()

то это означает нет данных в буфере?

Araris
Offline
Зарегистрирован: 09.11.2012
VeD
Offline
Зарегистрирован: 21.02.2016

Зачем кидать ссылки? Там не написано простыми словами, для чего именно нужна эта функция. Оно и понятно, там технический справочник, а не учебный разбор данной функции

Araris
Offline
Зарегистрирован: 09.11.2012

Простите за ссылку, но вряд ли Вам удастся найти учебный разбор данной функции - она слишком проста и однозначна для понимания.

VeD
Offline
Зарегистрирован: 21.02.2016

Это для Вас она понятна, а для меня как для новичка, нет. Или объясните простым языком для чего она нужна. 

Например, digitalWrite(11, LOW) эта фунция выключает 11 пин тем самым отключив всё что к нему подсоеденино.

Вот для меня понятно.

Но вот такое, считываем информацию с заданного пина и подаём на него 0, было не очень понятно. Пока в одном видеообзоре не показали зачем она нужна. 

 

okta
Offline
Зарегистрирован: 10.01.2015

VeD пишет:

Например, digitalWrite(11, LOW) эта фунция выключает 11 пин тем самым отключив всё что к нему подсоеденино.

Вот для меня понятно.

Но вот такое, считываем информацию с заданного пина и подаём на него 0, было не очень понятно. Пока в одном видеообзоре не показали зачем она нужна. 

 

Вы не поверите, но этаже функция digitalWrite(11, LOW) в этом же виде может и включать все что подключено к пину 11. Я вам картину мира не поломал?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

VeD пишет:

Или объясните простым языком для чего она нужна. 

Вообще-то Andy в первом же ответе объяснил простым языком. Подробности по аналогичной функции написаны по ссылке, которую дал ArarisЕсли не понятно по какому-то куску кода, то пишите сюда этот кусок кода.

VeD
Offline
Зарегистрирован: 21.02.2016
void loop()
{
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Green on")) {
                digitalWrite(greenPin, HIGH);
            } else if (!currStr.compareTo("Green off")) {
                digitalWrite(greenPin, LOW);
            } else if (!currStr.compareTo("Yellow on")) {
                digitalWrite(yellowPin, HIGH);
            } else if (!currStr.compareTo("Yellow off")) {
                digitalWrite(yellowPin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}
okta
Offline
Зарегистрирован: 10.01.2015

Да, если нет данных в буфере, то выйти из цикла (loop начнется сначала)

VeD
Offline
Зарегистрирован: 21.02.2016

как я понял. Если нет данных, повторить?. 

okta
Offline
Зарегистрирован: 10.01.2015

По сути да. Но дословно по реализации return - выйти из текущей функции. Я такую конструкцию не люблю, т.к. код менее читабельный. Лучше как раз наоборот
If( gprsSerial.available()){
Поехали обрабатывать что там пришло
}

VeD
Offline
Зарегистрирован: 21.02.2016

спасибо. а зачем в сравнении строк отрицание. !currStr.compareTo? 

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

currStr.compareTo("ххх") возвращает 0 если строки совпадают,

currStr.compareTo("ххх")==0  и  !currStr.compareTo("ххх") дают один и тот же результат.