前提・実現したいこと
XBeeとArduino化したATMega328P-PUチップを二つ使用して、シリアル通信でセンサーから受け取った値に対して、12V電圧のオンオフを制御したい。(土が乾いていたらポンプで水やりができるプログラム)
発生している問題・エラーメッセージ
土壌センサが読み取った値によって、乾燥していれば'T'をもう一方のXBeeに送信する。'T'を受け取れば電圧がかかるようになっている。初めに湿っている状態では電圧がかからなく、そこから乾燥状態にすれば電圧がかかったが、その後に湿っている状態に戻しても電圧がかかったままになってしまう。('T'がずっと送信された場合のループが繰り返される)
該当のソースコード
Arduino スケッチ
センサー側
const int SensorIn = A5;//土壌湿度センサー値取得ピン番号
//初期設定
void setup(){
Serial.begin(9600);
pinMode(SensorIn, INPUT);}
//機能:土壌湿度センサーの値を読み込む関数
int SensorRead(){
int SensorValue = 0;
for(byte i=0;i<=10;i++){ //A3ポートの電圧を10回読み平均値を出す
delay(10); //一定時間電流を流して測定値を安定させる
SensorValue = SensorValue + analogRead(SensorIn);
} //センサー電圧を10回読み合計する
return SensorValue / 10;} //センサー電圧平均値を返す
//メインループ
void loop(){
if(SensorRead()<350) { //土が乾燥していた場合以下実行
Serial.print('T'); // 文字'T'を送信
delay(10); // シリアル通信があふれないよう
}
}
受信側
const int Power = 8;//12V制御ピン番号
//初期設定
void setup(){
Serial.begin(9600);
pinMode(Power, OUTPUT);
}
//メインループ
void loop(){
if(Serial.available() > 0){ //土が乾燥していた場合以下実行
if (Serial.read() == 'T') {
digitalWrite(Power, HIGH);//水を出す
delay(5000);//5秒待つ
}
else{
digitalWrite(Power, LOW);
}
}//水を止める
digitalWrite(Power, LOW);
delay(1000);
}//1秒待つ
試したこと
センサー側で一度乾いた状態を作って、受信側が電圧を出力する状態にした後に、センサー側の電源を切っても受信側は’T’を受信した場合のループを繰り返した。
受信側の電源を切って、再度電源を入れると'T'を受信して起こるループは止まった。
ただもう一度乾いた状態を作って、湿った状態にしても電圧がかかる状態がループした。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/09 08:58
2019/04/09 09:13
2019/04/09 09:27
2019/04/09 09:37
2019/04/09 09:46
2019/04/09 12:23
2019/04/09 15:04
2019/04/10 02:28
2019/04/10 14:36