ИК-датчик с Arduino для парковки ресторана - PullRequest
0 голосов
/ 11 июня 2018

У меня проблема с кодовой логикой, я не нашел никакого решения.

Я сомневаюсь, что я использую два интерфейса ИК-датчика с Arduino, поэтому, когда автомобиль проезжает 1-й датчик и 2-й датчик, то яотправляю данные о том, что машина сдана.Это хорошо, но всякий раз, когда car1 проходит 1-й датчик, а другой автомобиль, скажем, car2 находится во 2-м датчике, флаг также становится равным 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;
}

1 Ответ

0 голосов
/ 13 июня 2018

Два датчика движения не подходят для выполнения того, что вы описали.Без видео или чего-либо подобного вы не сможете узнать, сработал ли датчик 1 с датчиком или сработал датчик 2.

Предлагаю вам переосмыслить свой подход к решению проблемы.Возможно, вы захотите взглянуть на другие проекты парковок, которые люди создали и разместили в Интернете.Выполните в Google поиск по запросу «Arduino Parking Lot» или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...