Go Down

Topic: dessine moi un m0u10n (Read 1 time) previous topic - next topic

vj_muddy

Jul 06, 2011, 03:25 pm Last Edit: Jul 06, 2011, 03:28 pm by vj_muddy Reason: 1
amis du duino bonjour,

ce post aurait pu être à la suite de mon post sur les led mais il peut aussi tout a fait faire l'objet d'un fil de discussion.

si tu veux pas tout lire, vas au fond
voici du code destiné à allumer et éteindre une led

Code: [Select]
void setup()


         
  // initialize the digital pin as an output.

  pinMode(13, OUTPUT);
pinMode(12, OUTPUT);


}


void loop()

{
//allume eteins led 13


  digitalWrite(13, HIGH);   // set the LED on
  delay(50);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(50);              // wait for a second


}



je prends ce code, admetons que je copie colles et que je le modifie avec les valeurs pour la led 12


Code: [Select]


//allume eteins led 12

digitalWrite(12, HIGH);   // set the LED on
  delay(50);              // wait for a second
  digitalWrite(12, LOW);    // set the LED off
  delay(50);              // wait for a second



super ma question est la suivante:

comment fait on pour creer un bout de code et le mettre dans une """"function""" ou qqch comme ça, de manière à pouvoir l'appeller quand bon me semble



si par exemple je créé une fonction qui sappelle led 13 qui a pour action allume eteint led 13, puis une autre fonction led 12 (allume etein led 12), puis je ferai pareil pour les autres, 11, 10 ,9 etc...

comment juste l'apeller, comme ça je peux plus facilement creer des combinaisons.


j'espere que ma question est claire.







en gros si tu veux pas lire =====> comment creer une fonction qui execute du code lorsqu'on l'apelle.


merki




skywodd

Code: [Select]

void setup() { 
   pinMode(13, OUTPUT);
   pinMode(12, OUTPUT);
}

void loop() {
  led12();
  led13();
}

void led13() {
  digitalWrite(13, HIGH); 
  delay(50);
  digitalWrite(13, LOW);
  delay(50);
}

void led12() {
  digitalWrite(12, HIGH);
  delay(50);       
  digitalWrite(12, LOW);   
  delay(50);
}


http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

AlienArea51

Salut
J'aurai pas fait mieux  ;)

@+
The truth is elsewhere !!

vj_muddy

#3
Jul 06, 2011, 04:00 pm Last Edit: Jul 06, 2011, 04:03 pm by vj_muddy Reason: 1
:smiley-roll-blue: ben oauis logique et simple :)

merci

cool... maintenant attention niveau 2 de difficulté!

if j'appuies sur un bouton poussoir alors led 1
if j'appuies sur bouton poussoir a nouveau alors led 2
if j'appuies one again sur bouton poussoir, alors eteint.

ça s'ecrit betement

if (){

led1()}

if (){
led2()
}

bon il faut aussi venir seter la fonction btn poussoir
????

B@tto

Il te faut un flag comme on dit, ça donne un truc genre :

int flag=0;

void loop(){
if (digitalread(9)==HIGH && flag ==0) {
led1();
flag++;
}

if (digitalread(9)==HIGH && flag ==1) {
led2();
flag++;
}

if (digitalread(9)==HIGH && flag ==2) {
ledoff();
flag=0;
}
}
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

B@tto

J'oubliais : faudra surement mettre des delay() après chaque appuie, pour éviter de balayer les 3 fonctions en même temps
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

AlienArea51

bonsoir
personnellement je ferai une interruption sur appui d'un bouton ==> increment d'un compteur et un switch case !

@+
The truth is elsewhere !!

skywodd

#7
Jul 06, 2011, 04:58 pm Last Edit: Jul 06, 2011, 05:00 pm by skywodd Reason: 1

bonsoir
personnellement je ferai une interruption sur appui d'un bouton ==> increment d'un compteur et un switch case !


Les grands esprits se rencontrent ^^

Code: [Select]
byte cmp =0; // compteur d'index

void setup(){
pinMode(9,INPUT); // bouton poussoir
pinMode(10,OUTPUT); // led 1
pinMode(11,OUTPUT); // led 2
}

void loop(){
if(digitalRead(9) == HIGH){
switch(cmp){
case 0:
led1();
cmp++;
break;
case 1:
led2();
cmp++;
break;
case 2:
cmp =0;
break;
}
}
delay(500); // anti rebond
}

