Go Down

Topic: commander arduino avec pc (Read 5189 times) previous topic - next topic

kira

Bonjour à tous, je cherche depuis un moment sur google mais je ne trouve pas ce que je veux.
je voudrais une approche simple pour pouvoir envoyer des données, de mon PC vers l'arduino.
Exemple, je rentre dans un terminal : var = 5 et dans l'arduino var prend la valeur 5.

Et si vous aviez le tuto pour faire une interface graphique, meme ultra moche, ça serait le pied!!
merci :)

barbudor

Il y plein de tuto sur le site Arduino avec qui utilise Processing coté PC.

Sinon, tu peux faire des programmes en C# en utilisant la version gratuite de Visual C#
Après il faut que tu utilises la liaison série pour échanger des messages (voir mon tuto sur les protocoles de communication dans la section Tutoriaux du forum) avec l'Arduino.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

kira

Ok, je vais chercher sur les tutos du site et regarder les tiens, même si je suis pas certain d'avoir une "prise" pour les liaisons series sur mon arduino  XD
( précision : je suis un gros noob, et je n'ai même pas la prétention d'un jour ne plus l'être, alors je fais de la "....." mais ça me plait donc soyez indulgents :p )

kira

Bon je dois etre une grosse tanche, le seul de tes tutos que je trouve concerne les afficheurs 7segments..

barbudor

"Barbudor" avec un B comme "barbe" :)

J'ai qu'un seul tuto qui s'appelle "Implementer un protocole de communication"
Désole, je suis sur mon téléphone je ne peut pas chercher et te donner le lien direct.

La liaison série c'est le lien de communication que tu utilises avec ton Arduino quand tu la relie au PC.
Sur ton Arduino il y a un composant qui fait l'interface en USB et la liaison série du chip Arduino. Quand tu fait un Serial.println(), tu utilise la liaison série pour envoyer le message au PC.

Sur le PC, Windows (ou Linux) détecte l'interface USB comme une interface série et crée un port COMx qui est celui que choisit dans les menu de l'IDE Arduino.

En c#, pour utiliser la liaison série, il existe une classe SerialPort. Il suffit de créer un objet de cette classe genre :
SerialPort serial("COM1", 9600)
pour en suite pouvoir faire comme sur l'Arduino des serial.write() ou serial.read()
Bien sur les fonctions C# sur l'utilisation du port série sont sensiblement différentes dans leur syntaxe que celle de l'Arduino mais c'est en gros le même principe.

A+
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

skywodd

Salut,

Si tu débute et que tu veut faire un interface graphique je te conseille (au choix) :
- le C# (langage ~ C/C++) -> plein de truc tout prêt pour faire des interfaces graphiques
- le VB.net (langage type basic) -> comme le C# mais en langage basic

C'est nettement plus simple que d'utiliser processing (dans le cadre d'un gui).
Si tu veut vraiment faire tes gui avec processing -> menu -> examples -> *ouvre les rubriques* -> gui

Pour le protocole tu peut prendre exemple sur le tutoriel de barbudor (voir dans la section tuto du forum).

J'ai aussi fait un systéme avec des commandes reprenant la mise en forme d'une trame nmea :
http://skyduino.wordpress.com/2012/03/22/arduino-parser-une-chaine-de-caracteres/
ça peut te servir de base pour ton code ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

barbudor

Ce soir, en 2eme position juste en dessous du tuto sur le 7-segment qui est d'ailleurs de JLB et non pas de moi.

http://arduino.cc/forum/index.php/topic,102540.0.html
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

kira

héhé sympa pour tous ces tuyaux !! :)
je vais essayer de me débrouiller avec tout ça !
enfait je pensais qu'il y aurait une petite interface toute faite existante sur le logiciel d'arduino.
mais ça aurait été sans doutes trop simple ! :p
Je vous dis ce qu'il en suit ! et merci !

barbudor

Ben puisqu'on parlait de JLB et de ses 7-segments, ils a aussi pondu cette petite chose qui pourrait t'interresser :

http://arduino.cc/forum/index.php/topic,108199.0.html
http://arduino.cc/forum/index.php/topic,107824.0.html
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

kira

J'ai bien lu ce que Barbudor m'a expliqué et j'ai visité le SiteduZero et j'ai compris que je n'avait pas besoin d'aller si loin que ce dont vous me parler pour le moment :)

Enfait je peux modifier la valeur d'une variable sur mon arduino depuis mon PC et ce grace au "serial monitor" d'après ce que j'ai compris.
cependant lors de mes essais.. devinez quoi ? Ca marche pas :p


