В предыдущих частях от [iv\_s][1] ([раз][2] [два][3] [три][4]) были описаны различные техники использования C и Ruby вместе. Я бы хотел рассказать о еще одной возможной связке – использовании уже существующих системных C-функций. Я потихоньку улучшаю своего [робота-рисовача][5]. Он написан на Ruby, поэтому при подключении к нему акселерометра с гироскопом, мне, само собой, захотелось продолжить использовать эту технологию. Как оказалось, достучаться до функций работы с шиной I2C в Ruby предельно просто – он позволяет использовать уже написанные и установленные библиотеки на C.
Схема работы такая: на RaspberryPi запущен Sinatra сервер, который при обращении отдает данные о повороте платы по осям X и Y, а также расстояние до ближайшего препятствия в сантиметрах. На клиенте для визуализации и отладки написан простой скрипт с использованием [Raphael3d.js][6], который каждые 100мс опрашивает устройство и поворачивает схематическую плату в соответствии с положением платы физической. [Читать дальше →][7]
[1]:
http://habrahabr.ru/users/iv_s/
[2]:
http://habrahabr.ru/post/48928/
[3]:
http://habrahabr.ru/post/49202/
[4]:
http://habrahabr.ru/post/50039/
[5]:
http://www.partisanink.com/versions/2.5
[6]:
http://mech.fsv.cvut.cz/~stransky/en/software/raphael3d/
[7]:
http://habrahabr.ru/post/259675/#habracut