センサーの2つのデータ間の時間を計算する

私は大学のプロジェクトに取り組んでおり、時間を計算するのに問題があります。私は、コンベア上を移動している箱の最大距離と最小距離を計算するために使用するコンベアとIRセンサーを持っています。次に、ボックスの最大距離と最小距離の間の時間を計算します。私はタイミングのためにmillis()を使用しましたが、正確ではありません。 ここに私のコードです:

int IRpin = 0;
float volts, distance,firstdata;
int k = 0;
float min;
float mang[150];
int m;
void setup() {
Serial.begin(9600);
}

void loop() {
volts = analogRead(IRpin) * 0.0048828125;
distance = 13 * pow(volts, -1.10);
if (distance < 20)
{
Serial.println(distance);
mang[k] = distance;
k++;
}
else
{
if (k > 0)
{
  min = mang[0];
  for (int i = 1; i < k; i++)
  {

    if (min > mang[i])
    {
      min = mang[i];
      m = i;
    }
  }
  firstdata=mang[1];
  }

私はセンサが私に送るデータを配列に格納します。今、最初のデータ[mang(1)]と[(min)]の間の時間を計算したいと思います。私は0A41SKシャープIRセンサーを使用します。 あなたの時間をありがとう、私の悪い英語のために申し訳ありません。

1
millis()は正確ではありませんか?どんな正確さが必要ですか?
追加された 著者 Sprogz,
第1 - あなたのコードを適切にフォーマットしてください。ほとんどの人はそれが今のようにそれを見て気にしません。第2回 - あなたのコードにmillis()やその他のタイミングコールはありません。 3番目 - 最小値を見つけるためにmang配列のみを使用する場合 - 配列はまったく必要ありません - 最後の最小値(そして最終的にはその時間)を覚えておいてください。これにより600バイトのメモリが節約され、距離の第151回目の読書時には、20分の4分 - '分'は変数名にとっては良い選択ではありません - マクロとして定義されることが多く、問題が発生します。
追加された 著者 Syed Nazrul Hassan,

2 答え

さて、ちょっと書いてください(適切なタブ区切りなど)、これを理解するためにはコメントが長いでしょう。なぜなら、人々はここで起こっていることを解読する時間を投資したくないからです彼らがいなければ。私はここで何が起こっているのかは完全には分かっていませんが、距離の最小値と最大値が何であるかを検出し、その時間を記録する方法です。これらの瞬間のそれぞれが発生しました。

私は、最大と最小距離とその時間を格納する浮動小数点値を持ち、位置が以前の最大距離よりも大きいか、または以前の最小距離よりも短い場合、ループチェックの各繰り返しで単純に格納します。どちらかが当てはまる場合は、最大/最小距離を現在の位置に設定し、最大/最小距離時間を現在の時間にmillis()を使用して設定します。私が見ることができる理由はありません。すべてのデータを格納する配列についてこれを正しく理解していれば、私が見ているものからメモリ空間を占有しているだけです。

これが少し助けてくれることを願っています。もし私が完全に基盤を離れていれば、私は読みやすさの点でコメントの有用性を強調します。これが幸運を助けてくれることを願っています。

1
追加された

私はあなたのコードで達成しようとしていることを正確には分かっていませんが、私が理解したところでは、オブジェクトがセンサーの前面にあるかどうかを確認するための距離測定を行い、オブジェクト渡し....右?

私の理解が正しいと仮定すると、オブジェクトがあるかどうかを知るための距離をまず測定し、オブジェクトがなければ、オブジェクトが現れるまで「タイマー」を開始して、データをシリアルに印刷しますモニター....

//this is a comment...they make code easier to use and understand for you and others .....
int IRpin = 0;
float volts, distance,firstdata;
//don't Know why you need those...
/*int k = 0;
float min;
float mang[150];
int m;*/
boolean Exists;
boolean measured;

int startTime;
int Interval;
void setup() {
Serial.begin(9600);
}

void loop() {
volts = analogRead(IRpin) * 0.0048828125;
distance = 13 * pow(volts, -1.10);
if (distance < 20) //an object is in front of the sensor
{
Serial.println(distance);
Exists = true;//object is present
}
else
{
Exists = false; object isn't present
}

    if (Exists == false) {// no object present


if(measured == false){//to see if the timer already began
    startTime = millis();
    measured = true;// so the code only runs once
    Read = true; //so that we only measure the time when the timer begins
    }}
else 
{ if(Read == true){
Interval = millis() - startTime;
measured = false;

Read = false;

Serial.print(Interval);
}}

私が最後のスニペットでやろうとしているのは、何も存在しない時間だけを測定することです。

0
追加された