arduino megaに、他の多くの関数を実行しながら、バックグラウンドで関数を実行させようとしています。
私がバックグラウンドで実行しようとしている関数は、風速計から風速を決定する関数です。データを処理する方法は、風速計が設定された期間中に行った回転数を読み取り、その時間にわたってその回転数を取得して風速を決定するという点で、走行距離計の方法と似ています。平均するデータが多いため、受信するデータがより正確に実行される期間が長くなります。
私が抱えている問題は、私が1秒に1回読み取りたいarduinoにも読み込んでいる他のデータがたくさんあることです。この1秒の時間間隔は、高精度の風データを提供するのに十分な回転が風速計によって完了されていないため、正確な風の測定値を取得するには短すぎます。
風センサー機能をバックグラウンドで実行し、プログラムの残りの部分が同時に実行され、他のデータが1秒ごとに更新されている間に、5秒ごとにグローバル変数を更新する方法はありますか?
これが、風向風速センサーからデータを読み取るために持っているコードです。風向風速センサーが回転するたびに、信号が0として読み込まれる部分があります。それ以外の場合、センサーは0より大きい整数として読み込まれます。
void windmeterturns(){
startime = millis();
endtime = startime + 5000;
windturncounter = 0;
turned = false;
int terminate = startime;
while(terminate <= endtime){
terminate = millis();
windreading = analogRead(windvelocityPin);
if(windreading == 0){
if(turned == true){
windturncounter = windturncounter + 1;
turned = false;
}
}
else if(windreading >= 1){
turned = true;
}
delay(5);
}
}
の残りの処理は別の関数で行われますが、これは私が現在苦労している関数です。コード全体を投稿することは、1000行に近いため、ここでは実際には合理的ではありません。
残りの関数はループ内で1秒の遅延で実行されますが、試行錯誤の結果、他の関数の処理とともに遅延が発生するため、遅延は実際には1秒より長くなり、それに基づいて変化します。他のセンサーからどのような種類のデータを読み込んでいるので、タイミングの5ループカウンターはここでは機能しないと思います
割り込みがあなたのために仕事をするようにしましょう。
つまり、タイマー割り込みを使用して、バックグラウンドでのアナログ読み取り値を測定する定期的な割り込みを生成することをお勧めします。その後、これは静的揮発性変数を更新できます。
タイマー割り込みの使用方法の詳細については、同様のシナリオであるため、ここで私の回答を参照してください。ここで、callback()を上記のanalogreadおよびincrementに置き換えることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加