icare:
Bonjour,
En survolant rapidement le code de référence, il faut que tu déclares 2 objets servo (par exemple mon_servo et mon_servo2 qui sont sur des pins différentes) le processus de traitement de mon_servo2 est similaire à mon_servo.
Lors de la réception des ordres via le port série, il faut que tu fasses la différence entre les ordres pour mon_servo et mon_servo2 (par exemple les touches haut et bas commandent mon_servo et les touches droite et gauche commande mon_servo2).
Un peu de réflexion et tu trouveras la similitude des lignes de programme.
Si tu as des difficultés, n'oublie pas de mettre ton programme dans le prochain post
@+
Bonjour
D'accord. Merci à toi je comprends mieux maintenant c'est le code processing qui me pose problème (le sort s'acharne ]
)
Je ne vois pas comment mettre un deuxième rectangle que je contrôlerai avec les touches gauche et droite
// programme Processing
// par X. HINAULT - 02/2010
// www.mon-club-elec.fr
// Interface Vumètre réglable par clavier HAUT/BAS et envoi série vers arduino valeur 0-9
// inclusion librairies utilisées
import processing.serial.*; // importe la librairie série processing
// déclaration variables
//--- variables utiles tracé vumètre
float Y_ref=220; // ordonnée de ligne de référence dessin rectangle
float largeur=50;
float hauteur=180; //180 représente 100% (0 à 9 = 10 positions)
int SendValue=0; // valeur envoyée à Arduino
float niveau=0.0; // 0% au départ
Serial MySerialPort; // variable désignant le port série
void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage
size(100,250); //dimensionne la fenêtre processing à 200x200 (largeur x hauteur) // 1ère instruction de Setup
// si Size() oublié => fenêtre 100x100 par défaut --
//---- initialisation port série ---
println(Serial.list()); // liste et affiche tous les ports disponibles
// Open whatever port is the one you're using.
MySerialPort = new Serial(this, Serial.list()[1], 115200); // vérifier si c'est le bon port qui est utilisé
delay (100); // pause
background (255,255,255); // fixe la couleur du fond - format RGB
stroke(255,0,0); // fixe la couleur du trait de dessin et bordure - format RGB
//nostroke(); // Désactive trait de dessin et bordure
// dessin des 2 rectangles du niveau de démmarrage (=50%)
stroke (0); // trait de contour
fill(255,255,255); // remplissage
rect (10,Y_ref-hauteur,largeur, hauteur); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence
stroke (255,0,0); // trait de contour
fill(255,0,0); // remplissage rouge
rect (10,Y_ref-niveau,largeur, niveau); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence
//----- initialisation valeur série ----
MySerialPort.write(48); // valeur initiale 0+ 48 pour format ASCII
delay (100); // pause
}
void draw() { // fonction exécutée en boucle
//--- nb : la vitesse de rafraîchissement de l'écran est de 60 par seconde apr défaut - cf frameRate()
}
// fonction de gestion des évènements
//----- clavier --------
void keyPressed() {// cette fonction est exécutée quand un touche est appuyée...
if (key == CODED) { // si appui d'une touche particulière (les touches spéciales up, down, etc.. cf Keycode)
if (keyCode == UP) { // si touche Haut appuyée
niveau=niveau+(hauteur/9); // /9 pour avoir 10 niveaux
if (niveau>=hauteur)niveau=hauteur; // ne pas dépasser hauteur
SendValue=SendValue+1; // incrémente SendValue
if (SendValue >=9) SendValue=9; // Empêche débordement variable SendValue
MySerialPort.write(SendValue+48); // valeur initiale + 48 pour format ASCII - envoie valeur 0 à 9
delay (100); // pause
}
else if (keyCode == DOWN) {// si touche BAS appuyée
niveau=niveau-(hauteur/9); // /9 pour avoir 10 niveaux
if (niveau<=0)niveau=0; // ne pas dépasser 0
SendValue=SendValue-1; // décrémente SendValue
if (SendValue<=0) SendValue=0;// ne pas dépasser 0
MySerialPort.write(SendValue+48); // valeur initiale + 48 pour format ASCII - envoie valeur 0 à 9
delay (100); // pause
}
} // fin if key==coded
// dessin des 2 rectangles du niveau
stroke(0); // contour noir
fill(255,255,255); // remplissage blanc
rect (10,Y_ref-hauteur,largeur, hauteur); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence
stroke(255,0,0); // contour rouge
fill(255,0,0); // remplissage rouge
rect (10,Y_ref-niveau,largeur, niveau); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence
}
//------- souris -------
//void mousePressed() { // est appelée à chaque fois qu'un bouton de la souris est appuyé
// }
//------- gestion du port Série ------
//void serialEvent (Serial myPort) {
// } // fin gestion port série
Pour le moment j'ai juste réussi à utiliser le touche gauche et droite en changeant deux petits trucs dans le code mais je n'ai pas réussi à le faire fonctionner avec les touches haut et bas en même temps et indépendamment les une des autres.
Cordialement