GSM и GPS-модуль не работают вместе
Я пытаюсь создать проект, который включает в себя получение широты и долготы с помощью модуля GPS и отправку его через GSM-модуль. Моя проблема здесь в том, что индивидуальный код работает идеально. Однако, если я инициализирую оба вместе, ни один из них не будет работать.
#include "GSM.h"//wrapper class for Sim800l library
#include "GPS.h"//wrapper class for TinyGPS library
GSM *gsm;
GPS *gps;
void setup()
{
Serial.begin(9600); // Debugging only
gsm = new GSM();//initializes SIM800l
//gps = new GPS(11,10 );//initializes NEO6MV2//uncommmenting this line won't make both modules work
}
String telNum;
int i = 1;
void loop()
{
/*
Serial.println(gps->getLongitude(),6);
Serial.println(gps->getLatitude(),6);
*/
Serial.println(gsm->read(i,telNum));
Serial.println(telNum);
++i;
}
@Kinyo356, 👍2
Обсуждение3 ответа
Лучший ответ:
Я заставил его работать, инициализировав и удалив указатель на объект GPS и GSM.
Инициализация и освобождение объектов выполняются в функции цикла. Я инициализирую GPS, запускаю его в цикле на некоторое время, уничтожаю его и инициализирую GSM и ту же процедуру, что и GPS.
Хотя я не знаю, будет ли это иметь какие-либо последствия, но он работает идеально
#include "GSM.h"
#include "GPS.h"
GSM *gsm;
GPS *gps;
void setup()
{
Serial.begin(9600); // Debugging only
}
unsigned long previousMillis = 0;//could be any value depending on how quick you want it to elapse
const long interval = 100; //could be any value depending on how long you want it to run
void loop()
{
gps = new GPS(6, 7);//initialization <SoftwareSerial::begin() function called here>
while (previousMillis <= interval)
{
//GPS codes here
++previousMillis;
}
delete gps; //destory initialized object
previousMillis = 0; //reset value
gsm = new GSM(); //initialization <SoftwareSerial::begin() function called here>
while (previousMillis <= interval)
{
//GSM codes here
++previousMillis;
}
delete gsm;//destory initialized object
previousMillis = 00;//reset value
}
Вы не можете использовать два программных устройства вместе (или ненадежно, и не зная точно, что вы делаете).
Даже нелегко использовать одно программное обеспечение и одну аппаратную серию вместе, если вы не знаете, что делаете.
SoftwareSerial блокирует все остальное во время отправки или получения, поэтому его использование для отправки нежелательных сообщений (как это постоянно делают GPSS) приводит к хаосу.
Лучшее, на что вы можете надеяться,-это использовать HardwareSerial для GPS и SoftwareSerial для GSM, что большую часть времени связано с вызовом и ответом.
Лучше было бы использовать лучшую плату, имеющую несколько аппаратных последовательных портов.
ОК. У вас есть какая-нибудь ссылка, которая может провести меня через аппаратный серийный номер? Googling просто продолжает вызывать библиотеки и никаких примеров., @Kinyo356
Вы можете использовать функцию прослушивания , например:
First_softwareserial.listen();// когда вам нужен gsm-serial
Second_softwareserial.listen();// когда вам нужен gps-последовательный
но обе библиотеки в этом вопросе имеют встроенный SoftwareSerial. поэтому покажите, как использовать их так, как вы описываете, @Juraj
- как заставить щит GPRS/GSM SIM900 работать с модулем gps neo-6M с помощью платы Arduino UNO
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Модуль SIM808 GSM работает нормально, GPS не работает (нет сообщения о готовности GPS при включении питания)
- последовательная передача данных на GPS-экране duinopeak
- Sim800 FTP Arduino
- SIM800L не отвечает на AT-команды
- GSM SIM900A Содержимое SMS не отображается
похоже, вам нужно указать последовательные контакты программного обеспечения., @dandavis
кроме того, это не устройство 5 В, и ваш красный провод никуда не уходит ;), @dandavis
В оригинальных библиотеках используется программное обеспечение serial. Или, может быть, я не понял тебя @dandavis, @Kinyo356