Outils pour utilisateurs

Outils du site


tutoriels:informatique:qtduino

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tutoriels:informatique:qtduino [2013/03/30 14:46]
vlamoine
tutoriels:informatique:qtduino [2017/03/19 14:56] (Version actuelle)
Ligne 1: Ligne 1:
 ====== Contrôler un Arduino grâce à Qt Creator ====== ====== Contrôler un Arduino grâce à Qt Creator ======
- 
 **Tout ces documents sont sous licence CC BY-NC-SA :** **Tout ces documents sont sous licence CC BY-NC-SA :**
 Cette licence permet aux autres de remixer, arranger, et adapter votre œuvre à des fins non commerciales tant qu'on vous crédite en citant votre nom et que les nouvelles œuvres sont diffusées selon les mêmes conditions. Cette licence permet aux autres de remixer, arranger, et adapter votre œuvre à des fins non commerciales tant qu'on vous crédite en citant votre nom et que les nouvelles œuvres sont diffusées selon les mêmes conditions.
 +
 +Ce projet a été initié par Victor Lamoine
  
 ==== Introduction ==== ==== Introduction ====
- 
 Pré-requis : Aucun ! Tout est expliqué et détaillé, aucune connaissance particulière n'est nécessaire. C'est réalisable par tout le monde ! Pré-requis : Aucun ! Tout est expliqué et détaillé, aucune connaissance particulière n'est nécessaire. C'est réalisable par tout le monde !
  
 ==== Objectif ==== ==== Objectif ====
