shadowjack> я в строю.
Изучил исходный код
программы L3G4200d, которая "на моем языке" называется "Угловая скорость" (УС).
На всякий случай даю описание кода, как я его "вкурил".
Во введении
- подключается стандартная библиотечная процедура Wire,
- назначаются номера регистров согласно даташиту на сенсор,
- назначается адрес сенсора (чип L3G4200d) по шине I2C,
- назначаются переменные ХУZ для отсчетов угловой скорости.
Перед началом циклической работы
- активизируется стандартная процедура Wire,
- устанавливается скорость обмена данными по USB,
- устанавливается шкала (диапазон) измерений угловой скорости,
- дается задержка в полторы секунды.
В основном цикле
- примерно 10 раз в секунду в переменные XYZ считываются составляющие (отсчеты) вектора угловой скорости путем вызова процедуры GetGyroValues
- принятые отсчеты передаются по USB.
Процедура getGyroValues
- обращается к сенсору по I2C,
- после получения 8-разрядных фрагментов MSB и LSB объединяет их в один 16-разрядный отсчет,
- возвращает три значения X Y Z.
Процедура setupL3G4200d
- конфигурирует сенсор, записывая по I2C в регистры сенсора необходимые числа в соответствии с предписанным значением шкалы (диапазона).
Процедуры readRegister и writeRegister
- регламентируют вызов стандартной библиотечной процедуры Wire.
Вопросы технические:
1) почему getGyroValues и writeRegister задаются оператором void,
а setupL3G4200d и readRegister задаются оператором int ??
(я понимаю разницу между подпрограммой-процедурой и подпрограммой-функцией)
2) правильно ли я понимаю, что стандартная библиотечная процедура Wire
как раз и является указанием на обмен данными по протоколу/шине I2C ??
Вопрос по существу:
Если я начну дописывать код в пределах рабочего цикла LOOP, уцепившись за значения отсчетов угловых скоростей XYZ - с целью управлять клапанами, не вызовет ли это сбои при обращении к процедурам ?