Можно ли переключиться с Serial на SoftwareSerial во время выполнения с той же скоростью передачи данных?
Я пытаюсь использовать GPS и модуль термопринтера Adafruit с Arduino Nano в одном проекте (оба используют скорость 9600 бод) и мне интересно, могу ли я сделать что-то вроде кода ниже? По сути, в примере, который я сделал, я получаю время от GPS, и когда оно достигает минуты, он вызывает метод printTime()
.
Мне интересно, можно ли сделать то, что я сделал в методах disableGPS
, enablePrinter
, завершив последовательное соединение для GPS и запустив его для моего принтера? Мне кажется, это должно работать, но я не до конца понимаю последовательные соединения.
Если это не работает, есть ли альтернатива, которую я мог бы сделать? Мне никогда не нужно одновременно считывать с GPS и записывать на принтер в коде.
#include <Adafruit_Thermal.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#define PrinterTXPin 6 // Arduino передает ЖЕЛТЫЙ ПРОВОД с маркировкой RX на принтер
#define PrinterRXPin 5 // Arduino получает ЗЕЛЕНЫЙ ПРОВОД с маркировкой TX на принтере
static const uint32_t baud = 9600;
//Принтер
SoftwareSerial PrinterSerial(PrinterRXPin, PrinterTXPin);
Adafruit_Thermal printer(&PrinterSerial);
//мы хотим печатать только по минутам
boolean havePrinted = false;
//GPS
TinyGPSPlus gps;
TinyGPSDate lastDate;
void setup() {
enableGPS();
}
void loop()
{
if(gps.time.isValid() && checkDate(gps.time)){
printTime(gps.time);
}
}
boolean checkDate(TinyGPSTime theTime)
{
if(theTime.second() == 0 && !havePrinted)
{
havePrinted = true;
return true;
}
if(theTime.second() == 1){
havePrinted = false;
}
}
void printTime(TinyGPSTime theTime)
{
//Отключить, так как на скорость передачи данных может быть только 1 последовательное соединение
disableGPS();
enablePrinter();
printer.doubleHeightOn();
printer.println(theTime.hour() + ":" + theTime.minute());
printer.feed(1);
disablePrinter();
enableGPS();
}
void enablePrinter()
{
PrinterSerial.begin();
printer.begin();
printer.wake();
}
void disablePrinter()
{
printer.sleep();
PrinterSerial.end();
}
void disableGPS()
{
Serial.end();
}
void enableGPS()
{
Serial.begin(baud);
}
@user3294853, 👍0
1 ответ
Лучший ответ:
Я думаю, вы не знаете, что такое скорость передачи данных. Это скорость, с которой передаются данные. Поэтому тот факт, что ваши два устройства одинаковы, не является проблемой. Из кода следует, что ваш GPS подключен к аппаратному последовательному порту (контакты 0,1 на uno), а принтер — к программному последовательному порту (контакты 5,6). Если это так, то нет причин отключать любой из них, они оба могут работать. В случае использования нескольких программных последовательных соединений только одно может «слушать» в любой момент времени, поэтому вам нужно переключаться между ними. В вашем коде это не так, поскольку есть только одно программное последовательное соединение.
- Нет данных GPS Neo 6M DFRduino Nano
- Arduino не записывает полное предложение NMEA в файл SD-карты
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Отправка команд PUBX на плату GPS (Ublox NEO-6M) через SoftwareSerial