#include #include "tshield/tshield.h" static void tshield_init_servo(); void tshield_init() { DDRH |= (1 << 3) | (1 << 4); //leds PORTH &= ~( (1 << 3) | (1 << 4)); DDRE |= (1 << 3); PORTE &= ~(1 << 3); DDRG |= (1 << 5); PORTG &= ~(1 << 5); DDRE &= ~(1 << 4); // buttons PORTE |= (1 << 4); DDRH &= ~(1 << 5); PORTH |= (1 << 5); DDRB &= ~(1 << 4); PORTB |= (1 << 4); DDRB |= (1 << 6); PORTB &= ~(1 << 6); tshield_init_servo(); } #define WAIT_VALUE 20000 #define WAIT() \ for (volatile long x = 0; x < WAIT_VALUE; ++x){} void tshield_test() { while(1) { PORTG |= (1 << 5); WAIT(); PORTG &= ~(1 << 5); PORTE |= (1 << 3); WAIT(); PORTE &= ~(1 << 3); PORTH |= (1 << 3); WAIT(); PORTH &= ~(1 << 3); PORTH |= (1 << 4); WAIT(); PORTH &= ~(1 << 4); } } unsigned char tshield_read() { return ((PINE & (1 << 4) ? 0 : 1) << 2 ) | ((PINH & (1 << 5) ? 0 : 1) << 1 ) | (PINB & (1 << 4) ? 0 : 1); } void tshield_led(unsigned char led, unsigned char value) { volatile unsigned char* port; unsigned char bit; switch (led) { case 0: port = &PORTG; bit = 5; break; case 1: port = &PORTE; bit = 3; break; case 2: port = &PORTH; bit = 3; break; case 3: port = &PORTH; bit = 4; break; default: return; } if (value) { *port |= (1 << bit); } else { *port &= ~(1 << bit); } } void tshield_pp(unsigned char value) { if (value) { PORTB |= (1 << 6); } else { PORTB &= ~(1 << 6); } } void tshield_init_servo() { TCCR1A |= (1<= 0; --i) { debug_led((i + 1) % DEBUG_LEDS, 0); debug_led(i, 1); _wait(); } } }