- 
 On va contrôler un servomoteur grâce a une application Qt. La communication se fait par le câble USB On va contrôler un servomoteur grâce a une application Qt. La communication se fait par le câble USB
  
 [[http://​vicopsp.free.fr/​tyfab/​qtservo.m4v|Voir la vidéo]] [[http://​vicopsp.free.fr/​tyfab/​qtservo.m4v|Voir la vidéo]]
- 
 ==== Matériel ==== ==== Matériel ====
-  * Un Arduino (j'utilisz est un Arduino Nano 3.0) +  * Un Arduino (j'utilise ​un Arduino Nano 3.0) 
-  * Un PC, s'il n'est pas sous Linuxil faudra adapter le code Qt (mon est sous Ubuntu 12.04.2 desktop (64 bits))+  * Un PC, s'il n'est pas sous Linux il faudra adapter le code Qt (le mien est sous Ubuntu 12.04.2 desktop (64 bits))
   * Un servomoteur   * Un servomoteur
  
Ligne 54: Ligne 52:
  
 === Projet Qt Creator === === Projet Qt Creator ===
-Ouvrir le [[http://​vicopsp.free.fr/​tyfab/​usb_servo.zip|projet Qt Creator]] double clic sur le .PRO+Créez un projet Qt Creator: ​Projet Qt Widget : Application graphique Qt 
 +Nommer le projet "​USB_servo"​ et le nom de la classe "​USB_servo"​ (laisser ​le reste par défaut)
  
-Branchez l'​Arduino si ce n'est pas déjà fait et lancez la commande suivante ​: +Aller dans formulaires, ​et créer les éléments suivants ​:
-<​code>​ls /dev/ | grep USB</​code>​ +
-Le résultat devrait être ttyUSB0 par exemple. Modifier ligne 21 de usb_servo.cpp pour que le périphérique corresponde.+
  
-Pour exécuter le programme : Ctrl + R ou clic sur la flèche ​"lecture" ​verte en bas à gauche.+**Widget - Nom**\\ 
 +Qdial - "dial"\\ 
 +Qslider - "​slider"​\\ 
 +Qlcdnumber - "​lcd"​\\
  
 +Une fois les éléments crées appuyer sur F4 pour éditer les signaux/​slots (ou cliquer en haut sur l'​icône "​Editer signaux/​slots)
 +Créer les signaux suivants :
 +
 +**Emetteur - Signal - Receveur - Slot**\\
 +dial - sliderMoved(int) - lcd - display(int)\\
 +dial - sliderMoved(int) - slider - setValue(int)\\
 +slider - sliderMoved(int) - dial - setValue(int)\\
 +slider - sliderMoved(int) - lcd - display(int)\\
 +
 +Modifier le contenu des fichiers suivants comme suit :
 +
 +USB_servo.pro
 +<​code>​QT ​      += core gui
 +
 +TARGET = USB_servo
 +TEMPLATE = app
 +
 +#add qExtSerialPort libs
 +CONFIG += extserialport
 +
 +SOURCES += main.cpp\
 +        usb_servo.cpp
 +
 +HEADERS ​ += usb_servo.h
 +
 +FORMS    += usb_servo.ui
 +</​code>​
 +
 +usb_servo.h
 +<​code>#​ifndef USB_SERVO_H
 +#define USB_SERVO_H
 +
 +#include <​QMainWindow>​
 +#include <​QtGui>​
 +#include <​qextserialport.h>​
 +
 +namespace Ui {
 +class USB_servo;
 +}
 +
 +class USB_servo : public QMainWindow
 +{
 +    Q_OBJECT
 +    ​
 +public:
 +    explicit USB_servo(QWidget *parent = 0);
 +    void init_port();​ // initialisation du port
 +    ~USB_servo();​
 +
 +public slots:
 +void transmitCmd(int value); // fonction d'​envoi
 +    ​
 +private:
 +    Ui::​USB_servo *ui;
 +    QextSerialPort *port;
 +};
 +
 +#endif // USB_SERVO_H
 +</​code>​
 +
 +usb_servo.cpp
 +<​code>#​include "​usb_servo.h"​
 +#include "​ui_usb_servo.h"​
 +
 +USB_servo::​USB_servo(QWidget *parent) :
 +    QMainWindow(parent),​
 +    ui(new Ui::​USB_servo)
 +    // Création de l'​intefarce ("​formulaires"​)
 +{
 +    init_port();​ //​initiation of the port
 +    ui->​setupUi(this);​
 +    connect(ui->​dial,​ SIGNAL(sliderMoved(int)),​ this, SLOT(transmitCmd(int)));​
 +    // On connecte le mouvement du bouton a l'​envoi de la commande
 +    connect(ui->​slider,​ SIGNAL(sliderMoved(int)),​ this, SLOT(transmitCmd(int)));​
 +    // On connecte le mouvement du slider a l'​envoi de la commande
 +    transmitCmd(90);​
 +    // On initialise le servo à 90°
 +}
 +
 +USB_servo::​~USB_servo()
 +{
 +    delete ui;
 +}
 +
 +void USB_servo::​init_port(void)
 +{
 +    QString dev_port = "/​dev/​ttyUSB0";​
 +    port = new QextSerialPort(dev_port);​ //on ouvre le port
 +    // ls /dev/ | grep USB   <<​ Permet de donner la liste des périphériques USB
 +
 +     ​port->​open(QIODevice::​ReadWrite | QIODevice::​Unbuffered);​
 +    if(!port->​isOpen())
 +    {
 +        QMessageBox::​warning(this,​ "​Impossible d'​ouvrir le port", dev_port);
 +    }
 +
 +    // On parametre la liaison :
 +    port->​setBaudRate(BAUD9600);​
 +    port->​setFlowControl(FLOW_OFF);​
 +    port->​setParity(PAR_NONE);​
 +    port->​setDataBits(DATA_8);​
 +    port->​setStopBits(STOP_1);​
 +}
 +
 +void USB_servo::​transmitCmd(int value)
 +{
 +    QByteArray byte; //byte a envoyer
 +    qint64 bw = 0; //bytes really writen
 +
 +    byte.clear();​ // on efface le contenu de byte
 +    byte.append(value);​ // on ajoute "​value"​ a byte
 +
 +    if(port != NULL){ // on vérifie que le port existe toujours
 +        bw = port->​write(byte);​ // on écrit les byte
 +        //(bw récupere le nombre de byte écris)
 +        qDebug() << bw << "​byte(s) written | Value sent:" << value << "​(dec)";​
 +        port->​flush();​ // on attend la fin de la transmission
 +    }
 +
 +}
 +</​code>​
 +
 +Branchez l'​Arduino si ce n'est pas déjà fait et lancez la commande suivante dans un terminal :
 +<​code>​ls /dev/ | grep USB</​code>​
 +
 +Le résultat devrait être ttyUSB0 par exemple. Modifier ligne 21 de usb_servo.cpp pour que le périphérique corresponde.
 +Pour exécuter le programme : Ctrl + R ou clic sur la flèche “lecture” verte en bas à gauche.
 ==== Problèmes ==== ==== Problèmes ====
 Chez moi le programme Qt a parfois du mal a ouvrir le port, débrancher et rebrancher l'​Arduino si cela arrive. Chez moi le programme Qt a parfois du mal a ouvrir le port, débrancher et rebrancher l'​Arduino si cela arrive.
tutoriels/informatique/qtduino.1364654764.txt.gz · Dernière modification: 2017/03/19 14:56 (modification externe)