volatile int HORZ, VERT;
ISR(ADC_vect)
{
ADMUX = 0;
ADCSRA |= (1 << ADSC); //включаем преобразование
while((ADCSRA & (1 << ADIF)) == 0); //проверяем флаг конца преобразования
_delay_ms(10);
VERT = ADC;
ADMUX = 1;
ADCSRA |= (1 << ADSC); //включаем преобразование
while((ADCSRA & (1 << ADIF)) == 0); //проверяем флаг конца преобразования
_delay_ms(10);
HORZ = ADC;
switch(HORZ)
{
case 0:
switch(VERT)
{
case 0: //зеленый
OCR4A = 0;
OCR4B = 255;
OCR4C = 0;
break;
case 512: //желтый
OCR4A = 255;
OCR4B = 255;
OCR4C = 0;
break;
case 1023: //оранжевый
OCR4A = 255;
OCR4B = 100;
OCR4C = 0;
break;
}
break;
case 512:
switch(VERT)
{
case 0:
OCR4A = 0; //голубой
OCR4B = 125;
OCR4C = 255;
break;
case 1023: //красный
OCR4A = 255;
OCR4B = 0;
OCR4C = 0;
break;
}
break;
case 1023:
switch(VERT)
{
case 0: //синий
OCR4A = 0;
OCR4B = 0;
OCR4C = 255;
break;
case 512: //фиолетовый
OCR4A = 125;
OCR4B = 0;
OCR4C = 255;
break;
case 1023: //белый
OCR4A = 255;
OCR4B = 255;
OCR4C = 255;
break;
}
break;
}
}
int main(void)
{
Serial.begin(115200);
sei();
DDRA = 0; //PORTA вход
DDRH = (1 << PH5)|(1 << PH4)|(1 << PH3); //настраиваем на выход
TCCR4A = (1<<COM4A1)|(1<<COM4B1)|(1<<COM4C1)|(1<<WGM40); //ШИМ, 8-bit
TCCR4B = (1<<CS41)|(1<<CS40); //предделитель = 16
ADMUX = (1<<REFS0); //настройка АЦП
ADCSRA = (1<<ADEN)|(1<<ADSC)|(0 << ADPS2)|(0 << ADPS1)|(0 <<ADPS0)|(1 << ADIE);
while(1)
{
}
}