我正在尝试用at 16建立一个自动的植物浇水系统。其逻辑是,传感器将在PA0上给出一个模拟输入,并将其与预设的值进行比较,以打开/关闭水泵。
下面是我们使用的代码片段:
#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); //Turn on conversion and clear flag
while(ADCSRA & (1 << ADIF) == 0); //wait for flag
lower_bits=ADCL;
higher_bits=ADCH;
result=lower_bits|(higher_bits<<8); //Accessing converted value by shifting
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);
}
}密码有什么问题吗?因为燃烧后,我得到了低电压**(0.15**)的湿土和高电压(4.84),从模拟传感器输入,这是好的…。但问题是,在这两种情况下,我都是,电压像0.7 (有时类似于0.15) (我正在使用万用表来测量这个值)。在PC0,干土和湿土的数值没有变化。在这种情况下,实际问题在哪里?电路设计或代码有什么问题吗?
发布于 2015-12-10 07:41:23
你把AREF连接到5V了吗?你另一个类似帖子的线路示意图没有显示出来。
作为附带说明,您可以考虑使用ADLAR,左对齐。然后你只需要看一个字节,因为你似乎并不关心10位的精确性。
https://stackoverflow.com/questions/34187769
复制相似问题