Bonjour.
Je M'aperçois d'un problème avec la fonction draw() dans le programme suivant tout est OK car la fonction draw est vide mais le programme ne fontionne pas sans cette fontion:ex.Dans le deuxième programme je veux implanter le premier programme mais il y à des éléments dans la fonction draw et le programme ne fonctionne pas sans ces éléments d'ou le problème.
Merci.
void setup(){ print("entrz un choix e ou r"); } void draw(){ } void keyPressed(){ if(key=='e'){ s_pg1(); } if(key=='r'){ s_pg2(); } } void s_pg1(){ print("ss_pg1"); } void s_pg2(){ print("s_pg2"); }
import processing.serial.*; import cc.arduino.*; Arduino arduino; int nb_trous=12;//entrer nombre de trous; int[]tab_x={0,10,20,30,40,50,60,70,80,90,100,-550}; int IN1=8; int IN2=10; int IN3=9; int IN4=11; int vitesse=2; int pas_moteur=1; void setup() { size(500,200); println(Arduino.list()); arduino = new Arduino(this, Arduino.list()[0], 57600); arduino.pinMode(IN1,Arduino.OUTPUT); arduino. pinMode(IN2,Arduino.OUTPUT); arduino. pinMode(IN3,Arduino.OUTPUT); arduino. pinMode(IN4,Arduino.OUTPUT); } void draw(){ background(125,47,0); textSize(20); moteurX(frameCount%nb_trous); if(frameCount%nb_trous==11){ text("Passe fini",100,100); noLoop(); } } void moteurX(int y){ int a=tab_x[y]; if(a>=0){ marche_avant(tab_x[y]); } else{ marche_arriere(tab_x[y]); } } void marche_avant(int x){ text("Pas avant moteurX",40,40); float pas=x*pas_moteur; text(pas,245,40); for(int i=0;i<pas;i++){ arduino.digitalWrite(IN1,Arduino.LOW); arduino. digitalWrite(IN2,Arduino.HIGH); arduino. digitalWrite(IN3,Arduino.HIGH); arduino. digitalWrite(IN4,Arduino.LOW); delay(vitesse); arduino. digitalWrite(IN1,Arduino.LOW); arduino. digitalWrite(IN2,Arduino.HIGH); arduino. digitalWrite(IN3,Arduino.LOW); arduino. digitalWrite(IN4,Arduino.HIGH); delay(vitesse); arduino. digitalWrite(IN1,Arduino.HIGH); arduino. digitalWrite(IN2,Arduino.LOW); arduino. digitalWrite(IN3,Arduino.LOW); arduino. digitalWrite(IN4,Arduino.HIGH); delay(vitesse); arduino.digitalWrite(IN1,Arduino.HIGH); arduino.digitalWrite(IN2,Arduino.LOW); arduino. digitalWrite(IN3,Arduino.HIGH); arduino. digitalWrite(IN4,Arduino.LOW); delay(vitesse); } delay(1000); } void marche_arriere(int x){ text("Pas arriere moteurX",10,40); float pas=(x*pas_moteur)*-1; text(pas,245,40); for(int i=0;i<pas;i++){ arduino.digitalWrite(IN1,Arduino.HIGH); arduino.digitalWrite(IN2,Arduino.LOW); arduino.digitalWrite(IN3,Arduino.HIGH); arduino.digitalWrite(IN4,Arduino.LOW); delay(vitesse); arduino.digitalWrite(IN1,Arduino.HIGH); arduino.digitalWrite(IN2,Arduino.LOW); arduino.digitalWrite(IN3,Arduino.LOW); arduino.digitalWrite(IN4,Arduino.HIGH); delay(vitesse); arduino.digitalWrite(IN1,Arduino.LOW); arduino.digitalWrite(IN2,Arduino.HIGH); arduino.digitalWrite(IN3,Arduino.LOW); arduino.digitalWrite(IN4,Arduino.HIGH); delay(vitesse); arduino.digitalWrite(IN1,Arduino.LOW); arduino.digitalWrite(IN2,Arduino.HIGH); arduino.digitalWrite(IN3,Arduino.HIGH); arduino.digitalWrite(IN4,Arduino.LOW); delay(vitesse); } delay(1000); }
Hors ligne
Fabrice,
Si tu persistes à utiliser la fonction noLoop() alors que tu as besoin de l’exécution de la fonction draw(), ça ne peut pas marcher.
Comme suggéré dans le post précédent, un "if boolean" devrait résoudre ton pb...
boolean toto = True; if toto { maFonction(); toto = False; }
Surtout que je pense que c'est de ce même boolean dont tu as besoin pour ton keyPressed()...
Bon courage...
Hors ligne
Merci, pour les conseils;en fin de compte je me suis aperçus que je pouvais utiliser key sans passer par void KeyPressed ;maintenant je comprend mieux ce qui se passe dans le programme car la fonction draw était très perturbante elle boucle systématiquement sans que l'on lui demande ce qui posais problème.
Hors ligne
citation :
elle boucle systématiquement sans que l'on lui demande
Il y a rien d’exceptionnelle à ce que la draw() tourne en boucle par défaut... elle est conçue pour cela...
Mais, je te l'accorde, faut-il encore le savoir...
Bon courage...
Hors ligne
Je savais que draw bouclais mais je pensais que l'on pouvais l'éviter,mais je suppose que c'est elle qui fait la différence entre le mode statique et le mode dynamique ;car j'avais remarqué qu'avec les fonctions mousePressed keyPressed si l'on n'utilise pas la fonction draw l'utilisation de ces fonctions n'est pas possible et sans doute avec d'autres fonctions que je ne connais pas.
Hors ligne
Le mode actif de Processing utilise un mécanisme présent dans beaucoup d’environnements graphiques : la boucle
infinie de rafraichissement. Les fonctions setup() et draw() permettent donc d’animer un sketch.
- La fonction setup() est invoquée une seule fois par Processing au lancement du programme.
- La fonction draw() dessine une image qui va être affichée. La fonction draw() est ré-invoquée en boucle dès
qu’elle se termine, provoquant une suite d’images perçues comme une animation ! Par défaut la fréquence des
images est de 60 Hz.
la fonction draw() permet également la gestion des actionListener, elle met sur écoute différentes actions utilisateur comme
l'utilisation du clavier et de la souris par exemple.
Dernière modification par top (2014-08-17 11:37:48)
Hors ligne
Merci pour les explications;il serais donc possible d'écrire un programme juste dans le setup à condition de ne pas utiliser des actionListener,et de faire se répéter juste les parties qui m intéresses .
Hors ligne
Si tu implémentes uniquement la fonction setup() alors pas possible de modifier le contenu de la fenêtre graphique sous la forme d'une animation...
Hors ligne
C'est dommage;mais pour mon programme je vais devoir me passer des graphiques;ce seras moins beau. C'étais pour commander des moteurs pas à pas pour une petite machine.
Merci pour les conseils.
Hors ligne
citation :
il serais donc possible d'écrire un programme juste dans le setup
Tout à fait, je le fais fréquemment.
Si tu n'as qu'une seule image à calculer/afficher, par exemple, tu n'as pas besoin d'un draw().
Mais ce n'est pas le cas de ton sketch.
citation :
et de faire se répéter juste les parties qui m intéresses
Quel que soit le nombre de répétition, une seule image sera calculée pour être affichée au terme de l’exécution du setup().
Si tu places une boucle infinie dans le setup(), tu ne verras jamais la fenêtre de la scène s'afficher.
Bon courage...
Hors ligne
fabrice54 a écrit:
C'est dommage;mais pour mon programme je vais devoir me passer des graphiques;ce seras moins beau. C'étais pour commander des moteurs pas à pas pour une petite machine.
Merci pour les conseils.
Pourquoi devrais-tu renoncer à une partie graphique ? Tout est possible, il faut juste s'y prendre comme il faut !
Hors ligne
Bonjour.
Dans un premier temps Je vais déjà essayer de faire une classe Moteur ,et pour les graphiques je verrais avec control IP5 si cela est possible pour moi .Sinon je me contenterais des prints.Tant pis pour moi.
Hors ligne