Poll
Question: A
A - 2 (66.7%)
B - 1 (33.3%)
Total Voters: 3

Pages: 1 2 [3] 4 5 6   Go Down
Author Topic: Arduino et visual studio  (Read 7094 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Peux-tu préciser ce a quoi tu voudrais arriver afin que je t'orientes correctement.
Bonsoir,
Je garde mes projets sous le coude, pour le moment je fais quelques manip pour me familiariser.

J'ai donc modifié le projet, maintenant arduino attend les ordres de vb pour envoyer la valeur d'une entrée ou bien actionner une sortie, cela fonctionne parfaitement.

J'essaye maintenant d'utiliser comme suggéré le timer pour envoyer régulièrement la valeur en entrée tant que je ne clique pas sur stop.
Pour le moment je n'y suis pas arrivé.

J'ai activé et réglé l'interval du timer lors de l'appui sur le bouton on
Ensuite j'ai mis la commande à exécuter dans "Private Sub Timer1_Tick" mais cela ne marche pas.

Tu vois ou est le pb ?

Merci

a+
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Par exemple :

Dans le timer:
Code:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim ExempleTrame As String

        ExempleTrame = "Go." 'toujours le point pour correspondre a notre partie Arduino
        mySerialPort.Write(ExempleTrame)
    End Sub

Dans le bouton Start:
Code:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Timer1.Interval = 1000 ' en ms
        Timer1.Enabled = True
    End Sub

Côté Arduino, analyser la trame, dès que le point '.' arrive, gérer le trame, si c'est "Go" alors envoyer les infos.

Bien sûr en plus sérieux il faudrait être sûr que l'arduino a fini d'envoyer avant de renvoyer des commande, mais nous n'en sommes pas là.
Donc vaut mieu mettre 1000ms ou + dans le timer cela evitera les problème.

Je n'ai pas testé ce que je t'ai mis mais si vraiment tu as des soucis, je fait comme d'hab, une petite archive...

A+

PS: Vérifer que le timer soit inactif par défaut ou alors le rendre inactif a l'ouverture du programme
Bon amusement
« Last Edit: January 27, 2012, 04:55:48 am by Fredo59 » Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma programmation semble identique à la tienne, la seule chose que je n'ai pas fait c'est de mettre à OFF le timer au démarrage. Je regarde cela de plus près ce soir...

A+
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cela fonctionne maintenant, j'avais oublié d'envoyer la commande de lecture à arduino.  smiley-red
Le timer est presque au point smiley-wink J'arrive à le démarrer mais pas à le stopper.
Si je rajoute Timer1.Enabled = False dans le bouton 14 il ne démarre plus du tout.

Mon code VB :

Code:
    Private Sub Button13_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button13.Click
        Dim Tag As String = CType(CType(sender, Button).Tag, String)

        Timer1.Interval = 1000
        Timer1.Enabled = True
       
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        mySerialPort.Write(Button13.Tag & ",")  'pour demander à arduino l'envoi d'une valeur d'entrée
        capteur = mySerialPort.ReadExisting   'lecture de la valeur d'entrée
        TextBox3.Text = capteur  ' affichage de cette valeur

    End Sub


    Private Sub Button14_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button13.Click

        '    Timer1.Enabled = False

    End Sub

Mon code arduino pour me donner ton avis :

Code:
void loop() {
  // Action qui s'effectue quand la transmission est finie
  if (activerSorties) {
   
    sortieTxt = inputString.substring(0,1);  // Je récupère le 1er caractèere de la chaine de reception
    int sortie = sortieTxt.toInt(); // je la convertie en Int pour la commande digitalWrite
     
    etat = inputString.substring(1,3); // je récupère les 2 caractère qui me diront si on demande un "ON"
   
    if (etat=="ON"){
     digitalWrite(sortie,1);
    }
    else {
     digitalWrite(sortie,0);
    }
     
    inputString = "";
    activerSorties = false;
  }
  if (activerEntrees) {
  valeurCapteur = analogRead(analogInPin); 
   Serial.println(valeurCapteur);                       
         digitalWrite(2,1); // J'allume toutes les leds juste pour savoir que arduino
         digitalWrite(3,1); // A bien reçu la commande
         digitalWrite(4,1);
         digitalWrite(5,1);
         digitalWrite(6,1);
 inputString = "";
activerEntrees=false;  }
 
   
    }
 
 /*
  Evénement qui se déclenche lorsque le port série reçoit
  des informations.
 */
void serialEvent() {
  while (Serial.available()) {
    // récupère le nouveau byte:
    char inChar = (char)Serial.read();
    // le rajoute a ceux existants:
    inputString += inChar;
    // Si le caractère "." arrive sur le port com 'caractere choisi au pif !'
    // on indique que la ligne de transmission est effectuée et Arduino peut traiter la commande
    if (inChar == '.')
      activerSorties = true;
    if (inChar ==',') // Le caractère "," active la lecture d'une entrée
      activerEntrees = true ;
   }
  }

C'est où que sa cloche ?

++ et merci d'avance smiley-wink
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

Dans ton Timer il ne faut mettre que l'envoie de ta commande.

les envoies de l'Arduino seront automatiquement détectés dans le VB par l’événement que j'avais créé si tu a reprit le même code.

Donc pour résumer :

1.Chaque seconde le timer envoie une demande mais ne dois rien faire d'autre.
2.Quand Arduino répond, cela crée un evenement dans VB qui traite la commande.

C'est important de laisser traiter l’événement dans VB car il démarre un Thread (genre de 2eme programme indépendant) ce qui évite de bloquer le Thread principal comme ça tu peux encore effectuer des actions indépendamment de la réception : tel un stop par exemple.

Je vais vite faire un essai , parce que ce soir je ne serai pas dispo (demain oui) si ça marche je te poste les résultats.

A+
Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aussitôt dit, aussitôt fait  smiley-grin

Je te mets l'archive comme d'habitude.
Les réponses se feront a l'endroit ou il indique "Pret a recevoir" d'habitude, j'ai mis un multiligne comme ça tu vois les réponses arriver.

Biensûr j'ai fait vite et l'arduino m'envoir la même réponse toute les secondes, tu auras vite fait de remplacer la commande par l'envoie de la lecture des tes données.
et dans ce cas, au lieu de les faire arriver avec des saut a la ligne, il faudra juste rafraichir l'entrée afin de voir varier la mesure (analogique) ou l'entrée (digital) sur VB.

Dans mon cas j'étais obligé d'aller a la ligne afin que tu vois que l'Arduino réponde ^^

http://perso.numericable.fr/tchonordiste/Arduino/VBetArduinoV3.zip

Amuse toi bien  smiley-wink
N'hésites pas poser des questions, car ça me motive a faire des tests également !! smiley-eek-blue

@++
Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour le zip.

J'ai trouvé du coup l'erreur dans mon code, c'était ici :

Private Sub Button14_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button13.Click

            Timer1.Enabled = False

    End Sub

J'ai remplacé par 14 et sa roule !

Bonne soirée !
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Continuons...

Ce matin histoire que mon timer me fasse afficher quelque chose d'interessant, j'ai cablé un capteur de température 18B20. Pas de problème particulier, j'ai bien la lecture en continu si je l'active sur vb grâce au timer.

Par contre je ne me rapelle plus qu'elle T° il faisait ce matin à 8h ? smiley-lol
il va faloir que tout ça se sauvegarde dans une base et que je puisse par exemple afficher un graphique de l'évolution de la journée smiley-wink

Voila la prochaine étape smiley

++
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais oui biensûr, il faudrait que tu me donnes ton adresse pour que je t'envoie tes 100balles et ton mars  smiley-twist

Non, je rigole bien sûr !

Alors pour les base de données c'est comme tu veux, moi je travaille toujours avec des bases du type access en *.mdb
Je les crées avec ADOX.dll et je travaille dessus avec ADODB.dll

Je peux dans un premier temps te faire un prog tout simple qui créera une base, dans la quelle tu pourras ajouter, modifier et supprimer des enregistrements.
Ensuite nous l'intègrerons a notre prog actuel...

Mais les base de données sont vastes et peut-être préfèrerais-tu travailler avec quelque chose d'autre (mySQL,Sql, Oracle).

L'avantage avec ce que je te propose, c'est que tout est inclus dans vb, tu es autonome, tu crées, tu remplis, tu modifies, tu effaces. (tout y est !) smiley-mr-green

Dis-moi si ça te vas et on attaque.... smiley-eek-blue

@+
Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voilà, je te poste une archive toute fraîche. Dans le programme pour le moment je te montre comment :
1° Créer la base de données (MaBase.mdb)
2° Créer une table (Copain) et y créer des champs (Nom, Prenom)
3° Contrôler qu'elle existe
4° Ajouter des enregistrements
5° les afficher dans une grille

Le programme ne te permets pas les effacements pour le moment (allons y doucement) donc si tu veux "voir" où se trouve ta base pour l'effacer manuellement, elle se trouvera dans le même répertoire que l'application soit :
Repertoire ou tu a mis l'archive\BaseDeDonnees\BaseVB\BaseVB\bin\Debug\   ==> si tu essaie le programme a partir de VB express (en debug)
Repertoire ou tu a mis l'archive\BaseDeDonnees\Executable\                       ==> si tu lance directement l'executable

Je t'ai mis aussi les 2 DLL necessaire au programme : Repertoire ou tu a mis l'archive\BaseDeDonnees\BaseVB\
Il faut savoir qu'il faut "integrer" les dll au projet, si tu ne sait pas comment, dis le moi, je te ferai des screenshoot pour t'expliquer (ultra simple).
Pour l'instant, pas d'inquiétude, dans le projet de cette archive c'est déjà fait.... smiley-mr-green

je te mets aussi un lien vers une super page internet qui regroupe tout le vocabulaire qu'il faut savoir pour employer les commande SQL (elle nous servirons pour nos requetes dans la base)
http://sql.1keydata.com/fr/

Pour le moment les champs que je t'ai mis sont du type "texte" mais plus tard on verra les autres (integer, long, Decimal,....)

Si tu as des bug dis le moi , je l'ai testé mais on ne sait jamais. smiley-eek-blue

L'archive :
http://perso.numericable.fr/tchonordiste/Arduino/BaseDeDonnees.zip

@++
Bon amusement...

PS: J'espère que les modérateurs ne sanctionnerons pas le fait que nous dérivions sur du VB et que nous délaissions quelque peu l'Arduino...

« Last Edit: January 28, 2012, 10:19:42 am by Fredo59 » Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Mais oui biensûr, il faudrait que tu me donnes ton adresse pour que je t'envoie tes 100balles et ton mars
80 cela suffira et plutôt un bounty, je ne voudrais pas abuser...  smiley-red

Par contre avant d'aller plus loin, j'ai comme tu le disais, vu que je n'ai pas crée de thread dans mon programme, une latence avant que la sortie réagisse à ma commande quand le timer est lancé.
J'ai donc essayé ton programme mais il ne marche pas chez moi, j'ai repris des parties de ton code dans le mien mais c'est pareil, au lancement du timer l'application se fige et ne répond plus.

Pour la base si le type access est le plus pratique pour commencer no problem. A terme elle sera sur un serveur pour être consultée à distance

++

EDIT : Ton prg fonctionne, c'est moi qui bug  smiley-confuse
« Last Edit: January 28, 2012, 10:46:32 am by Michel_B » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
J'ai donc essayé ton programme mais il ne marche pas chez moi,.....
Quand tu l'ouvre dans vb et que tu l'essaie quelle erreur as -tu ?
Il faut mettre également le Prog dans l'Arduino car je l'ai modifié.

Je pense qu'il faut d'abord faire tourner mon code car chez moi il fonctionne, ensuite tu le modifie a ta sauce.
Car je déclare parfois des choses tout au début du programme et si tu ne les reprends pas cela ne fonctionnera pas.

Ou alors, poste ton code que j'essaie de voir si je remarque quelque chose de bizarre....

Je connais le VB depuis des années (d'abord Turbo Basic, VB3,4,6, VB.net) mais je t'avoue que les Thread sont très récents pour moi, je les ai découvert en commençant mes tests avec l'Arduino. Le code d'ailleurs est parfaitement expliqué dans le fichier PDF (qui n'est pas de moi ...) que j'ai joins a toutes mes archives.

Donc j'évite les acrobatie avec ce type de code car je ne le maitrise pas encore tout a fait  smiley-red

C'est pour cela que je t'envoie toujours des exemples qui fonctionnent chez moi pour que tu partes sur une base fonctionnelle, si ensuite ça ne marche plus tu es sur comme ça que cela vient de toi.

Tiens moi au courant
@+

Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
...si ensuite ça ne marche plus tu es sur comme ça que cela vient de toi.

Cela vient de moi effectivement.
j'essaye de faire fonctionner tout ça avant de passer à la base de données.
Au passage on peut eviter que les modifications d'un prg vb soient automatiquement sauvegardées ?
C'est ce qui c'est passé avec ton code, j'ai du faire une boulette et hop sauvegardé !  smiley-mad
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alors, je viens de me rendre compte que la V3 de mon archive ne contenait pas le bon executable , sinon le projet, lui, est bon.

je te remets le link pour l'archive corrigée (pense a aussi mettre le prog dans l'Arduino). Désolé, hier j'ai voulu aller trop vite.... smiley-red
http://perso.numericable.fr/tchonordiste/Arduino/VBetArduinoV3.zip

Pour la sauvegarde automatique, je t'avoue que je n'ai jamais regardé car chez moi cela ne le fait pas. smiley-eek-blue

++

Logged

L'expérience est une longue suite de bêtises...

Offline Offline
Jr. Member
**
Karma: 0
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ca avance bien, grâce à ton exemple toutes les X secondes je relève la température du DALLAS 18B20 et je sauvegarde cette donnée dans la base en ajoutant la date et l'heure de la mesure.




J'essaye maintenant de lire les données de la base pour afficher un graphique de la T°.

++
« Last Edit: January 29, 2012, 05:39:46 am by Michel_B » Logged

Pages: 1 2 [3] 4 5 6   Go Up
Jump to: