我正在尝试使用 ATmega16 构建一个自动植物浇水系统。我们正在为我们的项目使用湿度传感器。以下是我们使用的湿度传感器的图像。
以下是我们使用的代码片段:
#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<<6); //Turning on conversion
while(ADIF==0);
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);
}
}
代码有什么问题吗?因为在燃烧它之后,我从模拟传感器输入得到湿土壤的低电压和干土壤的高电压,这没问题……但问题是,在 borh 情况下,我总是在 PC0 处得到高电压……没有变化在干湿土壤的值中..在这种情况下,实际问题在哪里..电路设计或代码有什么问题吗?还有一件事,谁能告诉我测量我从 PC0 获得的输出值的正确方法,这反过来又打开/关闭泵?