Приобрел вот такие оптические энкодеры, что бы контролировать передвижения робота Подключил к 2 и 3 пину для работы с помощью прерываний (драйвер двигателя ни к чему не подключен) Код (Text): int enc_l_count,enc_r_count; boolean changed; void l_inc(){ enc_l_count++; changed = true; } void r_inc(){ enc_r_count++; changed = true; } void setup() { Serial.begin(9600); enc_l_count = 0; enc_r_count = 0; //Encoders attachInterrupt(0, r_inc, RISING); attachInterrupt(1, l_inc, RISING); changed = false; } bool write(){ Serial.print("Left: "); Serial.print(enc_l_count); Serial.print(" Right: "); Serial.println(enc_r_count); } void loop() { if (changed){ write(); changed = false; } } В итоге получаются такие результаты Показания крайне не стабильные, шаг всегда разный, часто происходят огромные скачки, в чем может быть причина?
Для начала перед int enc_l_count,enc_r_count; вроде как лучше добавить volatile для предотвращения изменения переменной в функции обработки прерывания при обращении к ней в основной программе. перед boolean changed; тоже.
Схематику датчиков или фото крупным планом выложите. Проблема может быть в паразитной засветке фотодиода и если у датчика нет триггера Шмидта, тогда на один фронт может быть выдана целая пачка ложных.