Lya_Inventor
24.5.2015, 10:00
Доброе утро!
Подскажите, пожалуйста, как правильно записать AT команду в порт? Использую библиотеку QSerialPort, но к сожалению команда в порт не уходит. Ошибок нет, т.к. возвращает 0 (No error occurred).
Прикладываю пример с записью команды
serial.write("AT+CMGF=1");
serial.write("QChar(13)");
serial.waitForBytesWritten(200);
Заранее благодарю за ответ.
А почему QChar(13) и почему в кавычках?
Lya_Inventor
24.5.2015, 15:35
Цитата(lanz @ 24.5.2015, 14:46)
А почему QChar(13) и почему в кавычках?
QChar(13) код клавиши ENTER, необходимо вводить после установки режима работы и номера телефона. В кавычках записала, т.к. пробовала различные варианты ввода.
Lya_Inventor
24.5.2015, 18:11
С вопросом записи команды в порт разобралась. Скажите, пожалуйста, по какой причине 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, значит первый вариант.
Lya_Inventor
26.5.2015, 8:02
Цитата(lanz @ 24.5.2015, 19:05)
Возможны два варианта,
1. Все байты записаны ДО вызова wait
2. Запись длится дольше 200 мс
Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант.
Спасибо за помощь, удалось отправить сообщение.
Lya_Inventor
7.6.2015, 12:25
Здравствуйте!
Подскажите, пожалуйста, как корректно записать в порт номер телефона через переменную? (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
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.