【问题标题】:IR sensor with Arduino for restaurant parking用于餐厅停车的 Arduino 红外传感器
【发布时间】:2018-06-11 08:02:58
【问题描述】:

我的代码逻辑有问题,我没有找到任何解决方案。

我怀疑我正在使用两个红外传感器接口与 Arduino,所以当汽车通过第一个传感器和第二个传感器时,我正在发送汽车通过的数据。没关系,但每当 car1 通过第一个传感器和另一辆车时,比如 car2 在第二个传感器,那么 flag 也变为 1,这是真的,但我不希望这样。

如何编写代码让汽车通过两个传感器?如果汽车 1 在传感器 1 中,而汽车 2 在传感器 2 中,则标志不应为 1。

请在下面找到代码:

#include<avr/wdt.h>
#define DISTANCE 100

const int trigPin1 = 7;
const int echoPin1 = 6;

const int trigPin2 = 5;
const int echoPin2 = 4;

int MOVE_FLAG = 0;


void setup() {
 // initialize serial communication:
 Serial.begin(9600);
 MOVE_FLAG = 0;
 wdt_enable(WDTO_8S);
}

void loop()
{
  // establish variables for duration of the ping, 
  // and the distance result in inches and centimeters:
  long duration1, duration2, inches1, inches2, cm1, cm2;

  // The sensor is triggered by a HIGH pulse of 10 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(trigPin1, OUTPUT);
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  // Read the signal from the sensor: a HIGH pulse whose
  // duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(echoPin1, INPUT);
  duration1 = pulseIn(echoPin1, HIGH);

  inches1 = microsecondsToInches(duration1);
  cm1 = microsecondsToCentimeters(duration1);

  delay(10);

  pinMode(trigPin2, OUTPUT);
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);

  pinMode(echoPin2, INPUT);
  duration2 = pulseIn(echoPin2, HIGH);
  // convert the time into a distance

  inches2 = microsecondsToInches(duration2);
  cm2 = microsecondsToCentimeters(duration2);

  if(cm1 <= DISTANCE && cm2 <= DISTANCE && MOVE_FLAG == 0)
  {
    Serial.println("3");
    MOVE_FLAG = 1;
  }

  if (cm1 > DISTANCE && cm2 > DISTANCE && MOVE_FLAG == 1)
  {
    MOVE_FLAG = 0;
    delay(500);
  }

  delay(50);
  wdt_reset();
}

long microsecondsToInches(long microseconds)
{
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  return microseconds / 29 / 2;
}

【问题讨论】:

    标签: arduino


    【解决方案1】:

    两个运动传感器不足以完成您所描述的任务。如果没有视频或类似的东西,您无法知道是 Car 1 触发了传感器还是 Car 2 触发了传感器。

    我建议您重新考虑解决问题的方法。您可能想查看人们在 Internet 上创建和发布的其他停车场项目。在 Google 上搜索“Arduino Parking Lot”或类似内容。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多