Bonjour , je suis étudiant en STI2D et j'ai un projet de fin d'année à réaliser. Pour ma part il s'agit d'un gilet de cycliste qui permettra d'afficher tout changement de direction, lorsque l'utilisateur freinera, mais aussi d'afficher une sorte de warning comme sur les voitures. En gros il y aura 4 boutons reliés a une carte arduino et ma tâche consiste à réaliser une interface graphique permettant de contrôler si toutes les fonctions (stop,clignotant gauche, clignotant droit et warning) fonctionnes correctement et pour cela je dois les faire apparaître sur processing. Le problème est que je ne sais pas vraiment par ou commencé, j'ai déja réussis une petite partie de mon programme qui me permet tout juste d’afficher une image de mon gilet mais ensuite je voudrais faire de tel sorte à ce que quand j'appuis sur une touche du clavier par exemple, une forme de clignotant droit (flèche) s'affiche sur mon image puis ainsi de suite pour les autres commandes mais je ne sais pas comment m'y prendre. Merci d'avance pour vos réponses.
Hors ligne
Tu pourais faire un booleen dans le draw() :
Tu pourrais aussi réaliser un dessin de la flèche avec les vertex :
Le début de ce tuto peut t'aider : https://processing.org/tutorials/pshape/
Hors ligne
Merci pour ta réponse mathieu, mais j'aimerais enfaite que led "LEDS" représentées par des ellipse s’affiche une a une a un intervalle de temps très court afin de jouer sur la persistance rétinienne car cela pourra m'apporter des points au niveau développement durable. Enfaite il faudrais que par exemple si j'appuis sur la touche "z", cela dessine 5 fois la même ellipse, une à une mais avec des positions x et y différentes afin de faire une forme de flèche:
* *
* *
* *
* *
* *
Hors ligne
salut Antho57, pour tes ellispes, une fois que tu as l'image (soit exsitante, soit que tu peux dessiner une seule fois au début dans un "calque", voir la doc de createGraphics() ), tu pourrais créer un tableau (de paires x y) de coordonnées que tu fais "défiler" deux par deux (x=i*2 et y=i*2+1) dans une boucle en affichant à chaque fois ton graphique avec la fonction image(mongraphique,x,y), par exemple.
Pour la persistance rétienne, faut voir... . Par contre, au niveau développement durable, je suis pas sûr... à part en baissant la luminosité de ton écran (ou sur une dalle OLED?) la consommation sera la même, voire supérieure vu que tu vas démultiplier tes calculs d'affichage, alors que la bonne pratique consiste habituellement à les réduire au maximum... D'ailleurs Processing serait plutôt un des pires choix en terme d'efficacité énergétique
Hors ligne
Merci pour ta réponse Nicolas je vais essayer de réaliser cette boucle. Oui c'est pas faux mais mon professeur (qui est pas très doué d'ailleurs) m'a proposer cette argument donc voila après il est vrai que pour ma part sa me semble pas très logique non plus ^^ puis j'ai été "obligé" de faire une interface avec processing car c'ets le seul logiciel que j'avais déja un peu utilisé auparavant et je n'ai pas le temps de la réaliser sur Python par exemple.
Hors ligne
Pourrait tu me donner un programme d'exemple car franchement je n'arrive pas à réaliser ce programme, je suis vraiment pas doué sur processing ^^
Hors ligne
personnellement, je fais pas ça (sauf des fois, quand c'est pas trop évident, si ça m'intéresse et que j'ai le temps, mais depuis peu, je suis assez occupé et j'ai déjà d'autres réponses en retard pour le forum...) mais les gens qui aident ou moi, on préférera de toute manière que tu nous montres un bout de code que tu as fais toi, et à partir de là, on te guidera (et ça montreras aussi que tu as fait ta part d'effort, c'est pas toujours facile mais c'est le minimum pour un problème qui te concerne toi, et c'est plus motivant pour les autres).
En attendant, avec une simple recherche, j'ai trouvé un petit exemple déjà donné à la fin de cette page et qui fonctionne comme je te proposais de faire : http://forum.processing.org/one/topic/c … array.html .
Prend le temps de bien voir comment il fonctionne, et cherche aussi les fonctions dont je t'ai parlées sur Google, tu devrais tomber directement sur la documentation de Processing avec des exemples qui servent à comprendre.
Dernière modification par Nicolas Lhommet (2015-03-19 15:10:25)
Hors ligne
Merci pour ta précédente réponde j'ai réussi à réaliser a peu près ce que je voulais faire. Maintenant je dois faire communiquer mon programme arduino afin d'afficher les motifs de chacun des boutons sur processing. Le problème est que je ne sais vraiment pas comment récupérer les données envoyées par arduino sur processing. Si vous pourriez m'éclairer à ce sujet cela serait sympa. Voici mon code arduino:
const int colone1 = 2;
const int colone2 = 3;
const int colone3 = 4;
const int colone4 = 5;
const int ligne1 = 6;
const int ligne2 = 7;
const int ligne3 = 8;
const int ligne4 = 9;
const int ligne5 = 10;
const int bouton1 = 19;
const int bouton2 = 18;
const int bouton3 = 17;
const int bouton4 = 16;
boolean etatBout1;
boolean etatBout2;
boolean etatBout3;
boolean etatBout4;
int CG=0;
int CD=0;
int STOP=0;
int WARNING=0;
void setup()
{
Serial.begin(9600);
pinMode(colone1,OUTPUT);
pinMode(colone2,OUTPUT);
pinMode(colone3,OUTPUT);
pinMode(colone4,OUTPUT);
pinMode(ligne1,OUTPUT);
pinMode(ligne2,OUTPUT);
pinMode(ligne3,OUTPUT);
pinMode(ligne4,OUTPUT);
pinMode(ligne5,OUTPUT);
pinMode(bouton1,INPUT);
pinMode(bouton2,INPUT);
pinMode(bouton3,INPUT);
pinMode(bouton4,INPUT);
}
void loop()
{
etatBout1 = digitalRead(bouton1);
etatBout2 = digitalRead(bouton2);
etatBout3 = digitalRead(bouton3);
etatBout4 = digitalRead(bouton4);
Serial.println(etatBout1);
if(etatBout1==LOW && etatBout2==HIGH && etatBout3==HIGH && etatBout4==HIGH)
{
digitalWrite(colone1,HIGH);
digitalWrite(ligne1,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(100);
digitalWrite(ligne1,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne2,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(119);
digitalWrite(ligne2,LOW);
digitalWrite(colone3,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne3,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,LOW);
delay(138);
digitalWrite(ligne3,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne4,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(157);
digitalWrite(ligne4,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne5,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(176);
digitalWrite(ligne5,LOW);
}
else
{
digitalWrite(ligne1,LOW);
}
Serial.println(etatBout2);
if(etatBout2==LOW && etatBout1==HIGH && etatBout3==HIGH && etatBout4==HIGH)
{
digitalWrite(colone1,HIGH);
digitalWrite(ligne1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(100);
digitalWrite(ligne1,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne2,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(119);
digitalWrite(ligne2,LOW);
digitalWrite(colone3,LOW);
digitalWrite(colone1,LOW);
digitalWrite(ligne3,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(138);
digitalWrite(ligne3,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne4,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(157);
digitalWrite(ligne4,LOW);
digitalWrite(colone1,HIGH);
digitalWrite(ligne5,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(176);
digitalWrite(ligne5,LOW);
}
else
{
digitalWrite(ligne1,LOW);
}
Serial.println(etatBout3);
if(etatBout3==LOW && etatBout1==HIGH && etatBout2==HIGH && etatBout4==HIGH)
{
digitalWrite(ligne2,HIGH); // Allumage ligne2
digitalWrite(colone1,LOW);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,LOW);
delay(19);
//Fin allumage ligne2
digitalWrite(ligne3,HIGH); // Début allumage ligne3
digitalWrite(colone1,LOW);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,LOW);
delay(19);
//Fin allumage ligne3
digitalWrite(ligne4,HIGH); //Debut allumage ligne4
digitalWrite(colone1,LOW);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,LOW);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,LOW);
digitalWrite(colone4,HIGH);
delay(19);
digitalWrite(colone1,HIGH);
digitalWrite(colone2,HIGH);
digitalWrite(colone3,HIGH);
digitalWrite(colone4,LOW);
delay(19);
//Fin allumage ligne4
}
else
{
digitalWrite(ligne2,LOW);
digitalWrite(ligne3,LOW);
digitalWrite(ligne4,LOW);
}
Serial.println(etatBout4);
if(etatBout4==LOW && etatBout1==HIGH && etatBout2==HIGH && etatBout3==HIGH)
{
digitalWrite(ligne1,HIGH);
delay(100);
digitalWrite(ligne2,HIGH);
delay(100);
digitalWrite(ligne3,HIGH);
delay(100);
digitalWrite(ligne4,HIGH);
delay(100);
digitalWrite(ligne5,HIGH);
delay(100);
digitalWrite(ligne1,LOW);
delay(100);
digitalWrite(ligne2,LOW);
delay(100);
digitalWrite(ligne3,LOW);
delay(100);
digitalWrite(ligne4,LOW);
delay(100);
digitalWrite(ligne5,LOW);
delay(100);
digitalWrite(colone1,LOW);
digitalWrite(colone2,LOW);
digitalWrite(colone3,LOW);
digitalWrite(colone4,LOW);
}
else
{
digitalWrite(ligne1,LOW);
digitalWrite(ligne2,LOW);
digitalWrite(ligne3,LOW);
digitalWrite(ligne4,LOW);
digitalWrite(ligne5,LOW);
}
if(etatBout1 == LOW)
{
CD=0;
}
else
{
CD=1;
}
Serial.println(etatBout1);
if(etatBout2 == LOW)
{
CG=0;
}
else
{
CG=1;
}
Serial.println(etatBout2);
if(etatBout3 == LOW)
{
STOP=0;
}
else
{
STOP=1;
}
Serial.println(etatBout3);
if(etatBout4 == LOW)
{
WARNING = 0;
}
else
{
WARNING = 1;
}
Serial.println(etatBout4);
}
Hors ligne
Bonjour,
Ton code est difficilement lisible, tu pourrais le simplifier en le condensant. Tu devrais regarder du côté des tableaux et pour les parcourir de regarder la boucle for …
http://arduino.cc/en/Reference/Array
Pour la liaison entre Arduino et Processing regarde du côté des exemples de la librairie Serial de Processing et ici :
http://processing.org/reference/librari … read_.html
Tu dois envoyer l'état de chacun des boutons. Pour cela tu peux avoir une convention. Si la valeur reçu est 1 alors c'est le bouton 1, si c'est 2, c'est le bouton 2, si c'est 4 alors bouton 3, si c'est 8 alors bouton 4. Tu remarqueras que ce sont des puissances de 2. Pour la suite cela te facilitera la vie.
Et si c'est 0 alors aucun bouton n'est pressé.
Bon courage.
Hors ligne
Merci pour ta réponse mushussu. Oui il est vrai que mon code est très long car c'est la premiere fois que je dois programmer et c'est pas mon fort ^^. Pour ce qui est de la communication avec arduino et processing j'ai un souciscar lorsque je lance ma simulatio, une erreur s'affiche au niveau des ports, sa me met "Error inside Serial.<init>() et je n'arrive pas a trouver ce que signifie ce problème malgres mes recherche. Si tu aurais une idée et m'expliquer d'ou cela provient et ce que sa signifie je suis preneur.
Hors ligne
Bonjour,
Après avoir lu ce fil de discussion :
http://forum.processing.org/one/topic/e … crazy.html
Je te suggère que la première instruction de setup() soit size(…, …);
Dans ton code actuel où est placé l'initialisation de ton port série dans le setup() ?
En espérant que cela t'aide.
Hors ligne
Pages: 1