28 Avril 2012
Arduino leçon 23 : dialogue avec autre programme

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 VB
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".

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.

récupérer le fichier zip
haut de la page

