Нужно подключить к uno gps и sim800. По отдельности все работает, что бы использовать два сериала воспользовался примером из https://www.arduino.cc/en/Tutorial/TwoPortReceive Но когда добавляю в код для второго порта, данные с первого перестают приниматься. Если удалить блок ===============serial2 в функции loop, все работает. В чем затык? Код (C++): #include <TroykaGPS.h> #include <SoftwareSerial.h> SoftwareSerial GPSport(10, 11); SoftwareSerial portTwo(8, 9); // serial-порт к которому подключён GPS-модуль #define GPS_SERIAL GPSport // создаём объект класса GPS и передаём в него объект GPS_SERIAL GPS gps(GPS_SERIAL); // задаём размер массива для времени, даты, широты и долготы #define MAX_SIZE_MASS 16 // массив для хранения текущего времени char strTime[MAX_SIZE_MASS]; // массив для хранения текущей даты char strDate[MAX_SIZE_MASS]; // массив для хранения широты в градусах, минутах и секундах char latitudeBase60[MAX_SIZE_MASS]; // массив для хранения долготы в градусах, минутах и секундах char longitudeBase60[MAX_SIZE_MASS]; //------------------------------------------------------------------SETUP void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // открываем Serial-соединение с GPS-модулем на скорости 115200 бод GPS_SERIAL.begin(115200); // печатаем строку Serial.println("GPS init is OK on speed 115200"); // изменяем скорость обещение GPS-модуля с управляющей платой на 9600 бод // используем NMEA-команду «$PMTK251,9600*17\r\n» GPS_SERIAL.write("$PMTK251,9600*17\r\n"); // закрываем Serial-соединение с GPS-модулем GPS_SERIAL.end(); // открываем Serial-соединение с GPS-модулем на скорости 9600 бод GPS_SERIAL.begin(9600); // печатаем строку Serial.print("GPS init is OK on speed 9600"); portTwo.begin(9600); } //------------------------------------------------------------------LOOP void loop() { gps_get(); delay(5000); //==================================================serial2 // Теперь прослушиваем второй порт: portTwo.listen(); Serial.println("Data from port two:"); while (portTwo.available() > 0) { char inByte = portTwo.read(); Serial.write(inByte); } delay(5000); //==================================================serial2 Serial.println(); } //------------------------------------------------------------------GET GPS void gps_get() { GPSport.listen(); // если пришли данные с gps-модуля if (gps.available()) { // считываем данные и парсим gps.readParsing(); // проверяем состояние GPS-модуля switch(gps.getState()) { // всё OK case GPS_OK: Serial.println("GPS is OK"); // выводим координаты широты и долготы // 1. в градусах, минутах и секундах // 2. градусах в виде десятичной дроби Serial.println("GPS Coordinates: "); gps.getLatitudeBase60(latitudeBase60, MAX_SIZE_MASS); gps.getLongitudeBase60(longitudeBase60, MAX_SIZE_MASS); Serial.print("Latitude\t"); Serial.print(latitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLatitudeBase10(), 6); Serial.print("Longitude\t"); Serial.print(longitudeBase60); Serial.print("\t\t"); Serial.println(gps.getLongitudeBase10(), 6); // выводим количество видимых спутников Serial.print("Sat: "); Serial.println(gps.getSat()); // выводим текущую скорость Serial.print("Speed: "); Serial.println(gps.getSpeedKm()); // выводим высоту над уровнем моря Serial.print("Altitude: "); Serial.println(gps.getAltitude()); // выводим текущее время Serial.print("Time: "); gps.getTime(strTime, MAX_SIZE_MASS); gps.getDate(strDate, MAX_SIZE_MASS); Serial.write(strTime); Serial.println(); // выводим текущую дату Serial.print("Date: "); Serial.write(strDate); Serial.println("\r\n"); // каждую переменную дату и времени можно выводить отдельно /* Serial.print(gps.getHour()); Serial.print(gps.getMinute()); Serial.print(gps.getSecond()); Serial.print(gps.getDay()); Serial.print(gps.getMonth()); Serial.print(gps.getYear()); */ break; // ошибка данных case GPS_ERROR_DATA: Serial.println("GPS error data"); break; // нет соединение со спутниками case GPS_ERROR_SAT: Serial.println("GPS no connect to satellites!!!"); break; } } }
Лучше работать с мегой, если вам нужны сериалы. Вы не знаете как реализованы программные и какие там ошибки и, чем больше, тем больше вероятность проблем
Ну и не Ардуины это изобретение если что.А задолго до того.Для Тини-13 например.Или для Т-45.Но аппаратный по любому лучше.