void led1(){
 digitalWrite(10, HIGH);  
 delay(50);
 digitalWrite(10, LOW);
 delay(50);
}

void led1(){
 digitalWrite(11, HIGH);  
 delay(50);
 digitalWrite(11, LOW);
 delay(50);
}


ou pour les fou du c++

Code: [Select]
byte cmp =0; // compteur d'index

void setup(){
pinMode(2,INPUT); // bouton poussoir
             digitalWrite(2,HIGH); // pull-up
pinMode(10,OUTPUT); // led 1
pinMode(11,OUTPUT); // led 2
             attachInterrupt(0,trigger, FALLING);
}

void loop(){

}

void trigger(){
if(digitalRead(9) == HIGH){
switch(cmp){
case 0:
led1();
cmp++;
break;
case 1:
led2();
cmp++;
break;
case 2:
cmp =0;
break;
}
}
delay(500); // anti rebond
}

void led1(){
 digitalWrite(10, HIGH);  
 delay(50);
 digitalWrite(10, LOW);
 delay(50);
}

void led1(){
 digitalWrite(11, HIGH);  
 delay(50);
 digitalWrite(11, LOW);
 delay(50);
}
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

vj_muddy

#8
Jul 10, 2011, 07:47 pm Last Edit: Jul 10, 2011, 08:41 pm by vj_muddy Reason: 1
yéééééééééé, alors super phase finale avant finalisation du projet...
j'ai placé un  piezzo sur ma paroi, et j'aimerais éventuellement un micro....

priorité piezzo....

alors comme vous m'avez expliqués, je peux changer mes sequences avec un bouton poussoir mais là ce serait cool avec un piezzo.

quand je frappe sur mon piezzo, hop ça changerais de séquence.

j'ai lu un peu de doc sur le sujet, j'ai vu qu'il fallait régler un threshold...

niveau brochage le fil rouge de mon piezzo (+)... sur un pin en analog in
et le noir (-) sur le gnd de mon arduino... non de mon supeeeeer arduino




ensuite micro


ce serait hyper cool d'avoir ma voix, ou un son en entrée micro qui fais vu metre avec mes leds...

plus y a de son plus j'augmente l'intensité de mes leds... qq à un exemple de ça.


sumarize...

comment parametrer piezzo pour switch de sequence.

comment micro in ===> vu metre


j'ai bien trouvé ça mais ça balance un string via un port... moi juste lancer une sequence me convient


http://www.arduino.cc/en/Tutorial/KnockSensor

skywodd


priorité piezzo....

alors comme vous m'avez expliqués, je peux changer mes sequences avec un bouton poussoir mais là ce serait cool avec un piezzo.

quand je frappe sur mon piezzo, hop ça changerais de séquence.

j'ai lu un peu de doc sur le sujet, j'ai vu qu'il fallait régler un threshold...

niveau brochage le fil rouge de mon piezzo (+)... sur un pin en analog in
et le noir (-) sur le gnd de mon arduino... non de mon supeeeeer arduino

http://www.arduino.cc/en/Tutorial/Knock
http://www.arduino.cc/en/Tutorial/KnockSensor
Tu trouvera ton bonheur avec ces deux liens.


ensuite micro

ce serait hyper cool d'avoir ma voix, ou un son en entrée micro qui fais vu metre avec mes leds...

plus y a de son plus j'augmente l'intensité de mes leds... qq à un exemple de ça.

La réponse à tout les projets: sonelec-musique.com !
http://www.sonelec-musique.com/electronique_realisations_vumetre_007.html



comment parametrer piezzo pour switch de sequence.

tu utilise l'exemple knock pour détecter l'impact sur le piezo puis tu lance une fonction (if(knock == blabla) faireQuelquechose();) comme si c'etait un bouton en fait.
L'utilisation d'un micro directement avec un arduino n'est pas vraiment possible (sauf FFT et encore).


j'ai bien trouvé ça mais ça balance un string via un port... moi juste lancer une sequence me convient

http://www.arduino.cc/en/Tutorial/KnockSensor

Code: [Select]

#define THRESHOLD 100
#define SENSOR A0

void setup() {
}

void loop() {
  if (analogRead(SENSOR) >= THRESHOLD) {
    faireQuelqueChose();
  }
}

faireQuelqueChose(){
  // TODO
}

