Энкодер да я с вами полностью согласен. Но в данном случае не подходит. Суть примерно такая же как у дверного замка ключ крутиться, а замок нет и они между собой не связаны. SureKey посмотрите. Суть устройства такая же как у ключ, оно вращается, обратной связи от второй части устройства нет, потому что она строго механическая. По этому все вращения должны фиксироваться только в подвижном устройстве и все. В этом вся и проблема.
Точность видите мне нужно только сделать фиксацию вращения 180 потом снова 180 и записать имитацию извлечения ключа. Т.е. перемещение ключа по оси Х в отрицательную сторону. Какая тут точность нужна, ну не знаю. Я нашел вот такую статью
Тут пример который скетчь один работает нормально.
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "math.h"
MPU6050 mpu;
int16_t accY, accZ;
float accAngle;
void setup() {
mpu.initialize();
Serial.begin(9600);
}
void loop() {
accZ = mpu.getAccelerationZ();
accY = mpu.getAccelerationY();
accAngle = atan2(accY, accZ)*RAD_TO_DEG;
if(isnan(accAngle));
else
Serial.println(accAngle);
}
Вроде все отлично, но странно функция atan работает в диапазоне от 0 до 180, а atan2 в диапазоне от 0 до 360. Но датчик показывает данные с 0 => 180 => 160 => 100 .....=> 0 почему не показывает 360? эта функция должна вроде показывать? Я бы в принципе указал что отметка в 360 прошла и все ок горит лампочка, а лучше не 360 а прошел диапазон 340-360 (если так можно написать в С++) constrain(x, a, b) почему то так не работает у меня(((
А статью которую вы скинули я смотрел, но не совсем понял что и как тут, тут много чего и мне для начала нужно хотя бы что то сделать на имеющемся датчике mpu6050, а потом уже заказать этот датчик который в вашей статье.Потому что мне все равно нужно будет не одно устройство.