Всем привет, делаю проект, который использует данные GPS (Дата, время, местоположение). Есть скетч в котором GPS работает корректно, удается получить все необходимые данные, но при переносе в проект на выходе нет данных.
Код рабочий:
[code]
#include "TinyGPS++.h"
#include <SoftwareSerial.h>
static const int RXPin = 3, TXPin = 2;
TinyGPSPlus gps;
SoftwareSerial Serial_GPS(RXPin, TXPin);
void setup()
{
Serial.begin(9600);
Serial_GPS.begin(9600);
}
void loop()
{
//Проверка подключения
while (Serial_GPS.available() > 0)
if (gps.encode(Serial_GPS.read())) {
getGPS();
delay(500);
}
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while (true);
}
}
void getGPS()
{
//широта и долгота
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6); //широта
Serial.print(F(","));
Serial.print(gps.location.lng(), 6); //долгота
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
if ((gps.time.hour() + 3) > 23) Serial.print(gps.date.day() + 1); //день
else Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.month()); //месяц
Serial.print(F("/"));
Serial.print(gps.date.year()); //год
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
int now_hour = gps.time.hour() + 3;
if (now_hour >= 24) now_hour - 24;
if (now_hour < 10) Serial.print(F("0"));
Serial.print(now_hour); //часы
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute()); //минуты
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second()); //секунды
Serial.print(F("."));
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
}
[/code]
И кусок кода проекта, до проверки актуальности gps все работает:
[code]
#include <LiquidCrystal_I2C.h>
#include "SD.h"
#include <DHT.h>
#include "iarduino_HC_SR04.h"
#include "TinyGPS++.h"
#include <SoftwareSerial.h>
#include <Wire.h>
#include <VL53L0X.h>
//Переменные
VL53L0X laz;
DHT dht(4, DHT21);
iarduino_HC_SR04 UZV(5, 6);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
TinyGPSPlus gps;
static const int RXPin = 3, TXPin = 2;
SoftwareSerial Serial_GPS(RXPin, TXPin);
const int SDchipSelect = 10;
const int PinKey = 8;
const int Pip = 9;
int Status = 0;
uint32_t ms;
bool button_state = 0;
bool button_long_state = 0;
uint32_t ms_button = 0;
int t = 0;
int UZ = 0;
void setup() {
Serial.begin(9600);
Serial_GPS.begin(9600);
dht.begin();
Wire.begin();
//Включение экрана
lcd.init();
lcd.backlight();
//Пииип
analogWrite(Pip, 1);
delay(1000);
analogWrite(Pip, 0);
//Стартовый экран
char s1[] = "Generation 2";
char s2[] = "Initialisation...";
char s3[] = "Done";
char s4[] = "Temperature ";
char s5[] = "Humidity ";
lcd.setCursor(4, 0);
for (int i = 0; i < strlen(s1); i++) {
lcd.print(s1[i]);
delay(100);
}
lcd.setCursor(2, 2);
for (int i = 0; i < strlen(s2); i++) {
lcd.print(s2[i]);
delay(100);
}
//Кнопка
pinMode(PinKey, INPUT_PULLUP);
//Наличие SD
while (!SD.begin(SDchipSelect)) {
lcd.clear();
delay(500);
lcd.setCursor(7, 1);
lcd.print("No SD!");
delay(500);
}
//GPS проверка подключения
while ((!gps.date.isValid() or !gps.time.isValid() or !gps.location.isValid()) && digitalRead(PinKey) == 1) {
if (gps.date.isValid()) Serial.println("Date is valid");
if (gps.time.isValid()) Serial.println("Time is valid");
if (gps.location.isValid()) Serial.println("Location is valid");
lcd.clear();
delay(500);
lcd.setCursor(3, 1);
lcd.print("Waiting GPS...");
delay(500);
}
[/code]
Проблема в том, что код останавливается на проверке данных с GPS и код дальше не идет, и данных нет.
Заранее спасибо!