const int ledPin=2;
int valPc = 0;
void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
valPc = Serial.read();
Serial.println(valPc, DEC);

if (valPc = 1)
{
  Serial.println(valPc,DEC);
  digitalWrite (ledPin, HIGH);
  delay(5000);
 
}
}


Bon, normalement si j'entre la valeur 1 dans le serial monitor, la led devrait s'allumer pendant 5sec, jusqu'a que j'entre une valeur différente, comme "4" par exemple.
Mais le serial moniteur m'envoit du :
-1
1
-1
ET lorsque je rentre un chiffre :
s4

Qu'est-ce que je fais mal ?

Dagal

Si tu veux que ta led s'éteigne, il faut envoyer un LOW juste après le DELAY

kira

En effet, une erreur de ma part !
Mais ça ne fonctionne toujours pas..
Le serial monitor continu de m'envoyer des series de -1 et 1 sans que j'entre de valeur.
On dirait qu'il m'envoit la valeur du nombre de données contenues dans le buffer de l'arduino.
et que cette valeur oscillerait de -1 à 1.
Je ne comprend pas bien ce qu'il se passe.

kira

#12
Jul 06, 2012, 12:15 am Last Edit: Jul 06, 2012, 01:05 am by kira Reason: 1
Ahhh, je crois avoir compris mon erreur, il faut lui parler en octets ?
j'essaie et je vois :p


Edit : bon j'ai essayé.. c'est la misère.
J'ai honteusement plagié un programme qui me renvoi juste l'octet reçut. rien de bien compliqué.
Je remarque que si je tape un caractère et que je l'envois depuis le serial monitor, l'arduino me renvoi la valeur décimal ascii du caractère, jusque là, normal c'est ce qu'on lui demande.
Mais lorsque je veux taper un caractère comme le 0, le caractère correspondant c'est "NUL".
Du coup.. ça marche pas.
Je ne sais pas si je suis bien clair, alors un exemple.

Le code de arduino.cc :
int incomingByte = 0;   // variable pour lecture de l'octet entrant

void setup() {
   Serial.begin(9600);   // ouvre le port série et fixe le débit à 9600 bauds
}

void loop() {

   // envoie une donnée sur le port série seulement quand reçoit une donnée
   if (Serial.available() > 0) { // si données disponibles sur le port série
      // lit l'octet entrant
      incomingByte = Serial.read();

      // renvoie l'octet reçu
      Serial.print("Octet recu: ");
      Serial.println(incomingByte, DEC);
   }
}


Maintenant admettons que j'entre dans le serial monitor le caractère "a", il me retourne : 97, et c'est bien normal !
Mais si je veux qu'il me retourne 0 par exemple, je devrais entrer "NUL" en suivant cette logique, mais là.. il me retourne : 78 puis 85 puis 76, soit la valeur décimal des caractères N puis U puis L ..

Ahlalaa tout ça parceque je veux changer une variable sur l'arduino,pendant qu'il tourne depuis mon PC... :p  

bouault

WhiteCat est un logiciel de contrôle lumière pour le théâtre et le live( http://www.le-chat-noir-numerique.fr ); il contient un module pour communiquer avec arduino ( http://www.le-chat-noir-numerique.fr/whitecat/dokuwiki/doku.php?id=configuration_arduino&DokuWiki=bc9a0aad4fddcc187453b38ac260aae6 ).
Tu aura besoin de demander une licence (gratuite) pour pouvoir sauvegarder ( http://www.le-chat-noir-numerique.fr/whitecat/dokuwiki/doku.php?id=register ).
Je te conseille de télécharger la dernière pre-realase qui te permet de reconfigurer ton arduino depuis le logiciel (WhiteKitten).
Que veux tu faire exactement ?
A+,
Jacques

barbudor

Comme je le dis dans mon tuto, il y a 2 type de protocoles :
- ASCII
- Binaires

Quand tu tapes "4" dans ton Serial monitor, tu tape en ASCII et le Serial monitor envoie sur la liaison série les octets 0x34 ("4") puis 0x0D (touche return).

Quand tu écris dans ton code
Code: [Select]
val = Serial.read(); tu lis un octet. C'est à dire que tu considère que le protocole est binaire.

Si tu exécutes le code posté par Kira juste au dessus, tu verras s'afficher le code ASCII correspondant à l avaleur des octets envoyés par le Serial monitor.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Go Up