Bonjour,
Je bosse actuellement sur un projet mellant QT et arduino.
Le but est de recuperer des valeurs que l'arduino me transmet en serie.
Seulment le flux que je recois est non continue.
Exemple photo :
Quelqu'un sait il comment je pourrais faire pour evité ces atrefacts et ces valeurs vides ?
Voici mon code source :
Le but finale est de simuler une mesure de temperature que je mettrais sous forme de courbe affin de l'afficher en temps reel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtExtSerialPort/qextserialport.h> #include <QtExtSerialPort/qextserialenumerator.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //Objet qui contient les infos sur les ports QextSerialEnumerator mesPorts; //On met ça dans une liste QList <QextPortInfo> ports = mesPorts.getPorts(); //parcours de la liste pour la combobox for(int i=0; i<ports.size();i++) { ui->comboPort->addItem(ports.at(i).physName); } //ajout des vitesses ui->comboVitesse->addItem("300"); ui->comboVitesse->addItem("1200"); ui->comboVitesse->addItem("2400"); ui->comboVitesse->addItem("4800"); ui->comboVitesse->addItem("9600"); ui->comboVitesse->addItem("14400"); ui->comboVitesse->addItem("19200"); ui->comboVitesse->addItem("38400"); ui->comboVitesse->addItem("57600"); ui->comboVitesse->addItem("115200"); ui->comboVitesse->setCurrentText("9600"); } MainWindow::~MainWindow() { delete ui; } BaudRateType MainWindow::getBaudRateFromString(QString baudRate) { int vitesse = baudRate.toInt(); switch(vitesse) { case(300):return BAUD300; case(1200):return BAUD1200; case(2400):return BAUD2400; case(4800):return BAUD4800; case(9600):return BAUD9600; case(19200):return BAUD19200; case(38400):return BAUD38400; case(57600):return BAUD57600; case(115200):return BAUD115200; default:return BAUD9600; } } void MainWindow::on_btnconnexion_clicked() { //Deux cas de figures a gerer //Cas du coche > connexion if(ui->btnconnexion->isChecked()){ //On cree l'objet et tente de se connecter a larduino port=new QextSerialPort(); //reglage port et vitesse port->setPortName(ui->comboPort->currentText()); port->setBaudRate(getBaudRateFromString(ui->comboVitesse->currentText())); //Reglages conforme a l'arduino port->setParity(PAR_NONE);//parité port->setStopBits(STOP_1);//nombre de bits de stop port->setDataBits(DATA_8);//nombre de bits de données port->setFlowControl(FLOW_OFF);//pas de contrôle de flux //Ouverture du port port->open(QextSerialPort::ReadWrite); //Modif message bouton ui->btnconnexion->setText("Déconnecter"); //On connecte le slot pour recevoir les data connect(port,SIGNAL(readyRead()), this, SLOT(readData())); } else { //on se déconnecte de la carte Arduino port->close(); //puis on détruit l'objet port série devenu inutile delete port; ui->btnconnexion->setText("Connecter"); } } void MainWindow::readData() { QByteArray array = port->readAll(); ui->listWidget->insertPlainText(array); }
J'utilise pour ça un arduino sur le quel je lis la valeur d'un potentiometre.
Merci d'avance.
Partager