Могу ли я объединить ультразвуковой датчик и GPS вместе?

Мне нужно управлять двумя разными датчиками с помощью Arduino UNO: модулем GPS и ультразвуковым датчиком. Мне удалось запустить каждую из них по отдельности, и я не знаю, как манипулировать кодом;

МОДУЛЬ GPS

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// Объект TinyGPS++
TinyGPSPlus gps;

// Последовательное соединение с устройством GPS
SoftwareSerial ss(RXPin, TXPin);

void setup()
{
  Serial.begin(9600);
  ss.begin(GPSBaud);
}

void loop()
{
  // Этот скетч отображает информацию
  // каждый раз, когда новое предложение правильно закодировано.
  while (ss.available() > 0)
  {
    gps.encode(ss.read());
    if (gps.location.isUpdated())
    {
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
    }
  }
}

УЛЬТРАЗВУКОВОЙ ДАТЧИК

// определяет номера пинов
const int trigPin = 9;
const int echoPin = 10;

// определяет переменные
long duration;
int distance;
void setup() 
{
  pinMode(trigPin, OUTPUT); // Устанавливает тригПин как Выход
  pinMode(echoPin, INPUT); // Устанавливает echoPin в качестве входа
  Serial.begin(9600); // Запускает последовательную связь
}

void loop() 
{
  // Очищает триггер
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  // Устанавливает тригпин в состояние HIGH на 10 микросекунд
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
  duration = pulseIn(echoPin, HIGH);

  // Расчет расстояния
  distance= duration*0.034/2;

  // Печатает расстояние на последовательном мониторе
  Serial.print("Distance: ");
  Serial.println(distance);
}

, 👍-1


1 ответ


1

Это просто. У меня нет возможности попробовать. Но если ваш код работал, это тоже будет. (Просто скопируйте/вставьте.) Мне пришлось заменить цикл while на блок if, потому что я не был уверен, блокируется ли блок while в течение более длительного времени. Могло быть и то, что GPS шлет, шлет и шлет... Вот бы заблокировать ультразвуковой датчик.

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// Объект TinyGPS++
TinyGPSPlus gps;

// Последовательное соединение с устройством GPS
SoftwareSerial ss(RXPin, TXPin);

const int trigPin = 9;
const int echoPin = 10;

long duration;
int distance;

void setup()
{
  Serial.begin(9600);
  ss.begin(GPSBaud);

  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT); 
}

void loop()
{
  // Этот скетч отображает информацию
  // каждый раз, когда новое предложение правильно закодировано.
  if (ss.available() > 0)
  {
    gps.encode(ss.read());
    if (gps.location.isUpdated())
    {
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
    }
  }

  // Очищает триггер
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  // Устанавливает тригпин в состояние HIGH на 10 микросекунд
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
  duration = pulseIn(echoPin, HIGH);

  // Расчет расстояния
  distance= duration*0.034/2;

  // Печатает расстояние на последовательном мониторе
  Serial.print("Distance: ");
  Serial.println(distance);
}
,

Спасибо за ваш ответ и помощь, сэр. Но у меня есть некоторые проблемы с выводом. Координата gps не показывает, @Afiq Azmii

@AfiqAzmii Я показал вам, как объединить два скетча. Это то, о чем вы просили. Я не могу вам сказать, почему это не работает, потому что я ничего не знаю о настройке. Я не вижу фотографий вашего проекта и проводки, и у меня нет ссылки на документацию обоих датчиков. Я даже не знаю, какой из них вы используете. Вы мне тоже не сказали, корректно ли работает датчик расстояния. Поскольку это совершенно новый вопрос, было бы лучше добавить новый вопрос или обновить старый. Если вы добавите всю информацию, которую я просил, у кого-то или у меня будет больше шансов помочь вам., @Peter Paul Kiefer

Я видел, что вы уже задали новый вопрос. Я смотрю на это., @Peter Paul Kiefer