Собственно все началось с того, что мне нужно было проверять датчики, подключенные к arduino, даже тогда, когда я вывожу информацию в терминал.
Проверяя длину одного цикла loop() обнаружил, что при выводе информации в порт, время цикла резко возрастает.
Начал выяснять, и обнаружил, что класс HardwareSerial при выводе данных в COM порт переходит в состояние ожидания опустошения буфера обмена.
Микроконтроллеры Atmega имеют хардварную поддержку интерфейса I2C(TWI). Линии интерфейса SDA и SCL у МК Atmega8/168/328, сидят на ножках c номерами 27 (PC4) и 28 (PC5), соответственно.
На платах Arduino, линия данных — SDA (data line) выведена на аналоговый пин 4, а линия тактирования — SCL (clock line) выведена на аналоговый пин 5.
На Arduino Mega, SDA — это цифровой пин 20, а SCL — цифровой пин 21.
На нашей CraftDuino, i2c, помимо стандартных пинов, удобно выведен на отдельный разъём (4 обычных пина с шагом 2.54), а так же добавлены два джампера, которыми можно подключить подтягивающие резисторы.
Для работы с протоколом I2C, у Arduino есть штатная библиотека Wire, которая позволяет взаимодействовать с I2C/TWI-устройствами, как в режиме мастера, так и в режиме слейва.
SHARP-GP2Y0A710K0F — это ИК-датчик измерения расстояния с большим диапазоном определения: от 100 до 550 см
и работающий по принципу триангуляции.
Подробнее про датчик можно прочитать в заметке — Датчик измерения расстояния SHARP-GP2Y0A710K0F
— там рассмотрены характеристики датчика и написан скетч, считывающий напряжение выдаваемое сенсором с аналогового входа контроллера Arduino/CraftDuino.
Теперь же, рассмотрим пересчёт напряжения датчика в расстояние до объекта.
В Arduino IDE версии 1.0, разработчики переименовали файл WProgram.h в Arduino.h, поэтому, чтобы старые библиотеки заработали в новой IDE — нужно просто открыть файлы библиотеки (.h и .cpp) и если в них встречается строчка