#define set0(r,b) r&= ~(1<<b)
#define set1(r,b) r|= 1<<b
#define test(r,b) (r&(1<<b))
float compareVoltage1 = 1.0;
float compareVoltage2 = 2.0;
float compareVoltage3 = 3.0;
float compareVoltage4 = 4.0;
void setup() {
set0(DDRB,2);
set1(PORTB,2);
set0(DDRB,3);
set1(PORTB,3);
set0(DDRB,4);
set1(PORTB,4);
set0(DDRB,5);
set1(PORTB,5);
set0(DDRC,2);
set1(PORTC,2);
Serial.begin(9600);
set1(PCICR,PCIE0);
set1(SREG,7);
set1(PCMSK0,PCINT2);
set1(PCMSK0,PCINT3);
set1(PCMSK0,PCINT4);
set1(PCMSK0,PCINT5);
set1(PCICR,PCIE1);
set1(PCMSK1,PCINT10);
set1(DDRC,0);
set0(DDRD,2);
}
void loop() {
// put your main code here, to run repeatedly:
}
ISR(PCINT0_vect)
{
float voltage = analogRead(A0) * (5.0 / 1023.0);
if (test(PINB,2) == LOW) {
compareVoltage1 = voltage;
}
if (test(PINB,3) == LOW) {
compareVoltage2 = voltage;
}
if (test(PINB,4) == LOW ) {
compareVoltage3 = voltage;
}
if (test(PINB,5) == LOW ) {
compareVoltage4 = voltage;
}
compareAndUpdateLED(voltage);
}
void compareAndUpdateLED(float voltage) {
if (voltage > compareVoltage1) {
set1(PORTD,2);
} else if (voltage > compareVoltage2) {
set1(PORTD,2);
} else if (voltage > compareVoltage3) {
set1(PORTD,2);
} else if (voltage > compareVoltage4) {
set1(PORTD,2);
} else if (voltage < compareVoltage1) {
set0(PORTD,2);
} else if (voltage < compareVoltage2) {
set0(PORTD,2);
} else if (voltage < compareVoltage3) {
set0(PORTD,2);
} else if (voltage < compareVoltage4) {
set0(PORTD,2);
}
}
ISR(PCINT1_vect)
{
if(test(PINC,2) == 0)
{
Serial.println(analogRead(A0));
}
}