Как работает энкодер?

нет так ошибка
C:\Users\tany\AppData\Local\Temp\ccscyECR.ltrans0.ltrans.o: In function main': C:\Users\tany\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/main.cpp:46: undefined reference to loop’
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

у меня тоже на ровном месте были но победил

Скобки проверьте, у меня нет ошибки

Спойлер
//Энкодер на пинах А0, А1. Используется внутренняя подтяжка.
volatile int enc, motor_position;

#define STEP_PIN         2
#define DIR_PIN          5
#define ENABLE_PIN       8

void setup(){                
Serial.begin(9600);
pinMode(A0,INPUT_PULLUP);
pinMode(A1,INPUT_PULLUP);
PCIFR=PCIFR; PCICR=1<<PCIE1; //разрешить прерывание
PCMSK1=1<<PCINT8 | 1<<PCINT9; //выбрать вход на котором сработает прерывание
pinMode(2, OUTPUT);   
pinMode(5, OUTPUT);
pinMode(8, OUTPUT);
}

ISR(PCINT1_vect)
{
static char EncPrev=0;      //предыдущее состояние энкодера
static char EncPrevPrev=0;  //пред-предыдущее состояние энкодера
 char EncCur = 0;
 if(!(PINC & (1 << PC0))){EncCur  = 1;} //опрос фазы 1 энкодера
 if(!(PINC & (1 << PC1))){ EncCur |= 2;} //опрос фазы 2 энкодера
 if(EncCur != EncPrev)             //если состояние изменилось,
 {
  if ((EncPrev == 0 && EncCur == 1) || (EncPrev == 3 && EncCur == 2))
  { 
       enc++;
       digitalWrite(DIR_PIN    , LOW);
   	digitalWrite(ENABLE_PIN , LOW);
       digitalWrite(STEP_PIN    , HIGH);
       if(EncPrev%2) {
       digitalWrite(STEP_PIN    , LOW);
       ++motor_position; 
       }
   } 		
   	
  if ((EncPrev == 1 && EncCur == 0) || (EncPrev == 2 && EncCur == 3))
    {                    
       enc--;
       digitalWrite(DIR_PIN    ,HIGH );
   	digitalWrite(ENABLE_PIN , LOW);
       digitalWrite(STEP_PIN    , HIGH);
       if(EncPrev%2) {
       digitalWrite(STEP_PIN    , LOW);
       ++motor_position;	
       }	
   }
   EncPrevPrev = EncPrev;          //сохранение пред-предыдущего состояния
   EncPrev = EncCur; 
   }              //сохранение предыдущего состояния
 }
 




void loop() {
Serial.println(enc);

}

первые тесты и пока без дребезга и ловит сотки ,потеря составила 0.02 - 0.05 соток на десятот подач и останоаок. и это. на
delay(1)
а у меня на нем десятки на старом коде терялимь а тут сотки
мы от него позже избавимся
сейчас по всем скоростям погоняю и поставлю макросы.

на счет лимита итд . это все есть и работает
я пока код не выставлял рока видио не мделаю новое что ьы форумчане понимали что да как работает
только теперь джостик мне придется переделывать карту ведь ор бвл у меня на A0 ,а теперь тут энкодер висит
разберусь

да . спасибо . все правильно работает
теперь 2 кода буду сравнивать и тестить.
к тестам все готово
позже выложу результаты

идут испытания вашего кода на мотор и его точность . я его немного изменил и он перестал терять сотки .
свой я буду тэстить по полной. на днях когда ваш отточу .
у моего нет дребезга . мне придется разобраться откуда он у вас есть ведь основа одна . благодарность Иван Иванычу .
скоро загрузиться видео на ютуб о точности исполнения
там в середине был сбой , я на провод наступил . в конце видео можно судить о точности .
у себя в теме я позже все выложу , как оформлю encoder на точность. . dtg printer Ч 4

Дим-мычъ
я сделал два одинаковых кода , с джостиком кнопками лимитом и энкодером мотором ,
мы с вами сделали энкодер на мотор поразному. и я их тестировал
точность одинаковая , а вот ложные срабатывания у вас много а на моем совсем ни одного не было . , я не знаю почему.
ваш код очень похож на те как я раньше испытывал и на тех тоже были ложные срабатывания но там не было такой точности … спасибо Иван Иванычу ,.
если бы не этот код и не было бы диалога с вами у меня бы так лихо не получилось бы ,
я код выложу здесь мотор и энкодер а в своей теме со всеми дописками джостиком кнопками и лимитом ., если конечно он сдесь нужен. , напишите
если не нужен то только в своей теме как проведу дополнительные тесты. .

Я написал лишь потому, что вы написали выше:

Если у вас всё уже норм, то и не заморачивайтесь с моим кодом. По идее код из #120 должен правильно работать.

А у вас есть аппаратный антидребезг? Если нет, то см. посты выше, как сделать.
Минимальный антидребезг - по конденсатору 0.01 - 0.033мкф на пины энкодера.
Можно ещё добавить небольшие задержки в коде.

у него оптический энкодер 600 тиков на оборот, если мне память не изменяет

У оптического энкодера нет дребезга.
А аппаратное устранение дребезга, это не конденсаторы, а специализированная микросхема.
Допустим MC14490

нет , у меня магнитный энкодр , это китайци пишут что оптический а высылают магнитный , я сразу отзывы не почитал все там тоже про это писали. , но ничего мы справились
у меня есть обычная крутилка см. фото
если нужно проверю на дребезг и точность на том коде что у меня на мотор и микрометром

кто тебе сказал, что магнитный?

То что были дребезг помехи и в отзывах писали на али у того продавца у которого покупал
Но теперь я уже не знаю , ни дребезго ни помех ничего , он работает чисто и ни одной сотки не теряет . гоняю его два чвса
на таком и гитару делать можно

поинтересуюсь, а специальность у тебя какая?

если ответишь на вопрос кто изобрел шариковую задвижку и вмкаком на нее был получен патент я тебе расскажу .
на вики можешь не искать . такое только знают теиу кого на руках есть этот патент , подумай

не, не отвечу, я жеж дзен-буддист
PS просто ты с таким воодушевлением говоришь, что получилось…я в твою схему не въехал, а у меня в обслуживании были станки с точностью на фрезеровании 2 микрона, и координатные 1 микрон, я то более чем уверен что жить этому энкодеру осталось совсем немного, у тебя два шаговых двигателя от одного контроллера запитаны и один рабочий а второй крутит энкодер, я правильно понял?

Имеется в виде музыкальный инструмент или узел станка?

Неужели патентовед?

как вы можете говорить , я более чем уверен вы кто ?

нет не верно , от разных контроллеров на крайним видео это можно с легкостью понять так как в руках я держу управляющую программу. без провода , у. меня на uno видел модуль вайфай ,?

если бы я что-то понял я бы не спрашивал

У меня возникла пока не решаемая проблема .
все работает хорошо , энкодер мотор лимит кнопка джостик
но если я погоняю джостиком каретку , начинаются проблемы станок теряет сотки пока не сделаешь ресет контролеру
код я правлю уже час и ничего не помогает. .
кто знает аппаратные проблемы uno ?
если энкодер подключен A0 и A1 а джостик. A4. может в процессе A4 забрать функцию A0 ?
у меня еще раньше такое ощущения были когда я забыл прописать номер пина A4 а оставил только analogRead и джостик работал а я офигел от “ИИ” своего контролера

больше 12 вольт на разъём питания не следует подавать