#include <avr/io.h>
#include <util/delay.h>
uint16_t adc_value;
uint8_t toggle;
uint8_t bit_value;
void setup() {
// put your setup code here, to run once:
pinMode(3, OUTPUT); // Tx
pinMode(5, OUTPUT);
pinMode(4, INPUT);
pinMode(0, OUTPUT);
// ADC Left Shift Result
ADMUX |= 1<<ADLAR;
// ADC Voltage Referrence
ADMUX |= 0<<REFS2|0<<REFS1|0<<REFS0; // Vcc is used as Voltage Referrence
// ADC Input Channel/s
ADMUX |= 0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0; // Use ADC1 on pin PB4 as ADC input
// ADC clock prescaler
ADCSRA |= 1<<ADPS2|1<<ADPS1|1<<ADPS0; // Use a divide by 128 Prescaler.
// Sysclock = 8MHz, ADCclk = 62.5 kHz (max)
ADCSRA |= 1<<ADEN; // Enable the ADC
sei();
}
void loop() {
ADCSRA |= 1<<ADSC; // Start the ADC conversion wait until conversion is finished.
_delay_ms(100);
adc_value = ADCL|(ADCH << 8);
bit_value= ADCH & 0x01; // Extract ADCH[0]
PORTB = (PORTB & ~(1 << 0)) | (bit_value << 0);
if(adc_value<30000){
digitalWrite(3, HIGH);
} else{
digitalWrite(3, LOW);
}
toggle ^= 1;
digitalWrite(5, toggle);
delay(1000);
}