GPS-модуль Neo 6M не работает должным образом внутри собственного скетча.
Сейчас я работаю над проектом, который включает GPS-модуль Neo 6M, модуль карты micro SD и 6 датчиков освещенности BH1750. Все модули работают нормально при автономном тестировании, особенно модуль GPS работает должным образом с примерами скетчей TinyGPS++. Когда я запускаю скетч «DeviceExample», для просмотра времени требуется около 6 секунд, а для получения местоположения — около 10 секунд. Однако в моем скетче время обновляется каждые 3 или более секунд, а также, я думаю, местоположение обновляется очень медленно.
Иногда это даже работает на короткое время, иногда никогда не работает, независимо от того, как долго работает скетч. Вот пример журнала: Как видите, скетч не получил полную дату через 20 секунд после запуска, но время обновляется каждую секунду. Тем не менее, вы можете видеть, что время больше не обновляется за 5 секунд до того, как модуль получает местоположение, а затем интервал обновления замедляется, хотя сам модуль по-прежнему указывает интервал обновления около 0,5–1 секунды.
GPS-модуль Neo 6M подключается напрямую к RX,TX,GND,VCC и отлично работает с примерами скетчей. Есть ли у кого-нибудь решение этой проблемы?
ms(), longitude, latitude,month,day,year,hour,min,sec,centisecs,alt,6 lux values
17642, 0.000000, 0.000000,0,0,2000,22,26,13,95,0.00,106,106,6,0,3,106,
17980, 0.000000, 0.000000,0,0,2000,22,26,13,95,0.00,106,106,6,0,3,106,
18333, 0.000000, 0.000000,0,0,2000,22,26,13,95,0.00,106,106,6,0,3,106,
18803, 0.000000, 0.000000,0,0,2000,22,26,14,95,0.00,106,106,6,0,3,93,
19131, 0.000000, 0.000000,0,0,2000,22,26,14,95,0.00,33,33,6,0,3,0,
19530, 0.000000, 0.000000,0,0,2000,22,26,14,95,0.00,0,0,6,0,3,40,
19956, 0.000000, 0.000000,0,0,2000,22,26,15,95,0.00,106,106,6,0,3,106,
20311, 0.000000, 0.000000,0,0,2000,22,26,15,95,0.00,106,106,6,0,3,106,
20787, 0.000000, 0.000000,0,0,2000,22,26,16,95,0.00,106,106,6,0,3,106,
21114, 0.000000, 0.000000,0,0,2000,22,26,16,95,0.00,106,106,6,0,3,106,
21504, 0.000000, 0.000000,0,0,2000,22,26,16,95,0.00,106,106,6,0,3,106,
21942, 0.000000, 0.000000,0,0,2000,22,26,17,95,0.00,106,106,6,0,3,106,
22292, 0.000000, 0.000000,0,0,2000,22,26,17,95,0.00,106,106,6,0,3,106,
...
240540, 0.000000, 0.000000,10,14,2018,22,29,56,95,0.00,106,106,6,0,3,106,
240869, 0.000000, 0.000000,10,14,2018,22,29,56,95,0.00,106,106,6,0,3,106,
241249, 0.000000, 0.000000,10,14,2018,22,29,56,95,0.00,106,106,6,0,3,106,
241697, 0.000000, 0.000000,10,14,2018,22,29,57,95,0.00,106,106,6,0,3,106,
242035, 0.000000, 0.000000,10,14,2018,22,29,57,95,0.00,106,106,6,0,3,106,
242531, 0.000000, 0.000000,10,14,2018,22,29,58,95,0.00,109,109,6,0,3,106,
242859, 0.000000, 0.000000,10,14,2018,22,29,58,95,0.00,106,106,6,0,3,106,
243238, 0.000000, 0.000000,10,14,2018,22,29,58,95,0.00,106,106,6,0,3,106,
243687, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
244016, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
244425, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
244892, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
245260, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
245754, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
246083, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
246494, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,109,6,0,3,106,
246947, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,109,109,6,0,3,106,
247320, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
247820, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,109,106,6,0,3,106,
248160, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
248676, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
249027, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
249425, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,106,6,0,3,106,
249889, 0.000000, 0.000000,10,14,2018,22,29,59,95,0.00,106,109,6,0,3,106,
250253,xxxxx,xxxxx,10,14,2018,22,30,6,0,0.00,106,106,6,0,3,106,
250768,xxxxx,xxxxx,10,14,2018,22,30,6,0,0.00,106,106,6,0,3,106,
251097,xxxxx,xxxxx,10,14,2018,22,30,6,0,0.00,106,106,6,0,3,106,
251608,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,109,106,6,0,3,106,
252021,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,106,106,6,0,3,106,
252412,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,106,106,6,0,3,106,
252883,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,109,106,6,0,3,106,
253248,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,106,106,6,0,3,106,
253765,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,106,106,6,0,3,106,
254094,xxxxx,xxxxx,10,14,2018,22,30,8,0,646.30,106,106,6,0,3,106,
254608,xxxxx,xxxxx,10,14,2018,22,30,11,0,646.30,106,109,6,0,3,106,
255020,xxxxx,xxxxx,10,14,2018,22,30,11,0,646.30,106,106,6,0,3,106,
255412,xxxxx,xxxxx,10,14,2018,22,30,11,0,646.30,106,106,6,0,3,106,
255882,xxxxx,xxxxx,10,14,2018,22,30,11,0,646.30,106,106,6,0,3,106,
Вот скетч:
////
//initialising constants
static const int out_min = 5;
static const int out_max = 10;
static
const uint8_t RXPin = 0,
TXPin = 1;
static
const uint16_t GPSBaud = 9600;
static
const uint16_t chipSelect = 4;
//initialising Objects
SoftwareSerial ss(RXPin, TXPin);
TinyGPSPlus gps;
BH1750 active_sensor(0x23); // We will use this adress for stating the active sensor
BH1750 inactive_sensor(0x5C);
SdFat sd;
SdFile file;
//initialising variables for collecting data
float lng_;
float lat_;
String month_ = "";
String day_ = "";
String year_ = "";
uint16_t lux_ = 0;
uint8_t hour_ = 0;
uint8_t min_ = 0;
uint8_t second_ = 0;
uint8_t centisecond_ = 0;
float altitude_ = 0;
unsigned long runtime_ = 0;
uint16_t values[6];
char buf[6];
char data_buffer[12];
char fileName[13] = FILE_BASE_NAME "00.csv";
uint8_t lines = 0;
void setup() {
digitalWrite(2, HIGH);
pinMode(2, INPUT);
Serial.begin(115200);
Wire.begin();
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
for (int i = out_min; i <= out_max; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
ss.begin(GPSBaud);
if (active_sensor.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) {
Serial.println(F("BH1750 Advanced begin"));
} else {
Serial.println(F("Error initialising BH1750"));
}
}
void(* resetFunc) (void) = 0;
void loop() {
while (ss.available() > 0)
if (gps.encode(ss.read())) {
digitalWrite(3, HIGH);
}
if (millis() > 5000 && gps.charsProcessed() < 10) {
while (true);
}
if (gps.location.isValid()) {
lat_ = gps.location.lat();
lng_ = gps.location.lng();
}
if (gps.date.isValid()) {
day_ = gps.date.day();
month_ = gps.date.month();
year_ = gps.date.year();
}
if (gps.time.isValid()) {
hour_ = gps.time.hour();
min_ = gps.time.minute();
second_ = gps.time.second();
centisecond_ = gps.time.centisecond();
altitude_ = gps.altitude.meters();
}
int i;
for (i = 5; i <= 10; i++) {
digitalWrite(i, LOW);
switch (i) {
case 7:
active_sensor.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
case 8:
active_sensor.begin(BH1750::CONTINUOUS_HIGH_RES_MODE);
case 9:
active_sensor.begin(BH1750::CONTINUOUS_HIGH_RES_MODE_2);
case 10:
active_sensor.begin(BH1750::CONTINUOUS_HIGH_RES_MODE_2);
case 5:
active_sensor.begin(BH1750::CONTINUOUS_LOW_RES_MODE);
case 6:
active_sensor.begin(BH1750::CONTINUOUS_LOW_RES_MODE);
}
delay(15);
lux_ = active_sensor.readLightLevel();
values[i - 5] = lux_;
digitalWrite(i, HIGH);
}
delay(10);
digitalWrite(3, LOW);
delay(5);
file.print(millis());
file.write(',');
dtostrf(lng_, 9, 6, data_buffer);
file.print(data_buffer);
file.write(',');
dtostrf(lat_, 9, 6, data_buffer);
file.print(data_buffer);
file.write(',');
file.print(month_);
file.write(',');
file.print(day_);
file.write(',');
file.print(year_);
file.write(',');
file.print(hour_);
file.write(',');
file.print(min_);
file.write(',');
file.print(second_);
file.write(',');
file.print(centisecond_);
file.write(',');
file.print(altitude_);
file.write(',');
for (int i = 0; i <= 5; i++) {
file.print(values[i]);
file.write(',');
}
file.println();
lines++;
int state = digitalRead(2);
}
Пример вывода:
@Th3Fi3nD, 👍1
1 ответ
Вы не можете (и, конечно, не должны даже пытаться) использовать SoftwareSerial на контактах 0 и 1. Не тогда, когда вы используете Serial
, поскольку они это одни и те же контакты.
Выберите другую пару контактов для подключения GPS.
- GPS-модуль uBlox Neo 6M не отвечает
- Модуль SIM808 GSM работает нормально, GPS не работает (нет сообщения о готовности GPS при включении питания)
- Как отправить данные из Arduino Uno с SIM900 GPRS в Firebase
- Нет данных от U-Blox Neo-6M
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Какие компоненты мне нужны маленького GPS-трекера
- Расчет GPS на очень короткие расстояния
- Ошибка инициализации GPS DFRobot [Arduino Uno, SIM808]
Но контакты 0 и 1 — единственные последовательные контакты на Arduino Nano, которые я использую. Могу ли я вместо этого просто удалить все последовательные функции? (Но я думаю, я уже это пробовал, и это не помогло), @Th3Fi3nD
Весь смысл SoftwareSerial в том, что он *не* использует последовательные контакты., @Majenko
Мне просто нужно было это поискать, так как я никогда раньше об этом не слышал. Итак, я попробовал, и даже без использования Serial это не сработало. Почему весь Интернет по-прежнему использует стандартные контакты RX и TX, если они также используют библиотеку SoftwareSerial..., @Th3Fi3nD
Просто используйте разные контакты для SoftwareSerial. Смысл в том, что вы можете использовать его, если вам нужно больше последовательных интерфейсов, чем уже есть на плате. «Serial» — это аппаратный последовательный интерфейс, и он определенно лучше, чем SoftwareSerial, который имеет некоторые серьезные ограничения. Вы используете его, потому что у вас нет второго серийного номера оборудования на Arduino UNO., @chrisl
@Th3Fi3nD Потому что когда-то какой-то идиот без понятия сделал это, а потом другой идиот без понятия скопировал его. А потом еще больше идиотов, не имеющих ни малейшего понятия, скопировали их, и, поскольку Интернет населен идиотами, не имеющими ни малейшего понятия, это быстро стало нормой. Теперь всякий раз, когда кто-то ищет пример кода, он получает производную от исходного кода невежественного идиота. Я бы хотел, чтобы он был похож на вампира - тогда я мог бы выследить оригинал и убить его, и все потомки вернулись бы к хорошему коду - но, увы, это не так..., @Majenko
Понятно^^ Обычно это происходит при попытке получить помощь по ардуино. В любом случае, я попробую это и сообщу, сработает ли это., @Th3Fi3nD
Так что это вообще не помогает. Обновление по-прежнему занимает несколько секунд..., @Th3Fi3nD