volatile unsigned int temp, counter = 0 ; // Эта переменная будет увеличиваться или уменьшаться в зависимости от вращения датчика
void setup () {
Последовательный. начало ( 9600 );
pinMode ( 2 , INPUT_PULLUP); // внутренний входной вывод 2
pinMode ( 3 , INPUT_PULLUP); // внутренний เป็น подтягивающий входной контакт 3
// Настройка прерывания
// Нарастающий импульс от кодируемого активируется ai0 (). AttachInterrupt 0 - это DigitalPin номер 2 на Arduino.
attachInterrupt ( 0 , ai0, RISING);
// B восходящий импульс от кодируемого активированного ai1 (). AttachInterrupt 1 - это DigitalPin № 3 на Arduino.
attachInterrupt ( 1 , ai1, RISING);
}
void loop () {
// Отправляем значение счетчика
if (counter! = temp) {
Последовательный. println (счетчик);
темп = счетчик;
}
}
void ai0 () {
// ai0 активируется, если DigitalPin nr 2 переходит с LOW на HIGH
// Проверьте вывод 3, чтобы определить направление
if ( digitalRead ( 3 ) == LOW) {
Счетчик ++;
} еще {
counter--;
}
}
void ai1 () {
// ai0 активируется, если DigitalPin nr 3 переходит с LOW на HIGH
// Проверка с контактом 2, чтобы определить направление
if ( digitalRead ( 2 ) == LOW) {
counter--;
} еще {
Счетчик ++;
}
}
При вращении в одну сторону энкодер выдает понятные числа 1 2 3 ..., а в другую при прохождении "0" начинает с 65535, 65534, 65533...
Почему так, как исправить?
Извините, я не программист... я пробовал int менять на long
Подскажите пожалуйста что нужно изменить, дописать чтобы при вращении энкодера появились отрицательные значения(...-3,-2,-1,0,1,2,3...).
Извините, я не программист... я пробовал int менять на long
Подскажите пожалуйста что нужно изменить, дописать чтобы при вращении энкодера появились отрицательные значения(...-3,-2,-1,0,1,2,3...).
Код вставьте правильно.
volatile unsigned int temp, counter = 0 ; // Эта переменная будет увеличиваться или уменьшаться в зависимости от вращения датчика void setup () { Последовательный. начало ( 9600 ); pinMode ( 2 , INPUT_PULLUP); // внутренний входной вывод 2 pinMode ( 3 , INPUT_PULLUP); // внутренний เป็น подтягивающий входной контакт 3 // Настройка прерывания // Нарастающий импульс от кодируемого активируется ai0 (). AttachInterrupt 0 - это DigitalPin номер 2 на Arduino. attachInterrupt ( 0 , ai0, RISING); // B восходящий импульс от кодируемого активированного ai1 (). AttachInterrupt 1 - это DigitalPin № 3 на Arduino. attachInterrupt ( 1 , ai1, RISING); } void loop () { // Отправляем значение счетчика if (counter! = temp) { Последовательный. println (счетчик); темп = счетчик; } } void ai0 () { // ai0 активируется, если DigitalPin nr 2 переходит с LOW на HIGH // Проверьте вывод 3, чтобы определить направление if ( digitalRead ( 3 ) == LOW) { Счетчик ++; } еще { counter--; } } void ai1 () { // ai0 активируется, если DigitalPin nr 3 переходит с LOW на HIGH // Проверка с контактом 2, чтобы определить направление if ( digitalRead ( 2 ) == LOW) { counter--; } еще { Счетчик ++; } }В дезоксирибонуклеиновой кислоте. И немножко в гугол транслаторе.
Иван83 - вы офигели? - зачем вы команды языка перевли на русский?
))))))))
Это автоматом переводчик перевел!
Спасибо!
При вращении в одну сторону энкодер выдает понятные числа 1 2 3 ..., а в другую при прохождении "0" начинает с 65535, 65534, 65533...
Почему так, как исправить?
Потому что тип int безнаковый?
Извините, я не программист... я пробовал int менять на long
Подскажите пожалуйста что нужно изменить, дописать чтобы при вращении энкодера появились отрицательные значения(...-3,-2,-1,0,1,2,3...).
Извините, я не программист... я пробовал int менять на long
Подскажите пожалуйста что нужно изменить, дописать чтобы при вращении энкодера появились отрицательные значения(...-3,-2,-1,0,1,2,3...).
Убрать unsigned