使用Arduino Uno测量飞行时间

时间:2015-03-10 17:37:06

标签: time arduino distance radio measurement

我正在尝试实施主/从设置以确定两个Arduino Uno板之间的飞行时间,并最终将其用作两者之间距离的度量。使用标准的16MHz晶体和来自DFRobot的APC220在两者之间进行通信很容易,但是获得飞行时间读数是我被卡住的地方。

我在主端使用以下代码发送第一个信号并从从设备接收回声:

// set pins:
const int switchPin = 3;     // pin number of the switch

// variables:
int switchState = 0;         // variable for reading switch status
int iDisplay = 1;
unsigned long start, finished, elapsed;

// initialize
void setup()
{
   // initialize switch pin as input:
   pinMode(switchPin, INPUT);
   // initialize serial wireless communication:
   Serial.begin(9600);
   // read initial state of switch
   switchState = digitalRead(switchPin);
}


void displayResult()
{
   float h,m,s,ms;
   unsigned long over;
   elapsed=finished-start;
   h=int(elapsed/3600000);
   over=elapsed%3600000;
   m=int(over/60000);
   over=over%60000;
   s=int(over/1000);
   ms=over%1000;
   Serial.print("Raw elapsed time: ");
   Serial.println(elapsed);
   Serial.print("Elapsed time: ");
   Serial.print(h,0);
   Serial.print("h ");
   Serial.print(m,0);
   Serial.print("m ");
   Serial.print(s,0);
   Serial.print("s ");
   Serial.print(ms,0);
   Serial.println("ms");
   Serial.println();
}


// program loop
void loop()
{   

   if (Serial.available()>0 && iDisplay == 1)
   {
      finished=millis();
      displayResult();
      iDisplay = 0;//Only once
   }



 // read switch state and print line if state has changed
 switch (digitalRead(switchPin)) { // read pin status
  case HIGH:
     if (switchState == LOW)
     {     // check if message has to be sent
          start=millis();
          delay(200); // for debounce
          iDisplay = 1;//Only once
          Serial.println(100);  // send message about switch
          switchState = HIGH;           // message has been sent
     }
     break;
case LOW:
     if (switchState == HIGH) 
     {    // check if message has to be sent
         start=millis();
         delay(200); // for debounce
         iDisplay = 1;//Only once
         Serial.println(100); // send message about switch
         switchState = LOW;            // message has been sent
     }
     break;  
  }

  }

以下代码为奴隶:

// variables:
int intTime = 0;

// initialize
void setup()
{
   // initialize serial wireless communication:
   Serial.begin(9600);
}

// program loop
void loop()
{   

   if (Serial.available()>0)
   {
       intTime = Serial.parseInt();
       if (intTime > 1)
       {
          Serial.println(intTime); 
       }
       intTime = 0;
   }


}

然而这只能从去抖延迟返回200毫秒,这可以用Arduino完成吗?我的数学或代码错了吗?

0 个答案:

没有答案