Estoy tratando de construir un sistema automático de riego de plantas con ATmega16. El siguiente es el fragmento de código que utilizamos:
#include<avr/io.h>
int adc(void);
void pump(void);
int adc_value;
int main(void)
{
DDRC=0x01; //Defining PC0 as output
ADCSRA=0x87; //Setting the mode of operation
ADMUX=0x00; //Selection of channel and bit alignment
while(1)
{
adc_value=adc(); //reading moisture level
pump(); //Pump activator routine
}
return 0;
}
int adc(void)
{
int lower_bits,higher_bits,result;
ADCSRA |= (1 << ADSC)|(1 << ADIF); //what is the meaning of this line?
while(ADCSRA & (1 << ADIF) == 0); //what is the meaning of this line?
lower_bits=ADCL;
higher_bits=ADCH;
result=lower_bits|(higher_bits<<8); //what is the meaning of this line?
return result;
}
void pump(void)
{
if(adc_value>=700) //Pump ON trigger point
{
PORTC|=(1<<0);
}
else if(adc_value<=600) //Pump Off trigger point
{
PORTC&=~(1<<0);
}
}
En el código anterior, no he entendido algunas líneas que he comentado. ¿Puede alguien explicar el significado de esas líneas y por qué se han utilizado?