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;
    }
}

Пожалуйста, помогите мне выяснить это.

0 ответов

Другие вопросы по тегам