Bonjour,
J'aimerais avoir un peu d'aide pour passer des valeurs de Processing à Arduino.
Quand je mets dans mon code Processing "myPort.write('1')";
Et dans mon code Arduino je mets que la led doit s'allumer si val est égale à 1: ça marche.
Mais dès que j'essaye de mettre un caractère comme "z" qui est une variable d'un curseur.
Impossible de trouver comment faire .
Est-ce un problème de syntaxe ou juste un problème de voie série.
Je comprend pas...
Merci de vos réponses.
Je peux vous poster mon code mais il est très long.
Hors ligne
Bonjour,
Si je dissèque ce que tu écris, tu essaie d'envoyer "z" qui est une chaîne caractère. Essaie avec 'z' qui est un caractère.
Quand tu envoies '1', tu es bien conscient que tu envoies le caractère '1' et non la valeur 1.
Hors ligne
Bonjour;
Je tient d'abord à te remercier de me répondre et de m'aider dans mon projet.
Voici mon curseur:
void bouger() {
if (mousePressed && (mouseX > 20) && (mouseX < 100) && (mouseY > 270) && (mouseY < 527)) {
z = mouseY;
println(z-271);
myPort.write('z');
}
}
En fait j'envoie sous Processing avec : myPort.write('z');
Et ensuite je reçois sous Arduino avec : if (val == 'z') { digitalWrite(ledPin, HIGH); }
Avec ce code, la led s'allume quand je bouge le curseur.
Mais ce que j'aimerais faire c'est d'allumer la led quand z atteint une certaine valeur:
J'ai donc essayer avec :
Processing : myPort.write('z');
Arduino : if (val < 10 )
La led s'allume mais la valeur de z est à 0 car quand je fait if (val < 0 ) : elle ne s'allume pas.
J'ai pourtant déclaré z dans le void setup(): z=390; et il devrait changer quand je bouge le curseur.
C'est cette valeur que j'aimerais récupérer.
Merci
Léo
Hors ligne
salut léo, on comprends mieux, maintenant, que tu veux envoyer la valeur de ta variable z . Mais quels que soient les guillemets utilisés (simples ou doubles, avec la différence qu'a expliquée Mushussu), c'est le caractère (d'imprimerie) z qui est envoyé, sans aucun rapport avec la variable.
Sans rentrer dans les détails (liaision série, octets, ascii,... voir Wikipedia), par exemple il te faut d'abord convertir ta valeur en chaîne de caractères, pour l'envoyer sous cette forme via la liaison série, puis retransformer cette chaine en nombre sur l'Arduino. Pour les entiers, c'est assez simple: côté Processing, la transformation se fait avec la fonction str() (https://processing.org/reference/strconvert_.html) et côté Arduino, tu as la fonction Serial.parseInt() qui fait l'opération inverse pour les chaînes reçues sur le port série (http://arduino.cc/en/Reference/ParseInt).
J'ai trouvé ces deux pages avec des exemples assez simples d'envoi d'entiers "naturels" (c'est à dire >= 0) :
http://www.interactiondesign.se/wiki/co … 2013.dec10
http://www.interactiondesign.se/wiki/co … an19_20_21
Hors ligne
citation :
Bonjour,
Bon j'ai pas mal avancé sur mon projet.
Malheureusement j'ai toujours quelques problèmes :
1) J'aimerais passé les valeurs des 6 motifs et des 4 couleurs sous un seul octets qui sera le tab[3].
Voici la trame que j'envois sous processing: 5 octets (2 pour le Début et la fin, 2 pour les curseur et 1 autres pour couleurs + motifs).
J'ai mit le caractère 'U' pour tester si tab[3] fonctionne.
myPort.write('D');
myPort.write(z_serie);
myPort.write(x_serie);
myPort.write('U');
myPort.write('F');
2) J'aimerais lire les valeurs des variables des curseurs. Pour l’instant je n'ai réussi qu'a faire allumé un diode quand z ou x > 128. J'ai vu qu'on pouvait utiliser des préfixes. Es-ce la bonne solution ?
3) Enfin je pense que je vais utiliser un carte ARDUINO MEGA car j'ai besoin d'un deuxième port série pour passer en DMX. Si quelqu'un connait la syntaxe pour le vecteur d'indication sous ATMEGA2560 j'ai utilisé celui la "ISR(USART_RX_vect)" mais ça ne marche pas.
Je peux vous envoyer plus de partie de mon code si vous le désirez.
Merci de vos réponses.
Léo
Hors ligne
Bonjour,
1 - Les valeurs un peu traditionnelles que j'ai déjà rencontrées pour le début et la fin de trame sont 0x7E et 0xEF. Je n'en connais pas la raison, mais c'est ce que j'utilise, tu peux faire comme tu le souhaites.
2 - Qu'appelles-tu des préfixes ?
3 - Comme le µC a deux port série et si tu regardes la fiche technique du Atmega2650 à la page 104, on peut en déduire que les vecteur d'interruption sont USART0_RX_vect et USART1_RX_vect.
Bon courage
Hors ligne
Merci de votre réponse.
Pour les préfixes le problème est résolu, j'ai réussi à régler l'intensité d'une led grâce au slider en utilisant tous simplement la librairie ControlP5.
La seule chose que je n’arrive pas à faire pour l'instant c'est de mettre les valeurs des 6 motifs et des 4 couleurs dans le même octet.
Je pensais à un début de résolution :
255/10 =25.5
Du coup ça ferait 25.5 bit pour chaque valeur.
Et pour le début et la fin de la trame j'ai mit 2 octet "D" et "F".
Pour la méga je testerais au lycée demain
Léo
Hors ligne
Aux dernières nouvelles un octet contient huit bits. Donc il n'est pas possible de coder 10 valeurs.
Es tu limité par le nombre d'octets transmis ?
Si tu as 10 valeurs à envoyer utilise 10 octets.
Hors ligne
ah oui je me suis mal exprimé c'était 25.5 valeurs x 10 qui font 255 soit 1 bit
Et non je ne suis pas limité en en nombre d'octet et si cela ne change rien je pense que je vais faire 10 octet du coup.
C'est mon prof qui m'as dit de les rassembler en un octet.
En tout cas merci de ta réponse
Hors ligne
Bonjour,
Toujours dans la suite de mon projet j'ai besoin d'un peux d'aide pour coder mon deuxième slider.
J'ai trouvé un programme sur mon club elec permettant de régler l'intensité d'une led à partir s'un slider.
J'en ai rajouté 1.
Je n'arrive pas a trouver ce qu'il faut changer dans le code arduino pour pouvoir extraire les valeurs du deuxieme slider.
Voici mon code processing et mon code arduino.
PROCESSING
ARDUINO
Hors ligne
Bonjour,
Comment faire compliquer quand on peut faire simple. Voici ce que je ferais pour la méthode du spider :
Cela envoie juste un octet sur le port série, et tu sais très bien le récupérer sur l'Arduino.
Hors ligne
Génial, quel génie!
Vous m'avez vachement aider pour mon projet !
Heureusement que vous êtes la car j'était un peux perdu depuis que mon prof est parti à la retraite au milieu de l'année...
Je vous remercie. Et es ce que ça vous dérange si je vous site dans les sources de mon compte rendu ?
C'est la seul chose que je peux faire pour votre aide.
Je vous communiquerez ma note que j'aurai obenue.
Dernière modification par léo_le_vilain (2015-05-03 21:17:31)
Hors ligne
Si tu veux me citer pas de problème.
Donne aussi le lien de codelab.fr pour que d'autres puissent s'abreuver à la source du savoir numérique.
Bon courage pour la suite.
Hors ligne
Alors,
Voici mon souci:
J'essaye de faire varié l'intensité de 2 LED différentes a l'aide de 2 sliders.
J'ai essayé beaucoup de chose et je crois savoir pourquoi ça ne marche pas.
Quand je met ça je n'arrive pas à changer le code arduino pour pourvoir lire toute la trame avec les 5 octets
J'y arrive quand j’enlève "+/n" qui est le saut de ligne.
J'ai essayer avec ton code et je suis quand même obligé de mettre +"/n".
J'en déduis qu'il faut changer quelquechose dans le code de réception arduino.
Merci de ta réponse.
Hors ligne
Dans ton code tu utilises cette instructions :
myPort.bufferUntil('\n');
Donc, c'est pour cela que tu ne peux envoyer que si tu termines par un '\n'
Voilà ce que je ferais :
Hors ligne
Pages: 1