Bonjour à tous ! je souhaiterais transmettre des données de mon Arduino Uno vers une application Qt programmée en C++. Les données en question sont des nombre compris entre 20 et 1000.
Au niveau de l'Arduino, aucun soucis. Le moniteur série print bien les nombre sans problème. Cependant au niveau de Qt, il a tendance à couper mes nombre. Par exemple pour le nombre 328, il va prendre que "28" en omettant le "3". Les 2 sont en Baud 9600.
Voici le code de la classe communication de mon application :
#include "seriallink.h"
#include <QDebug>
seriallink::seriallink(QObject *parent)
: QObject{parent}
{
_serial.setPortName("COM7");
_serial.setBaudRate(QSerialPort::Baud9600);
_serial.setDataBits(QSerialPort::Data8);
_serial.setParity(QSerialPort::NoParity);
_serial.setStopBits(QSerialPort::OneStop);
_serial.setFlowControl(QSerialPort::NoFlowControl);
connect(&_serial, &QSerialPort::readyRead, this, &seriallink::newData);
}
seriallink::~seriallink(){
closeConnection();
}
void seriallink::openConnection(){
if(!_serial.open(QIODevice::ReadWrite))
qDebug() <<"Connection impossible";
else qDebug() << "Connection ok";
}
void seriallink::write(const char* message){
_serial.write(message);
}
void seriallink::closeConnection(){
_serial.close();
}
bool seriallink::isOpen(){
return _serial.isOpen();
}
bool seriallink::isWritable(){
return _serial.isWritable();
}
void seriallink::newData(){
emit gotNewData(_serial.readAll());
}
Ce code vient tout droit de cette vidéo :
Et voici le code qui exploite les données recus :
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
arduino = new seriallink;
arduino -> openConnection();
//std::this_thread::sleep_for(std::chrono::nanoseconds(10));
connect(arduino, &seriallink::gotNewData, this, &MainWindow::updateGUI);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::updateGUI(QByteArray data){
if (data.toInt() >= 20)
{
ui->verticalSlider_2->setValue(map_(data.toInt(), 20, 1000, 0, 255));
qDebug() << (map_(data.toInt(), 20, 1000, 0, 255)) << " == " << data;
ui->lcdNumber->display(ui->lcdNumber->value()+data);
ui->lcdNumber_2->display(ui->verticalSlider_2->value());
}
}
Si quelqu'un peut m'éclaircir sur mon problème
Merci d'avance !