#include #define PACKS 64 // number of packets to send PROGMEM prog_int16_t sinewave[] = { #include "sinetable.inc" }; unsigned int location = 0; byte value0 = 0; byte value1 = 0; byte value2 = 0; byte value3 = 0; byte value4 = 0; byte value5 = 0; byte x = 0; byte color = 1; byte packet = 0; byte flag = 0; byte red = 0; byte blue = 0; byte green = 0; byte redtemp = 0; byte bluetemp = 0; byte greentemp = 0; void setup() { // setup io PORTD |= (1<> 8); unsigned int temp5 = (location + 341) & 0x03ff; temp4 = pgm_read_word_near(sinewave + temp5); // bluetemp = 0x80 + (temp4 >> 8); temp5 = (location + 683) & 0x03ff; temp4 = pgm_read_word_near(sinewave + temp5); // greentemp = 0x80 + (temp4 >> 8); redtemp = value0; bluetemp = value1; greentemp = value2; flag = 0; // reset start flag } } ISR(ADC_vect) { byte temp1 = ADCH; // add to temp register ++x; if (x == 1) value0 = temp1; else if (x == 2) value1 = temp1; else if (x == 3) value2 = temp1; else if (x == 4) value3 = temp1; else if (x == 5) value4 = temp1; else { value5 = temp1; x = 0; } ADMUX = 0x60 | x; ADCSRA = 0xdf; } ISR(USART_TX_vect) { if (packet == 0) { // send out packet start sequence UCSR0B &= ~(1< 0) { asm volatile("nop"); --temp3; } PORTD |= (1< 0) { asm volatile("nop"); --temp3; } UCSR0B |= (1<