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);
}
}
コードに何か問題がありますか? それを燃やした後、アナログセンサー入力から湿った土壌には低電圧が、乾燥した土壌には高電圧が得られますが、問題は、ボーリングの場合、PC0で常に高電圧が得られることです..変化はありません乾いた土と湿った土の値..そのような場合、実際の問題はどこにありますか..回路設計またはコードに何か問題がありますか? もう1つ、ポンプのオン/オフを切り替えているPC0から取得している出力値を測定する適切な方法を教えてください。