#include #include #include #define output(directions,pin) (directions |= pin) // set port direction for output #define set(port,pin) (port |= pin) // set port pin #define clear(port,pin) (port &= (~pin)) // clear port pin #define pin_test(pins,pin) (pins & pin) // test for port pin #define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set #define green (1 << PD7) #define red (1 << PD5) #define blue (1 << PA7) #define led1 (1 << PB3) #define TX (1 << PD1) #define RX (1 << PD0) #define F_CPU 16000000 // 16 MHz oscillator. #define BaudRate 9600 #define MYUBRR (F_CPU / 16 / BaudRate ) - 1 #define upCount 1257 volatile uint16_t greenAngle; volatile uint16_t redAngle; volatile uint16_t blueAngle; uint16_t count = 0; // Servo init ///////////// void init_pwm() { TIMSK = (1<< TOIE2); //enables oveflow interrupt TCCR2 = (1<< CS20); //1 prescale, CTC, toggle on reach } void sprayG(){ greenAngle = 103; return; } void sprayR(){ redAngle = 102; return; } void sprayB(){ blueAngle = 99; return; } void stopG(){ greenAngle = 127; return; } void stopR(){ redAngle = 125; return; } void stopB(){ blueAngle = 105; return; } ///////Serial communication init void delayLong() { unsigned int delayvar; delayvar = 0; while (delayvar <= 65500U) { asm("nop"); delayvar++; } } unsigned char serialCheckRxComplete(void) { return( UCSRA & _BV(RXC)) ; // nonzero if serial data is available to read. } unsigned char serialCheckTxReady(void) { return( UCSRA & _BV(UDRE) ) ; // nonzero if transmit register is ready to receive new data. } unsigned char serialRead(void) { while (serialCheckRxComplete() == 0) // While data is NOT available to read {;;} return UDR; } void serialWrite(unsigned char DataOut) { while (serialCheckTxReady() == 0) // while NOT ready to transmit {;;} UDR = DataOut; } //<>8); UBRRL = (unsigned char) MYUBRR; /* Enable receiver and transmitter */ UCSRB = (1<