// ПРИМЕР ЧТЕНИЯ ДАННЫХ С ПРОВЕРКОЙ ИЗ МОДУЛЯ УГЛЕКИСЛОГО ГАЗА:                    //
// Чтение данных без проверки доступно в примере "getDataShort"                    //
                                                                                   //
#include <SoftwareSerial.h>                                                        //   Подключаем библиотеку для работы с программной шиной UART.
#include <iarduino_Modbus.h>                                                       //   Подключаем библиотеку для работы по протоколу Modbus.
#include <iarduino_MB_eCO2.h>                                                      //   Подключаем библиотеку для работы с модулем углекислого газа.
                                                                                   //
SoftwareSerial   rs485(8,9);                                                       //   Создаём объект для работы с программной шиной UART-RS485 указывая выводы RX, TX.
ModbusClient     modbus(rs485, 2);                                                 //   Создаём объект для работы по протоколу Modbus указывая объект программной шины UART-RS485 и вывод DE конвертера UART-RS485.
iarduino_MB_eCO2 sensor(modbus);                                                   //   Создаём объект для работы с модулем углекислого газа указывая объект протокола Modbus.
                                                                                   //
void setup(){                                                                      //
     Serial.begin(9600);   while(!Serial);                                         //   Инициируем передачу данных в монитор последовательного порта, указав его скорость.
     rs485.begin(9600); // while(!rs485 );                                         //   Инициируем работу с программной шиной UART-RS485 указав её скорость.
     modbus.begin();                                                               //   Инициируем работу по протоколу Modbus.
//   modbus.setTimeout(10);                                                        //   Указываем максимальное время ожидания ответа по протоколу Modbus.
//   modbus.setDelay(4);                                                           //   Указываем минимальный интервал между отправляемыми сообщениями по протоколу Modbus.
//   modbus.setTypeMB( MODBUS_RTU );                                               //   Указываем тип протокола Modbus: MODBUS_RTU (по умолчанию), или MODBUS_ASCII.
     sensor.begin(6);                                                              //   Инициируем работу с модулем углекислого газа, указав его адрес. Если адрес не указан sensor.begin(), то он будет найден, но это займёт некоторое время.
//   sensor.setPeriod( 1.0f );                                                     //   Указываем модулю обновлять данные датчика углекислого газа каждую секунду.
}                                                                                  //
                                                                                   //
void loop(){                                                                       //
//   Задержка (не обязательно):                                                    //
     delay(1000);                                                                  //
                                                                                   //
//   Проверяем работу датчиков (не обязательно):                                   //
     int8_t err = sensor.checkSensor();                                            //   Проверяем датчик модуля.
     if( err<0 ){ Serial.println("Модуль не отвечает"); delay(1000); return;    }  //   Ошибка чтения данных из модуля. Модуль не отвечает.
                                                                                   //
     if( err                  )    { Serial.println("Обнаружены ошибки:");      }  //   Ошибка модуля, невозможно проверить датчики.
     if( err & ERROR_SGP_INIT )    { Serial.println("- неисправен датчик SGP"); }  //   Модуль не смог инициировать датчик углекислого газа.
     if( err & ERROR_SGP_DATA )    { Serial.println("- ошибка чтения SGP");     }  //   Модуль выявил ошибку при чтении данных из датчика углекислого газа.
     if( err                  )    { sensor.reset(); delay(1000); return;       }  //   Если есть любая ошибка, то перезагружаем модуль. Датчики модуля будут переинициированы.
                                                                                   //
     float data;                                                                   //   Объявляем переменную для получения данных.
                                                                                   //
//   Читаем количество эквивалента СО2 (углекислого газа):                         //
     data = sensor.getCO2();         Serial.print("CO2=" );                        //   Читаем данные.
     if( data < 0 )                { Serial.print("ERROR"); }                      //   Сообщаем об ошибке чтения.
     else                          { Serial.print(data, 0); }                      //   Выводим данные целочисленно.
                                     Serial.print("ppm, ");                        //   Выводим единицы измерения.
//   Читаем общее количество летучих органических соединений:                      //
     data = sensor.getTVOC();        Serial.print("TVOC=");                        //   Читаем данные.
     if( data < 0 )                { Serial.print("ERROR"); }                      //   Сообщаем об ошибке чтения.
     else                          { Serial.print(data, 0); }                      //   Выводим данные целочисленно.
                                     Serial.print("ppb.\r\n");                     //   Выводим единицы измерения.
}                                                                                  //