QT BLUETOOTH: как читать (данные в строке или двоичном файле) с устройства Bluetooth и записывать в него?
Я работаю над проектом, в котором я должен написать фрагмент кода, который может общаться с автомобильным роботом, то есть читать и записывать в него данные. Моя самая большая проблема в том, что после подключения к устройству Bluetooth роботов я все еще не могу читать или записывать данные на него. Следующий код работал магически только ОДИН РАЗ и перестал работать с тех пор. Я был сконструирован так, чтобы использовать QT для реализации моей программы, я взглянул на пример BTCHAT, но, похоже, я не следую их коду так хорошо.
С учетом сказанного, вот мой заголовочный файл:
#ifndef BLUETOOTHSCANNER_H
#define BLUETOOTHSCANNER_H
#include <QListWidgetItem>
#include <QDialog>
#include <QBluetoothServer>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QBluetoothSocket>
namespace Ui {
class BluetoothScanner;
}
class BluetoothScanner : public QDialog
{
Q_OBJECT
public:
explicit BluetoothScanner(QWidget *parent = 0);
~BluetoothScanner();
void sendMessage(QString text);
public slots:
void foundDevices(QBluetoothDeviceInfo info);
void readSocket();
private slots:
void on_BTListWidget_itemClicked(QListWidgetItem *item);
void on_BTScanButton_clicked();
void on_BTConnectButton_clicked();
void on_BTOkButton_clicked();
private:
Ui::BluetoothScanner *ui;
QBluetoothDeviceDiscoveryAgent *BTdiscoveryAgent;
QList <QBluetoothDeviceInfo> nearbyDevices;
QString slaveBT;
QBluetoothSocket *socket;
};
#endif // BLUETOOTHSCANNER_H
и вот реализации
#include "bluetoothscanner.h"
#include "ui_bluetoothscanner.h"
#include <QDebug>
#include <QIODevice>
BluetoothScanner::BluetoothScanner(QWidget *parent) :
QDialog(parent),
ui(new Ui::BluetoothScanner)
{
ui->setupUi(this);
}
BluetoothScanner::~BluetoothScanner()
{
delete ui;
}
void BluetoothScanner::on_BTListWidget_itemClicked(QListWidgetItem *item)
{
slaveBT= item->text();
}
/*
* handles the event when the SCAN button i clicked
* @return void
* clears the list of BT device and shows the newly discovered ones
* start scaning for BT devices, once found calls foudDevices()
*
*/
void BluetoothScanner::on_BTScanButton_clicked()
{
BTdiscoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
ui->BTListWidget->clear();
//Starts looking for bluetooth devices and notfices which in turn prints
//them out to the consel
connect(BTdiscoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
this,SLOT(foundDevices(QBluetoothDeviceInfo)));
//search for nearby devices for 15000 sm
BTdiscoveryAgent->setLowEnergyDiscoveryTimeout(15000);
BTdiscoveryAgent->start();
}
void BluetoothScanner::on_BTConnectButton_clicked()
{
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
for (QBluetoothDeviceInfo i: nearbyDevices)
{
if(i.name().contains(slaveBT))
{
/*connect(socket, SIGNAL(connected()),this,SLOT(incomingConnection()));
connect(socket,SIGNAL(readyRead()),this,SLOT(readSocket()));
*/
connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket()));
socket->connectToService(i.address(),i.deviceUuid());
on_BTOkButton_clicked();
BTdiscoveryAgent->stop();
break;
}
continue;
}
}
void BluetoothScanner::on_BTOkButton_clicked()
{
this->close();
}
void BluetoothScanner::foundDevices(QBluetoothDeviceInfo info)
{
if(info.name().length()>1)
{
qDebug()<<"Bluetooth device: "<< info.name()<< "address ( "<< info.address().toString()<< ")";
if(info.name()!=slaveBT)
{
ui->BTListWidget->addItem(info.name());
nearbyDevices.append(info);
slaveBT =info.name();
}
}
}
void BluetoothScanner::readSocket()
{
qDebug()<<endl<<endl<<"READ SOCKET"<<endl<<endl;
qDebug()<<endl<<endl<<socket->isOpen()<<endl<<endl;
if (!socket)
return;
while (socket->canReadLine()) {
QByteArray line = socket->readLine().trimmed();
qDebug()<< QString::fromUtf8(line.constData(), line.length())<<endl;
}
}
void BluetoothScanner::sendMessage(QString text)
{
QByteArray arr= text.toUtf8()+ '\n';
socket->write(arr);
while (socket->canReadLine()) {
QByteArray line = this->socket->readAll();
qDebug()<< QString::fromUtf8(line.constData(), line.length())<<endl;
}
}
Пожалуйста, помогите мне выяснить это.