Доброе утро!
Подскажите, пожалуйста, как правильно записать AT команду в порт? Использую библиотеку QSerialPort, но к сожалению команда в порт не уходит. Ошибок нет, т.к. возвращает 0 (No error occurred).
Прикладываю пример с записью команды
serial.write("AT+CMGF=1");
serial.write("QChar(13)");
serial.waitForBytesWritten(200);
Заранее благодарю за ответ.
А почему QChar(13) и почему в кавычках?
С вопросом записи команды в порт разобралась. Скажите, пожалуйста, по какой причине serial1->waitForBytesWritten(200) возвращает false?
#include "comport1.h"
#include "ui_comport1.h"
#include <QtSerialPort/QtSerialPort>
#include <QDebug>
#include <QMainWindow>
QSerialPort *serial1;
comport1::comport1(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::comport1)
{
ui->setupUi(this);
serial1 = new QSerialPort(this);
serial1->setPortName("COM66");
serial1->open(QIODevice::ReadWrite);
serial1->setBaudRate(QSerialPort::Baud9600);
serial1->setDataBits(QSerialPort::Data8);
serial1->setParity(QSerialPort::NoParity);
serial1->setStopBits(QSerialPort::OneStop);
serial1->setFlowControl(QSerialPort::NoFlowControl);
if(serial1->isOpen()){
serial1->write("AT+CMGF=1\r\n");
serial1->waitForBytesWritten(200);
serial1->write("AT+CMGS=\"+7**********\"\r\n");
serial1->waitForBytesWritten(200);
serial1->write("Hello""\x1A");
}
}
Возможны два варианта,
1. Все байты записаны ДО вызова wait
2. Запись длится дольше 200 мс
Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант.
Здравствуйте!
Подскажите, пожалуйста, как корректно записать в порт номер телефона через переменную? (phone - переменная QString)
Пробовала записать следующим образом, но получаю ошибку no matching function for call to 'QSerialPort::write(const QString)'.
serial1->write("AT+CMGS=\"'%" +phone+ "%'\"\r");
Если вводить номер телефона, то всё проходит успешно.
serial1->write("AT+CMGS=\"+7**********\"\r")
Заранее благодарю.
Используйте метод .toLatin1()
У вас не получается, потому что нельзя передать в порт объект QString, потому что порт принимает байты, а строка содержит символы. Чтобы преобразовать строку в байты, нужно ее закодировать, используя некую кодировку.
Тут я немножко спекулирую и предполагаю, что ваше устройство понимает только Latin-1( http://en.wikipedia.org/wiki/ISO/IEC_8859-1 ), поэтому мы преобразовываем строку в массив байт, кодирующий эту строку - http://doc.qt.io/qt-4.8/qstring.html#toLatin1
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)