Просьба обьяснить пару строк кода по барометру (Troyka) I2C

Тема в разделе "Arduino & Shields", создана пользователем prapor99, 24 янв 2016.

  1. prapor99

    prapor99 Нуб

    Здравствуйте! Сразу признаюсь, что опыт общения с Arduino сутки. Итак в чем собственно дело. Взял я Arduino Uno, подключил к нему барометр правда без Troyka Shield, а напрямую. Скачал библиотеку и код с Амперки. Не работает. После отключения выполнения следующих строк кода все заработало.

    void setup()
    {
    // открываем последовательный порт
    Serial.begin(9600);
    // пока не появились данные с USB
    // while (!Serial.available()) { ВЫКЛЮЧИЛ
    // ждём
    // }ВЫКЛЮЧИЛ
    // выводим сообщение о начале инициализации
    // Serial.println("Begin init..."); ВЫКЛЮЧИЛ
    // инициализация барометра
    barometer.begin();
    // выводим сообщение об удачной инициализации
    // Serial.println("Init completed"); ВЫКЛЮЧИЛ
    }

    Честно говоря я не совсем понимаю что эти строки выполняют, например что за данные ждем от USB и зачем инициализация. Не могли бы вы коллеги объяснить новичку. Заранее премного благодарен.

    P.S. Ну и совсем дилетантский вопрос зачем нужны символы "{" и "}"
     
  2. geher

    geher Гуру

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

    Фигурные скобки же являются неотълемым эиементом синтаксиса языков C и C++ (а так же еще кучи языков программирования). Предназначены же они для выделения блоков программы, которые могут использоваться для формирования составного оператора для некоторых конструкций вроде цикла или оператора ветвления, для ограничения области видимости переменных или для описания функций.
    Но подозревая, что вопрос касался не фигурных скобок вообще, а только исключенных строк кода, то замечу, что в данном конкретном случае скорее всего скобки применены исключительно для наглядности кода.
    Теоретически конструкция
    Код (Text):

    while (!Serial.available()) {
    // ждём
    }ВЫКЛЮЧИЛ
     
    может быть заменена на
    Код (Text):

    while (!Serial.available());  // ждём
     
     
  3. prapor99

    prapor99 Нуб

    Спасибо большое за исчерпывающий и понятный ответ.