Récupérer les données d'une application (commande de LED)

Bonjour,

Je vous explique mon soucis. J'ai créé une application en VB avec le logiciel virtual studio.
L'application envoie 3 données que je souhaite récupérer pour les utiliser avec le logiciel arduino afin de pour commander la couleur d'une led.
Avec mon application, j'ai réussi à envoyer mes donnés dans un fichier texte que je peux placer où je veux sur mon ordinateur.
Cependant je n'arrive pas à récupérer les données pour pouvoir les utiliser :frowning:

En premier lieu, j'avais essayé d'envoyer les données de mon application vers le port série USB pour pouvoir les récupérer par la suite grâce au logiciel arduino mais il y avait confrontation entre mon application et l'application du logiciel arduino.

C'est pour ça que j'ai eu l'idée de passer par un fichier .txt mais je n'y arrive pas non plus.
J'ai un professeur qui m'a dit de créer un tableau directement dans la mémoire de l'ordinateur à l'aide de pointeur mais je ne sais pas du tout comment faire ça en VB et je trouve vraiment plus simple de passer par un fichier .txt même si au final je trouve pas de solution :confused:

J'espère vraiment que des personnes pourront m'aider :frowning:

Bonjour et bienvenue,

La meilleure (et la seule?) façon de communiquer avec l'arduino est d'envoyer tes données sur le port série utilisé par l'arduino. Tu dis que tu as essayé et que ça ne fonctionnait pas, c'est que tu as dû faire une erreur quelque part :wink:

Voilà un exemple tout simple en C#: http://forum.arduino.cc/index.php?topic=196990.msg1454821#msg1454821

Bonsoir, merci beaucoup pour votre réponse et pour la bienvenue :smiley: !

J'ai un peu plus avancé désormais en retournant sur mes pas. (j'étais un peu parti trop loin avec mes idées)

Il me reste un problème à résoudre pour aboutir à ce que je souhaite vraiment.
En effet, j'ai bien réussi à envoyer un caractère "a" sur le port série et le récupérer par le logiciel arduino pour que je puisse utiliser cette information.

Voici mon code Arduino :

int BrocheRouge = 13;
int BrocheVerte = 11;
int BrocheBleu = 12;

void setup()
{
pinMode(BrocheRouge, OUTPUT);
pinMode(BrocheVerte, OUTPUT);
pinMode(BrocheBleu, OUTPUT);
Serial.begin(9600);
}

void loop()
{ if (Serial.available()) {
char information=Serial.read();

if (information == 'a')
{setColor(255, 255, 0);
delay(1000);
}
else if(information =='b')
{setColor(255,0,0);}

}
}

void setColor(int red, int green, int blue)
{
analogWrite(BrocheRouge, red);
analogWrite(BrocheVerte, green);
analogWrite(BrocheBleu, blue);
}

Mon problème est que j'arrive à lire qu'un seul caractère à la fois et je n'arrive pas à en lire deux en même temps (voir trois parce que c'est le nombre que j'aurai souhaité :confused: )

En effet, je voudrais récupérer :
L'information de la composante rouge par exemple 123, la stocker dans une variable
L'information de la composante verte par exemple 144 qui arrive après celle précédente pour la stocker dans une variable
Puis celle du bleue par exemple 101

Puis réutiliser directement ma fonction setColor :confused:

Et j'ai également devancé un problème à résoudre si jamais j'arrive à récupérer ces trois données c'est qu'elles ne sont pas toujours sur 3 bits, une composante de couleur ayant des valeurs entre 0 et 255.

Je vous remercie d'avance pour votre lecture :slight_smile: :slight_smile:

Tu pourrais envoyer sous forme de chaine de caractères: par exemple "255,128,64\n" et utiliser sscanf comme dans mon exemple pour stocker ces valeurs dans des variables.

Mais dans ton cas il est plus pratique et plus simple d'envoyer/recevoir des octets, plutôt que des nombres sous forme de caractères. D'une pierre deux coups ton code sera plus simple, plus rapide (moins de caractères à envoyer/recevoir), et résoud ton second problème.

Un caractère tel que 'a' n'est rien d'autre qu'un octet qui est égal à 97. Donc quand tu envoie 'a' à ton arduino, tu envoie en fait le nombre 97.

Si ta couleur était R97 G98 B99, alors tu pourrais envoyer les caractères "abc" à l'arduino, qui convertirait les caractères reçu en composantes de ta couleur. Par exemple:

if ( Serial.available() == 3 ) // si l'arduino à reçu 3 octets
{
  uint8_t r = Serial.read(); // lire le caractère 'a' et le stocker en tant qu'octet non signé
  uint8_t g = Serial.read(); // lire le caractère 'b' et le stocker en tant qu'octet non signé
  uint8_t b = Serial.read(); // lire le caractère 'c' et le stocker en tant qu'octet non signé

  // r = 97, g = 98, b = 99
}

Bien sûr, il n'est pas nécessaire d'envoyer des caractères, tu peux très bien envoyer les octets 97, 98 et 99 et tu aura le même résultat.

Donc utilise cette méthode dans ton programme VB.

Désolé si c'est un peu confus ou mal expliqué, mais il est tard ^^

Bonjour

Je te suggère de regarder ICI ma librairie simpleLedRVB, qui contient justement un exemple qui ressemble très fortement à ce que tu souhaites faire (exemple_2_commande_led_RVB)

Salut, si vous voulez récupérer des fichiers sans affecter d'autres applications, je vous suggère d'appliquer un outil de récupération de données, vous pouvez essayer le logiciel Bitwar Data Recovery. Je pense qu'il ne weel dans la récupération des données.