Offline
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #30 on: January 26, 2012, 04:42:01 pm » |
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
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #31 on: January 27, 2012, 03:59:32 am » |
Bonjour, Par exemple : Dans le timer: 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: 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
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #32 on: January 27, 2012, 07:00:27 am » |
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
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #33 on: January 27, 2012, 11:46:11 am » |
Cela fonctionne maintenant, j'avais oublié d'envoyer la commande de lecture à arduino.  Le timer est presque au point  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 : 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 : 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 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #34 on: January 27, 2012, 02:26:26 pm » |
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
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #35 on: January 27, 2012, 02:48:57 pm » |
Aussitôt dit, aussitôt fait  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.zipAmuse toi bien  N'hésites pas poser des questions, car ça me motive a faire des tests également !!  @++
|
|
|
|
|
Logged
|
L'expérience est une longue suite de bêtises...
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #36 on: January 27, 2012, 04:09:06 pm » |
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
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #37 on: January 28, 2012, 07:08:37 am » |
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 ?  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  Voila la prochaine étape  ++
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #38 on: January 28, 2012, 08:41:31 am » |
Mais oui biensûr, il faudrait que tu me donnes ton adresse pour que je t'envoie tes 100balles et ton mars  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 !)  Dis-moi si ça te vas et on attaque....  @+
|
|
|
|
|
Logged
|
L'expérience est une longue suite de bêtises...
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #39 on: January 28, 2012, 10:15:15 am » |
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....  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.  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
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #40 on: January 28, 2012, 10:22:33 am » |
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...  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 
|
|
|
|
« Last Edit: January 28, 2012, 10:46:32 am by Michel_B »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #41 on: January 28, 2012, 10:36:48 am » |
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  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
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #42 on: January 28, 2012, 10:52:35 am » |
...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é ! 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 72
|
 |
« Reply #43 on: January 28, 2012, 10:58:20 am » |
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.... http://perso.numericable.fr/tchonordiste/Arduino/VBetArduinoV3.zipPour la sauvegarde automatique, je t'avoue que je n'ai jamais regardé car chez moi cela ne le fait pas.  ++
|
|
|
|
|
Logged
|
L'expérience est une longue suite de bêtises...
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 98
|
 |
« Reply #44 on: January 29, 2012, 05:31:19 am » |
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
|
|
|
|
|
|