Bonjour, je vous solicite car je débute dans la programmation, language C++ et j'aurais aimé avoir un petit peu d'aide de votre part pour mener à bien mon projet de fin d'année.
Je dois concevoir un genre de Question Pour Un Champion, ce qui signifie récupérer plusieurs signaux venant des LEDS et des Boutons.
Je ne sais pas comment m'y prendre pour effectuer une communication série entre ma carte Arduino Uno et un programme C++ sous Visual Studio pour ensuite récupérer les changements d'états.
Avec la librairie .Net.
J'ai regarder plusieurs Tuto, exemples sur le net mais à chaque fois c'est pour de la saisie de caractère, alors que moi c'est avec une impulsion sur un bouton poussoir.
Oui effectivement, la traduction du signal envoyé par le Bouton en caractère [côté Arduino], et ensuite traiter le caractère côté Projet Visual et renvoyé un caractère de réponse à la carte qui elle traitera à nouveau le signal pour allumer la LED ou non.
Il faut que j'utilise la librairie SerialDumper, en réutilisant l'exemple "CmdMessengerExample.pde"?
Pour quelque chose d'aussi simple je vois pas l'utilité d'une librairie :
Arduino : Si appui sur un bouton => émission d'un caractère puis attente du caractère de réponse
PC : si caractère reçu sur le port série => caractère OK ? => Envoi du caractère de réponse
Arduino : caractère de réponse OK => allumage LED
Je suis d'accord sur ta Logique B@tto, mais pour quelqu'un qui débute, l'appliquer sous forme d'un Code Foncionnel ce n'est pas facile, surtout quand tu as du mal avec l'environnement de développement.
En plus l'IDE Arduino ne fonctionne plus ... Certaine la cause du à Java 7u15.
Je vois très bien ce qu'il faut faire, mais je n'arrive pas à l'exprimer sous forme de Code, avez vous une piste? ...
Côté Arduino : Serial.print() pour envoyer et Serial.read() pour recevoir.
Côté PC : se servir de l'évènement DataReceived pour déclencher une lecture du port serie avec la méthode ReadChar (si on part du principe que tu envois un caractère depuis l'Arduino) et utiliser la méthode Write pour renvoyer un caractère en réponse. Si ça peut t'aider, un projet que j'avais fait sous VB.NET : http://arduino.cc/forum/index.php/topic,136009.0.html
La syntaxe n'est pas exactement la même mais comme ça utilise .NET donc les méthodes sont les mêmes.
Voici ce que j'ai fais du coté Arduino pour le moment.
Normalement le traitement est bon.
Mais coté Pc, je ne vois pas trop comment se Servir, ou du moins comment développer la Comm Série avec DataReceiver et ReadChar pour lire le caractère envoyé par l'Arduino.
Faut-il que je fasse une interface comme B@tto à fais dans son Projet Publier dans un Post précedent.
Aucun code nécessaire côté Arduino (juste upload du sketch Firmata standard fourni avec l'IDE Arduino).
Mais bon si le but c'est d'apprendre à développer côté Arduino c'est pas vraiment la solution.
En tout cas je bénis tous les jours l'auteur de Firmata tellement ça m'a aidé à résoudre mes problèmes d'entrée/sortie sur mon projet actuel
Merci d'avoir répondu patg_, mais je ne sais pas si le sketch firmata standart m'aidera.
Car pour ce qu'il est du Sketch Arduino, je les déjà fais.
En pièce jointe post précédent.
Mon soucis est que je n'arrive pas à récupérer le caractère coté PC envoyé par l'Arduino.
Et l'Arduino envoie en permanence des caractère alors que j'ai besoin qu'il envoie un seul caractère.
Bonjour Micol, Merci pour ta réponse. Mais mon problème actuel, est que je n'arrive pas à traiter le caractère du côté Pc.
Car j'arrive bien à l'envoyer depuis l'Arduino, en ayant quand même un problème, c'est que sa m'envoie des caractère à la chaine, alors que j'aimerais simplement en envoyé un.
Voila ce que j'ai fais du coté arduino :
// Poste BOUTON/LED Utilisateur 1
const int BP1 = 2;
const int LED1 = 8;
// Poste BOUTON/LED Utilisateur 2
const int BP2 = 3;
const int LED2 = 9;
// Poste BOUTON/LED Utilisateur 3
const int BP3 = 4;
const int LED3 = 10;
// Poste BOUTON/LED Utilisateur 4
const int BP4 = 5;
const int LED4 = 11;
// Poste ANIMATEUR (Bouton 1 et 2)
const int BP5 = 6; //Validation
const int BP6 = 7; // RAZ
//
Etat des contacts lors de l'appuie puis l'etat précédent avant le nouvelle appuie
int etatBP1 = 0;
int MemBP1 = 0;
int etatBP2 = 0;
int MemBP2 = 0;
int etatBP3 = 0;
int MemBP3 = 0;
int etatBP4 = 0;
int MemBP4 = 0;
int etatBP5 = 0;
int MemBP5 = 0;
int etatBP6 = 0;
int MemBP6 = 0;
int MIPC = 0;
void setup() {
Serial.begin(115200);
// Déclaration de l'état des contacts
pinMode(LED1, OUTPUT);
pinMode(BP1, INPUT);
pinMode(LED2, OUTPUT);
pinMode(BP2, INPUT);
pinMode(LED3, OUTPUT);
pinMode(BP3, INPUT);
pinMode(LED4, OUTPUT);
pinMode(BP4, INPUT);
pinMode(BP5, INPUT);
pinMode(BP6, INPUT);
}
void CondInitial()
{
//Initialisation des variables
etatBP1 = 0;
etatBP2 = 0;
etatBP3 = 0;
etatBP4 = 0;
etatBP5 = 0;
etatBP6 = 0;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
MemBP1 = 0;
MemBP2 = 0;
MemBP3 = 0;
MemBP4 = 0;
}
void loop(){
CondInitial(); //Appel de la fonction d'initialisation
etatBP1 = digitalRead(BP1); //Recuperer le changement d'état du bouton.
etatBP2 = digitalRead(BP2);
etatBP3 = digitalRead(BP3);
etatBP4 = digitalRead(BP4);
etatBP5 = digitalRead(BP5);
etatBP6 = digitalRead(BP6);
if(etatBP1 == HIGH && MemBP1 == 0 && MIPC == 0){
//Traitement du signal lorsque qu'on sur BP1
MemBP1 = 1; //Mise à 1 de sa mémoire et on force les autres mémoire à 0;
MemBP2 = 0;
MemBP3 = 0;
MemBP4 = 0;
MIPC = 1;
digitalWrite(LED1, HIGH);//On allume la LED
if(etatBP5 == HIGH && MemBP1 == 1 && MIPC == 1){ //Traitement du signal si réponse juste. Valider
digitalWrite(LED1, LOW);
MemBP1 = 0;
MIPC = 0;
Serial.print("a"); //Envoie d'un caractère pour incrémentation du Barre-Graph => PC
delay(2000); //Delai d'attente avant de reprendre pour voir s'il prend bien en compte le caractère
}
else if(etatBP6 == HIGH && MemBP1 == 1 && MIPC == 1){ //Traitement du signal si réponse fausse. RAZ
digitalWrite(LED1, LOW);
MIPC = 0;
MemBP1 = 1;
}
}
else if(etatBP2 == HIGH && MemBP2 == 0 && MIPC == 0){
MemBP1 = 0;
MemBP2 = 1;
MemBP3 = 0;
MemBP4 = 0;
MIPC = 1;
digitalWrite(LED2, HIGH);
if(etatBP5 == HIGH && MemBP2 == 1 && MIPC == 1){
digitalWrite(LED2, LOW);
MemBP2 = 0;
MIPC = 0;
Serial.print("b");
delay(2000);
}
else if(etatBP6 == HIGH && MemBP2 == 1 && MIPC == 1){
digitalWrite(LED2, LOW);
MIPC = 0;
MemBP2 = 1;
}
}
else if(etatBP3 == HIGH && MemBP3 == 0 && MIPC == 0){
MemBP1 = 0;
MemBP2 = 0;
MemBP3 = 1;
MemBP4 = 0;
MIPC = 1;
digitalWrite(LED3, HIGH);
if(etatBP5 == HIGH && MemBP3 == 1 && MIPC == 1){
digitalWrite(LED3, HIGH);
MemBP3 = 0;
MIPC = 0;
Serial.print("c");
delay(2000);
}
else if(etatBP6 == HIGH && MemBP3 == 1 && MIPC == 1){
digitalWrite(LED3, HIGH);
MIPC = 0;
MemBP3 = 1;
}
}
else if(etatBP4 == HIGH && MemBP4 == 0 && MIPC == 0){
MemBP1 = 0;
MemBP2 = 0;
MemBP3 = 0;
MemBP4 = 1;
MIPC = 1;
digitalWrite(LED4, HIGH);
if(etatBP5 == HIGH && MemBP4 == 1 && MIPC == 1){
digitalWrite(LED4, LOW);
MemBP4 =0;
MIPC = 0;
Serial.print("d");
delay(2000);
}
else if(etatBP6 == HIGH && MemBP4 == 1 && MIPC == 1){
digitalWrite(LED4, LOW);
MIPC = 0;
MemBP4 = 1;
}
}
}