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

Pages: [1] 2 3 ... 6   Go Down
Author Topic: Arduino et visual studio  (Read 8783 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

Bonjour, j'utilise visual studio pour programmer mon arduino.
J'ai réalisé un programme en guise de test pour allumer et éteindre une led. Maintenant je voudrais réaliser une form avec deux boutons on/off pour commander cette led, mais je ne sais pas comment faire.

Merci d'avance pour votre aide.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 278
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Comment-fais tu pour faire la liaison entre l'Arduino et le programme que tu fais avec Visual Studio ? Ca m'interesse de savoir... Merci.
Logged

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

Bonjour,

tu trouveras des infos ici : http://www.visualmicro.com/

Après si tu as des infos pour faire ce que je souhaite avec un autre programme je suis preneur.

A+
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 278
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

tu trouveras des infos ici : http://www.visualmicro.com/

Après si tu as des infos pour faire ce que je souhaite avec un autre programme je suis preneur.

A+


Ah tiens je connaissais pas ça, c'est intéressant... Cependant je suis pas sur de bien comprendre.

J'ai plutôt l'impression que dans ce cas Visual Studio permet de jouer le rôle de l'IDE de l'Arduino et faire l'upload... et moi je croyais plutôt que c'était une librairie qui permettait de créer une application finale qui puisse communiquer avec l'Arduino sans passer par l'IDE. Une sorte de logiciel pour piloter l'Arduino.

Donc non je vais pas pouvoir t'aide du coup, par contre je suis preneur sur des infos pour réaliser un logiciel pour piloter l'Arduino... smiley

EDOT : J'ai trouvé un tuto pas mal : http://webhole.net/2010/05/01/arduino-visual-c-plus-plus-tutorial/
« Last Edit: January 16, 2012, 07:48:21 am by arduimat » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,

Avr Studio 5 est basé sur visual studio 2010, regarde le topic de jean-Marie sur le sujet smiley-wink
http://arduino.cc/forum/index.php/topic,81365.msg619862.html


Edit : Je crois avoir mal compris la question, en faite il n'est pas question de compiler un sketch arduino avec Visual Studio mais juste faire une application sous Visual Studio communicant avec l'arduino ?

Avec Visual Studio tu as le choix, C#, VB.net, ou C++, sous quelle langage veut tu faire ton application ?
-> http://arduino.cc/playground/Main/InterfacingWithSoftware
« Last Edit: January 16, 2012, 02:15:29 pm by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

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

Quote
Avec Visual Studio tu as le choix, C#, VB.net, ou C++, sous quelle langage veut tu faire ton application ?
-> http://arduino.cc/playground/Main/InterfacingWithSoftware

Oui le problème c'est que je n'y arrive pas. J'ai essayé C++ avec libserial, VB et firmata, python.... mais je n'arrive pas à dialoguer avec l'arduino.
Je ne comprends pas trop également quel prog je dois mettre dans l'Arduino. Si tu as un exemple à me faire passer....

Merci
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui le problème c'est que je n'y arrive pas. J'ai essayé C++ avec libserial, VB et firmata, python.... mais je n'arrive pas à dialoguer avec l'arduino.
Je ne comprends pas trop également quel prog je dois mettre dans l'Arduino. Si tu as un exemple à me faire passer....
Regarde du coté de ce topic, tu aura une moitié de réponse smiley-wink
http://arduino.cc/forum/index.php/topic,85310.0.html

Aprés coté PC c'est de la prog pc ... tu doit d'abord concevoir un protocole puis le mettre en place coté arduino et coté pc, vu que c'est toi qui décide du protocole tu est libre de faire ce que tu veut.

Exemple de protocole simple :
A1 -> allume led 1
E1 -> éteint la led 1
etc etc ... c'est toi qui décide !
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 278
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Tu devrais essayer ça, j'ai réussi à le faire fonctionner en 5 minutes... Avec Visual Studio en C++.
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je fais mes applis PC sur VB6 (de la suite Visual Studio 6.0) qui communiquent avec l'arduino via le port série. Vu l'implémentation de Arduino dans VS 2010, je vais peut-être changer de version, mais c'est dommage quand on commence à maîtriser un soft qui marche encore très bien de changer...)

Le plus dur étant de dire à l'arduino d'envoyer des octets (byte) et non des caractères : Serial.print(0x65) envoie trois octets (49, 48 et 49 : "101") au lieu de la valeur sur un seul octet ( 101 ou caractère "A"). il faut utiliser Serial.write(data) avec data comme byte, sinon, ça ne marche pas bien (un int en paramètre risque d'être traité comme une chaine de deux caractères).

Ensuite, côté VB, le port série est lui aussi orienté chaine de caractères, donc il faut lui dire d'envoyer des octets un par un (à partir d'un tableau à 1 case).

C'est un peu de la bidouille, mais ça a finit par marcher. Reste le côté "événement" qui n'est pas facile, sur l'arduino, il faut pouvoir réagir à tout moment à la réception de données pour répondre si c'est une demande de lecture de données par exemple. Pour VB, pareil, il faut pouvoir traiter les données reçues quand elles arrivent.

Un exemple des codes que j'utilise, côté arduino :
Code:
byte data, d0, d1, d2;

loop(){
  if (Serial.available()) {  // scruter en continu l'arrivée de commandes via le port série et les traiter.
    data = Serial.read();  // réception d'une commande :
    Switch (data){
      case 0x55 :          // code 0x55 = "Bonjour, tu vas bien?"
        Serial.write(0xAA);     // Réponse 0xAA = "Bonjour aussi! Oui, je vais bien!"
        Break;
      case 0x24 :          // code 0x24 = commande éclairage
        While(!Serial.available());   // attente des données suivantes
        d0 = Serial.read();  // d0 contient le  numéro de la lampe sur laquelle on doit agir
        While(!Serial.available());   // attente des données suivantes
        d1 = Serial.read();  // d1 contient la valeur d'éclairage (pour PWM par exemple)
        lampe_eclaire(d0, d1);      // appel d'une procédure qui allume la lampe demandée à la valeur demandée
        Serial.write(0xAA);     // Réponse 0xAA = "Bien reçu, commande traitée"
        Break;
      (...)   // la suite du traitement des commandes...  
    }
  }
}

Dans cet exemple,
si on reçoit 0x55, l'émetteur attend en retour 0xAA ou un code d'erreur.
si on reçoit 0x24, c'est une commande suivie de deux octets de paramètes, il faut donc attendre d'avoir reçu les deux octetc suivants pour traiter la commande

Côté VB :

un timer à 100ms qui fait comme sur l'arduino (if serial.available()...), car j'ai jamais réussi à utiliser le handler du port série. Je ne sais pas pourquoi, mais voilà quoi...
un timer lancé dans la proc de lecture (pour retrouver une fonction similaire à While (Serial.available()); data = Serial.read(); de l'arduino avec une gestion de Time_Out, car ce n'est pas prévu dans VB et c'est très gênant en cas de plante lors du développement :
Code:
Private Sub Timer_TimeOut_Timer()  ' procédure appelée par le timer
  Time_Out = True
  Timer_TimeOut.Enabled = False
End Sub

Function Data_Read() As Byte            ' Fonction qui renvoie un octet du buffer série INPUT
  Dim Data As Byte
  
  Time_Out = False
  Timer_TimeOut.Interval = 3000  ' timeout = 3s
  Timer_TimeOut.Enabled = True
  While (Not Time_Out) And (Serial.InBufferCount = 0)
    DoEvents                             ' permet le traitement des autres évènements
  Wend
  Timer_TimeOut.Enabled = False
  If Time_Out Then
'    MsgBox ("TIME OUT port série!")
    Data_Read = 0
  Else
    Data_Read = Asc(Serial.Input)
  End If
End Function

Sub Data_Write(Data As Byte)         ' envoie un octet dans le série OUT
  Dim Data_out(0) As Byte         ' Obligation de passer par un tableau, sinon Serial.Output ne marche pas
  
  Data_out(0) = Data
  If Serial.PortOpen Then Serial.Output = Data_out
End Sub

Sub Data_Write_16(Data As Integer)         ' envoie un word (16 bits) dans le série OUT
  Dim Data_out(0 To 1) As Byte  
  
  Data_out(0) = Data And 255
  Data_out(1) = (Data And 65280) \ 256
  If Serial.PortOpen Then Serial.Output = Data_out
End Sub

Private Sub Command_Eclairage_Click()   ' commande l'éclairage de la lampe 1 en fonction de la position du scrollbar.
  Data_Write(&H24)                ' code d'éclairage
  Data_Write(1)                   ' lampe N°1
  Data_Write(ScrollBar1.Value)  ' valeur d'éclairage
  if Data_Read = &HAA then             ' si tout s'est bien passé, l'arduino a renvoyé le code de confirmation (&HAA)
    MsgBox("Commande bien traitée par l'arduino")
  else
    MsgBox ("Commande non traitée par l'arduino")
End Sub
Vous remarquerez le Data_Read = Asc(Serial.Input), car Serial.Input renvoie un caractère!

De plus, il faut initialiser Serial.InputLen = 1 : on reçoit les octets un par un.

J'ai tellement galéré à faire marcher ça, que je vous donne mes codes, si ça peut aider. Il faut bien sûr avoir des prérequis sur le composant MSComm de VB, car il est assez compliqué et peu documenté.
Logged

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

Merci de ton aide,
j'ai essayé de mettre ton prog dans l'arduino, j'obtient une erreur :

sketch_jan18a:2: error: ISO C++ forbids declaration of 'loop' with no type
sketch_jan18a.cpp: In function 'int loop()':
sketch_jan18a:2: error: new declaration 'int loop()'
C:\Arduino3\hardware\arduino\cores\arduino/wiring.h:129: error: ambiguates old declaration 'void loop()'
sketch_jan18a:5: error: 'Switch' was not declared in this scope
sketch_jan18a:5: error: expected `;' before '{' token


Quel est le problème ?
Il y a surement quelque chose que je fais mal...

Merci
Logged

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

Quote
Tu devrais essayer ça, j'ai réussi à le faire fonctionner en 5 minutes... Avec Visual Studio en C++.

Ok merci Arduimat, je teste ce soir et je te tiens au courant !
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quel est le problème ?
Il y a surement quelque chose que je fais mal...
Rajoute void devant loop(), commente (ajoute // devant) (...) et rajoute la partie setup() smiley-wink
Code:
void setup() {
  Serial.begin(9600);
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

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

Quote
Rajoute void devant loop(), commente (ajoute // devant) (...) et rajoute la partie setup()
On va y arriver smiley-wink , maintenant j'obtient :

9: error: 'Switch' was not declared in this scope
10: error: expected `;' before '{' token
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

On va y arriver smiley-wink , maintenant j'obtient :

9: error: 'Switch' was not declared in this scope
10: error: expected `;' before '{' token
switch (sans S majuscule) smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

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

Quote
switch (sans S majuscule)

Ok pas facile au début tout ça. J'ai corrigé les erreurs suivantes mais sur celle la je sèche :

"error: 'lampe_eclaire' was not declared in this scope"

C'est rien pour toi smiley-wink

Logged

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