Спасибо. Увеличил количество импульсов. Пока стабильно переходит в 1.
Даже время записи анализатора увеличил до 5 секунд. Нолика не заметил.
Надеюсь нормально будет. Прилагаю скрины.
Записывал 100секунд(максимальное время в анализаторе) -полёт нормальный.
на втором вложил скрин монитора порта, результат преобразования даты в десятичную цифру-смотрим на длинную. Короткая-попытка превратить её в милиметры.
прикладываю весь скетч. Правильно ли происходит считывание бит? (убрал гору коментов, что то тут совсем не смотриться)))
const int CLOCK_PIN = 11; // к пину 11 подключаем CLK
const int DATA_PIN = 10; // к пину 10 подключаем DO data
unsigned long sample1; //создали пременую с именем sample1 которая может содержать отчень большое число
unsigned long mm; //создали переменную mm-попытка получить градусное значение в милиметры
void setup() {
pinMode(DATA_PIN, INPUT); //назначили 10 пин как пин для выхода данных
pinMode(CLOCK_PIN, OUTPUT); //назначили 11 пин как пин для выхода данных
//give some default values- задайте значения по умолчанию
digitalWrite(CLOCK_PIN, HIGH); // при старте ардуины 11 пин установлен на высокий уровень (1)
Serial.begin(19200); //запусаем монитор порта на скорости 19200
}
void loop() {
unsigned long reading = readPosition(); //создаем переменную reading и тут-же считыываем ее значение из функции readPosition();
Serial.println(reading, DEC); //печатаем значение переменной reading в формате DEC .
delay(40); //задержка на 20 микросекунд
}
//прочитать текущее угловое положение
int readPosition() { // это функция, набор команд, в которой вычесляется значение переменной reading
unsigned long sample1 = shiftIn(DATA_PIN, CLOCK_PIN, 24); //24считывем значение и записываем его в переменную sample1
delayMicroseconds(1); // часов высок на 20 микросекунд прежде чем новый образец можно принять
unsigned long mm = sample1/223; //попытка перевести в миллиметры
Serial.println(mm, DEC); //распечатал
return sample1; //а если равны возвращаем значение sample1
}
// чтение байта данных из цифрового входа платы.
unsigned long shiftIn(const int DATA_PIN, const int CLOCK_PIN, const int bit_count) { // опять создали
unsigned long data = 0; //создали переменную data и приравняли ее к 0
for (int i=0; i<26; i++) { //24 раз записываем в 11 пин то 0 то 1 через 1 микросекунду со здвигом переменной data в лево на еденицу24
data <<= 1; //сдвигает переменную data влево на 1
digitalWrite(CLOCK_PIN, LOW); // записываем ноль
delayMicroseconds(2); //задержка на 1 микросекунду
digitalWrite(CLOCK_PIN, HIGH); // записываем ноль
delayMicroseconds(1); //задержка на 1 микросекунду
data |= digitalRead(DATA_PIN); //считываем значение с 9 пина и записывае его в переменную data со сдвигом
}
return data; //возвращает значение переменной data
}
Пы.Сы. Я сейчас смотрю цифры с монитора порта. Отключаю питание энкодера(24в), питание Arduino не отключаю. Цифры во время выключения превращаються в нули, а потом в какую то другую. Чё за хрень, энкодер как и положенно не выдаёт ничего(анализатор подтверждает), а циферки не в нолях

.
Гдето в скетче засада есть.