25 Novembre 2012

Arduino : dialogue avec autre programme

Nous allons agir sur Arduino à partir d'un programme extérieur.

Intérêt du port com virtuel

La programmation d'un port USB est extrêmement compliquée. Arduino s'en charge à notre place en nous fournissant un port com virtuel. Nous programmons comme pour un port série (RS232), beaucoup plus simple que l'USB. Nous l'avons déjà fait quand nous avons utilisé le moniteur série.
Ce principe est utilisé dès l'initialisation : quand nous avons installé Arduino la 1ère fois, nous avons choisir le port com utilisé.

le port com pour VB6

L'environnement de Visual Basic nous fournit par défaut un tas de composants : textBox, boutons, labels etc...
Le port com n'en fait pas partie et nous devons l'ajouter à la liste des composants.
Sélectionner le menu Projet/composants et dans la fenêtre cocher Microsoft Comm control puis "Appliquer".

choix port com

Nous avons alors une icone de plus. Elle représente un téléphone que nous plaçons sur notre cannevas.

le dialogue

Le programme Arduino

Pour dialoguer, on utilise exactement les mêmes instructions que quand on dialoguait avec le moniteur série.

     int i, j, appuye=0, nbre = 0;
     int lu = 0;
     byte recu[10];
     int led[12];
     String chaineEnvoi;
     
     void setup(){
            // déclare les pins 2 à 13 en sorties :
            for (int thisPin = 2; thisPin <= 12; thisPin++) {
                  pinMode(thisPin, OUTPUT);
            led[thisPin] = 0;
            }
            // initialise la communication
            Serial.begin(9600);
     }
     
     void loop() {
            i=0;
            while (Serial.available() > 0){
                  recu[i] = Serial.read();
                  i++;
                  delay(10);
            }
      if (i>0){
            traite_entree();
      }
      if (digitalRead(13)==1 && appuye==0 ){
            Serial.println("bouton enfonce");
                  appuye = 1;       // neutralise les rebonds
            delay(200);
      }
     } // fin de la loop
     
     void traite_entree(void){
            appuye = 0;       //       autorise à  nouveau l'appui sur bouton
            if (i==2){
                  nbre = recu[1] - 48;
            }
            if (i==3){
                  nbre = recu[2] - 38;
            }
            led[nbre] = 1 - led[nbre];
            digitalWrite(nbre, led[nbre]);
     }

Le programme VB

On est obligé d'aller périodiquement lire le buffer d'entrée.

      Private Sub Timer1_Timer()
            ' on va périodiquement voir s'il y a
            ' des données en attente sur la laison série
            If MSComm1.InBufferCount > 0 Then
                  Dim buf As String
                  buf = MSComm1.Input
                  Text1.Text = Text1.Text & buf
            End If
      End Sub

et on lit les caractères jusqu'à trouver celui de fin ("\0").

      Private Sub MSComm1_OnComm()
            Do
                  DoEvents 'indispensable sinon ça marche pas!!!
                  tampon = tampn & MSComm1.Input
            Loop Until InStr(tampon, "\0")
            Text1.Text = tampon
     End Sub

le montage

11 leds dont les cathodes sont reliées au sorties 2 à 12 d'Arduino et les anodes à la masse via une résistance.
la borne 22 est configurée en entrée et reliée
- au +5 par une résistance
- à la masse par un bouton-poussoir.

Fonctionnement

Il est important de brancher la platine Arduino avant de lancer le programme.
Le programme a besoin de connaître le port sur lequel se trouve Arduino pour fonctionner.


Utilisation

Vous pouvez récupérer mes sources et les exécutables sous forme zippée.
Les sources sont en VB6. Vous pourez les modifier sous cet environnement, ou vous en inspirer pour écrire vos propres programmes.
Sinon, vous pouvez utiliser l'exécutable Arduino-VB6.exe . Celui-ci risque de vous réclamer une DLL (en général VB6fr.dll) que je n'ai pas le droit de vous distribuer. Vous la trouverez facilement sur le net.
Le programme pour la platine Arduino s'appelle _11_diodes.ino et est dans son propre sous-répertoire.

bouton
récupérer le fichier zip


haut de la page

Valid XHTML 1.0 Transitional





>