Преобразование сигналов квадратурного энкодера

Аватар автора
Полезная техника для дома: советы и обзоры
void setup() { } void loop() { cli(); DDRD |= _BV(PD2); PORTD = 0; PORTD |= _BV(PD1) | _BV(PD0); register unsigned char old asm("r3"); register unsigned char oldZ asm("r4"); register unsigned char c1 asm("r5"); register unsigned char c2 asm("r6"); old = 0; c1 = 0; c2 = 0; oldZ = 0; while (true) { if ( ( (!old) && (PIND & _BV(PD0) ) ) || ( ((old) && !(PIND & _BV(PD0))))) { old = !old; c1++; if (c1 == 0) { c2++; } } if (c2 == 0x01 && c1 == 0xF4) { c1 = 0; c2 = 0; PORTD ^= _BV(PD2); } if (!oldZ && bit_is_set(PIND, PD1)) { oldZ = true; c1 = 0; c2 = 0; PORTD &= ~(_BV(PD2)); } if(oldZ && bit_is_clear(PIND, PD1)){ oldZ = false; } } }

0/0


0/0

0/0

0/0