C'était pourtant pas compliquer ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

vj_muddy

merci à toi, j'ai essayé de compiller le code, il me dit que je dois typer le fairequelquechose...

du coup j'ai fais ça :

Code: [Select]
#define THRESHOLD 100
#define SENSOR A0




void setup() {
 
  pinMode(12, OUTPUT);
}

void loop() {
  if (analogRead(SENSOR) >= THRESHOLD) {
   digitalWrite(12, HIGH);
  }
}



mais ma led reste allumée quoi qu'il arrive...

skywodd

#11
Jul 10, 2011, 11:06 pm Last Edit: Jul 11, 2011, 08:37 am by skywodd Reason: 1

merci à toi, j'ai essayé de compiller le code, il me dit que je dois typer le fairequelquechose...

du coup j'ai fais ça :

Code: [Select]
#define THRESHOLD 100
#define SENSOR A0

void setup() {
 
 pinMode(12, OUTPUT);
}

void loop() {
 if (analogRead(SENSOR) >= THRESHOLD) {
  digitalWrite(12, HIGH);
 }
}



mais ma led reste allumée quoi qu'il arrive...


Normal ;) la fonction fairequelquechose c'est toi qui doit la crée ;) et pour ton code il fait ce qu'on lui dis, si il detecte un knock il alume la led point, rien ne lui dit de l'eteindre donc elle reste alumé.

Code: [Select]
#define THRESHOLD 100
#define SENSOR A0

void setup() {
}

void loop() {
 if (analogRead(SENSOR) >= THRESHOLD) {
   faireQuelqueChose();
 }
}

/* exemple */
void faireQuelqueChose(){
 digitalWrite(12, HIGH);
 delay(500);
 digitalWrite(12, LOW);
}
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

vj_muddy

thks,

mais dans l'exemple que tu cite :

/* exemple */
void faireQuelqueChose(){
  digitalWrite(12, HIGH);
  delay(500);
  digitalWrite(12, HIGH);


c''est pas plutot delay 500 puis digital write (12, LOW)?

skywodd


thks,

mais dans l'exemple que tu cite :

/* exemple */
void faireQuelqueChose(){
 digitalWrite(12, HIGH);
 delay(500);
 digitalWrite(12, HIGH);


c''est pas plutot delay 500 puis digital write (12, LOW)?

DOH! oui :smiley-red:

Edit : j'ai fait la modif ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

vj_muddy

hey hey heyyyyy, salut à tous, alors me revoilà moi, mon pc et mon duino  :smiley-mr-green:


grace à votre aide, j'ai pu réaliser mon super interrupteur piezzo.

avec ce code :


Code: [Select]
#define THRESHOLD 100
#define SENSOR A0

void setup() {
}

void loop() {
  if (analogRead(SENSOR) >= THRESHOLD) {
    faireQuelqueChose();
  }
}

/* exemple */
void faireQuelqueChose(){
  digitalWrite(12, HIGH);
  delay(500);
  digitalWrite(12, LOW);
}




bien maintenant j'aimerais combiner ceci avec l'explication qui m'a été donné sur l'interrupteur avec compteur d'index, dans l'exemple si la pin d'entrée 9 est en position high, alors executer le reste de la commande.


Code: [Select]
byte cmp =0; // compteur d'index

void setup(){
pinMode(9,INPUT); // bouton poussoir
pinMode(10,OUTPUT); // led 1
pinMode(11,OUTPUT); // led 2
}

void loop(){
if(digitalRead(9) == HIGH){
switch(cmp){
case 0:
led1();
cmp++;
break;
case 1:
led2();
cmp++;
break;
case 2:
cmp =0;
break;
}
}
delay(500); // anti rebond
}

void led1(){
  digitalWrite(10, HIGH); 
  delay(50);
  digitalWrite(10, LOW);
  delay(50);
}

void led1(){
  digitalWrite(11, HIGH); 
  delay(50);
  digitalWrite(11, LOW);
  delay(50);
}


mais etant donné qu'ici, si le thersold est supérieur ou = à 100, alors il effectue """faire quelquechose"""; j'aimerais remplacer le code qui dit if digital read = high alors blabla bla, est ce que je peux dire, if fairequelquechose == true, alors blabla bmla?



en gros je veux qu'a chaque hit de piezzo, lancer une fonction diferente,


à bientot!

Go Up