Aller au contenu


Photo
- - - - -

Code Arduino


19 réponses à ce sujet

#1 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 08 janvier 2011 - 10:08

Bonjour !



Alors je m'explique,je souhaiterais faire un code qui ferais clignoter 4 leds.Et je me demandais si il était possible de faire fonctionner ce code en même Temp que le code pour roby.

Car quand je met les leds elles interfèrent sur le fonctionnement du robot.





Merci pour vos réponses :D

#2 lordcuty

lordcuty

    Habitué

  • Membres
  • PipPip
  • 298 messages

Posté 08 janvier 2011 - 11:20

bonjour, la politesse ne serai pas un luxe...
oui c'est possible sans interférer avec roby


#3 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 08 janvier 2011 - 11:24

[quote"lordcuty"]bonjour, la politesse ne serai pas un luxe...[/quote]
--> pourtant j'ai dit bonjour et merci mais bon...

Merci pour ta réponse.

#4 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 09 janvier 2011 - 02:12

Oui bien sur.

Mais attention, en effet il faut bien se rendre compte qu'il n'y a qu'un processeur donc il ne sais pas faire deux chose en même temps.
Si tu vois des programmes faire deux chose différent c'est seulement une illusion.

Fait nous voir ton code pour que l'on en dise plus

#5 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 09 janvier 2011 - 10:59

Bonjour,

Merci d'avoir répondu.


#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3

#define SERVOG 1
#define SERVOD 0

#define UPDDG 3
#define UPDDD 4

#define SHARP 4

#define VMAX 5

Servo servog;
Servo servod;

int ledPin1 = 12;
int ledPin2 = 11;
int ledPin3 = 8;
int ledPin4 = 7;
int ledPin5 = 13;


int vLdr = 5;

int getNeutral(int s)
{
if(s == SERVOG)
return 86;
else
return 84;
}


void handleS(int s, int speed)
{
//Vitesse :
// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
int tab[6] = {0,1,3,8,10,30};
int pos = getNeutral(s);

int acc;
if (speed < 0)
acc = - tab[abs(speed)];
else
acc = tab[speed];

if(s == SERVOG)
servog.write(pos += acc);
else
servod.write(pos -= acc);
}


void move(int direction)
{
int m1 = 0, m2 = 0;
switch(direction)
{
case DROITE: m1 = -1; m2 = 1; break;
case GAUCHE: m1 = 1; m2 = -1; break;
case AVANT: m1 = -1; m2 = -1; break;
case ARRIERE: m1 = 1; m2 = 1; break;
}
handleS(SERVOG, m1*VMAX);
handleS(SERVOD, m2*VMAX);
}

void handleUPDD(int updd)
{
if(digitalRead(updd) == HIGH)
{
move(ARRIERE);
delay(500);

if (updd == UPDDG)
{
move(DROITE);
}
else
{
move(GAUCHE);
}
delay(800);
}
}

void sharp()
{
int v = analogRead(SHARP);
if (v >= 230)
{
move(ARRIERE);
delay(300);
move(DROITE);
delay(900);
}
else if (v >= 140)
{
handleS(SERVOG, VMAX);
handleS(SERVOD, 0);
delay(1500);
}
}
void setup()
{
pinMode(UPDDG, INPUT);
pinMode(UPDDD, INPUT);

Serial.begin(9600);
servog.attach(10);
servod.attach(9);
move(AVANT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);

}

void loop()
{
handleUPDD(UPDDG);
handleUPDD(UPDDD);
sharp();
move(AVANT);
delay(100);

digitalWrite(ledPin1, HIGH);
digitalWrite (ledPin2,LOW);
delay(500);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(500);


digitalWrite(ledPin3, HIGH);
digitalWrite (ledPin4,LOW);
delay(500);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, HIGH);
delay(500);

digitalWrite(ledPin5, HIGH);
delay(100);
digitalWrite(ledPin5, LOW);
delay(100); [/code]
}

Donc voilà le code.Dites moi si vous voulez plus de détails :D .

#6 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 09 janvier 2011 - 11:22

Peux tu nous en dire plus sur le clignotage de tes leds? Quelle est la fréquence que tu souhaite pour chacune d'elle, y a t il une signification au clignotage ou c'est juste pour faire joli? Est ce qu'elles doivent tjrs clignoter de la même manière ?


int cpt = 0;
int LED1 = LOW;
int LED2 = HIGH;
int LED3 = LOW;
int LED4 = HIGH;
int LED5 = HIGH;
void loop()
{
handleUPDD(UPDDG);
handleUPDD(UPDDD);
sharp();
move(AVANT);
delay(100);

// delay de 100 entre chaque changement (pas sur que tu vois quoi que ce soit d'ailleurs)
if(LED5 == HIGH) {
digitalWrite(ledPin5, LOW);
LED5 = LOW;
}
else {
digitalWrite(ledPin5, HIGH);
LED5 = HIGH;
}

if(cpt == 4) { // ce qui fait un delay de 500 entre chaque changement

if(LED1 == HIGH) {
digitalWrite(ledPin1, LOW);
LED1 = LOW;
}
else {
digitalWrite(ledPin1, HIGH);
LED1 = HIGH;
}

if(LED2 == HIGH) {
digitalWrite(ledPin2, LOW);
LED2 = LOW;
}
else {
digitalWrite(ledPin2, HIGH);
LED2 = HIGH;
}

if(LED3 == HIGH) {
digitalWrite(ledPin3, LOW);
LED3 = LOW;
}
else {
digitalWrite(ledPin3, HIGH);
LED3 = HIGH;
}

if(LED4 == HIGH) {
digitalWrite(ledPin4, LOW);
LED4 = LOW;
}
else {
digitalWrite(ledPin4, HIGH);
LED4 = HIGH;
}
cpt = 0;
}
else
cpt++;

}[/code]

Bon je t'ai mis un ptit test, je n'ai pas compilé ni rien donc je ne sais pas si ca marche, mais c'est une idée.

#7 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 09 janvier 2011 - 12:23

Bonjour,

En fait, peut importe comment elles clignotent c'est juste pour faire joli.Et ce n'est pas obligé qu'elles clignotent pareil c’est juste pour décorer :D .

Et merci pour le petit test :).

#8 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 09 janvier 2011 - 08:48

Re-Bonjour,



J'aimerai bien que quand je démarre le robot il y 'ai un piezzo speaker qui fasse 4 bip et qu'après le robot marche.Mais je n'arrive pas a faire ce code,pouvez vous m'aider?

Puis je pensais que pour la fréquences des bip sa serais : BIP,attente d'une seconde,BIP,attente d'une seconde,BIP,attente d'une seconde,BIP,attente d'une seconde





Merci de vos éventuelles réponses.





#9 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 09 janvier 2011 - 09:08

Je ne sais pas comment on fait faire bip donc il faut que tu remplace le "CODEQUIFAITBIP" par ce qui correspond ^^

void setup()
{
pinMode(UPDDG, INPUT);
pinMode(UPDDD, INPUT);

CODEQUIFAITBIP;
delay(1000);
CODEQUIFAITBIP;
delay(1000);
CODEQUIFAITBIP;
delay(1000);
CODEQUIFAITBIP;
delay(1000);

Serial.begin(9600);
servog.attach(10);
servod.attach(9);
move(AVANT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);

}[/code]

#10 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 09 janvier 2011 - 11:09

Il y a une librairie TONE pour le bip, ou plus simplement mets une borne de ton piezo à la masse, l'autre à une sortie PWM et fait un bip en tapant:

"analogWrite(100,pinpiezo);"

pour qu'il se taise:

"analogWrite(0,pinpiezo);"

avec "pinpiezo" le pin PWM associé à ton buzzer.

c'est juste pour faire un bruit agaçant, de toutes façons avec l'arduino je n'ai jamais réussi à faire un LA440 ^^.



#11 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 10 janvier 2011 - 12:19

Pour avoir des notes différentes, il faut jouer sur la fréquence envoyée au buzzer. Ça reste un bruit moche, mais ça permet de faire deux trois petites choses intéressantes quand même.



Il y a notamment quelque chose de très bien fait sur le site des Instructables. ;)

Et attention, ici il met une résistance en série avec le buzzer ! Ce n'est peut-être pas pour rien... :o



Image IPB



Bon amusement!





Sinon Alex54, tu ne dois pas non plus hésiter à faire des essais... À tester toi-même, à faire des recherches, ...

Ce n'est pas en recopiant ce que les autres te disent que tu vas avancer. C'est ton travail personnel qui te fera comprendre les subtilités et qui te fera progresser.

#12 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 10 janvier 2011 - 03:51

Ouais j'ai déja testé le FrenchCancan, je me met sur le port 13 qui contient déjà une résistance.
mais ça reste très bruité. mais ça marche! à noter que si on recherche la qualité sonore, on peut investir dans un shield qui lit des fichiers MIDI sur un carte SD par exemple.

#13 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 10 janvier 2011 - 07:52

Bonjour,

Merci pour vos réponses :D .
Je vais essayer de tester tout sa :) .

EDIT : J'ai trouvé le code pour faire BIP BIP.




#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3

#define SERVOG 1
#define SERVOD 0

#define UPDDG 3
#define UPDDD 4

#define SHARP 4

#define VMAX 5

Servo servog;
Servo servod;
//Buzzer
int buzzer = 6;


int ledPin1 = 12;
int ledPin2 = 11;
int ledPin3 = 8;
int ledPin4 = 7;
int ledPin5 = 13;


int vLdr = 5;

int getNeutral(int s)
{
if(s == SERVOG)
return 86;
else
return 84;
}


void handleS(int s, int speed)
{
//Vitesse :
// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
int tab[6] = {0,1,3,8,10,30};
int pos = getNeutral(s);

int acc;
if (speed < 0)
acc = - tab[abs(speed)];
else
acc = tab[speed];

if(s == SERVOG)
servog.write(pos += acc);
else
servod.write(pos -= acc);
}


void move(int direction)
{
int m1 = 0, m2 = 0;
switch(direction)
{
case DROITE: m1 = -1; m2 = 1; break;
case GAUCHE: m1 = 1; m2 = -1; break;
case AVANT: m1 = -1; m2 = -1; break;
case ARRIERE: m1 = 1; m2 = 1; break;
}
handleS(SERVOG, m1*VMAX);
handleS(SERVOD, m2*VMAX);
}

void handleUPDD(int updd)
{
if(digitalRead(updd) == HIGH)
{
move(ARRIERE);
delay(500);

if (updd == UPDDG)
{
move(DROITE);
}
else
{
move(GAUCHE);
}
delay(800);
}
}

void sharp()
{
int v = analogRead(SHARP);
if (v >= 230)
{
move(ARRIERE);
delay(300);
move(DROITE);
delay(900);
}
else if (v >= 140)
{
handleS(SERVOG, VMAX);
handleS(SERVOD, 0);
delay(1500);
}
}
void setup()
{
pinMode(buzzer,OUTPUT);
analogWrite (buzzer, HIGH);
delay (500);
analogWrite (buzzer, LOW);
delay (500);
analogWrite (buzzer, HIGH);
delay (500);
analogWrite (buzzer, LOW);
delay (500);
analogWrite (buzzer, HIGH);
delay(500);
analogWrite (buzzer, LOW);
delay (500);
analogWrite (buzzer, HIGH);
delay (500);
analogWrite (buzzer, LOW);

pinMode(UPDDG, INPUT);
pinMode(UPDDD, INPUT);

Serial.begin(9600);
servog.attach(10);
servod.attach(9);
move(AVANT);


pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);




}

void loop()
{
handleUPDD(UPDDG);
handleUPDD(UPDDD);
sharp();
move(AVANT);


digitalWrite(ledPin1, HIGH);
digitalWrite (ledPin2,LOW);
delay(500);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(500);


digitalWrite(ledPin3, HIGH);
digitalWrite (ledPin4,LOW);
delay(500);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, HIGH);
delay(500);

digitalWrite(ledPin5, HIGH);
delay(100);
digitalWrite(ledPin5, LOW);
delay(100);




}[/code]


Maintenant,il faut que je trouve comment faire pour que Premier BIP avec led1 ; Deuxième BIP avec led4 ; Troisième BIP avec led3 et Quatrième BIP avec led2.



#14 lordcuty

lordcuty

    Habitué

  • Membres
  • PipPip
  • 298 messages

Posté 10 janvier 2011 - 08:42

il n'y a pas vraiment de fonction pour l'ordre c'est plutôt l'emplacement dans le code qui régie l'ordre
exemple:
void setup()
{
étape 1
étape 2
}
void loop()
{
étape 3
étape 4
}
[/code]
ce qui nous donne l'ordre 1,2,3,4,3,4,3,4....

sinon essai et apprends à programmer

#15 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 10 janvier 2011 - 09:11

il n'y a pas vraiment de fonction pour l'ordre c'est plutôt l'emplacement dans le code qui régie l'ordre

exemple:


void setup()

{

étape 1

étape 2

}

void loop()

{

étape 3

étape 4

}

[/code]

ce qui nous donne l'ordre 1,2,3,4,3,4,3,4....



sinon essai et apprends à programmer


Oui,je vient de découvrir sa , avant je ne savais pas.Maintenant il ne reste plus qu'a ajouter les leds comme j'ai dit,mais je n'y arrive pas.



Premier BIP avec led1 ; Deuxième BIP avec led4 ; Troisième BIP avec led3 et Quatrième BIP avec led2.

#16 lordcuty

lordcuty

    Habitué

  • Membres
  • PipPip
  • 298 messages

Posté 10 janvier 2011 - 10:05

essai de faire un code et de le montrer on ne te le feras pas à ta place

#17 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 10 janvier 2011 - 11:30

Essaye de faire les choses en partant du départ et pas en partant du code de Roby.

Est-ce que tu sais faire simplement clignoter une LED ?
Est-ce que tu arrives à faire sonner le buzzer ?

Fais plusieurs codes séparés, tu t'y retrouveras mieux. Il sera toujours temps après d'assembler les morceaux.

#18 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 11 janvier 2011 - 04:57

Bonjour,



Oui je sais faire clignoter une led et un buzzer,facile.



EDIT : Hier j'avais essayer de mettre le buzzer en même Temp qu'une led mais sa n'a pas marché . Je pense que sa doit interférer avec l'autre code.

Voici ce que j'avais fais,ligne 116 à 134 :







#define AVANT 1

#define ARRIERE 0

#define GAUCHE 2

#define DROITE 3



#define SERVOG 1

#define SERVOD 0



#define UPDDG 3

#define UPDDD 4



#define SHARP 4



#define VMAX 5



Servo servog;

Servo servod;

//Buzzer

int buzzer = 6;





int ledPin1 = 12;

int ledPin2 = 11;

int ledPin3 = 8;

int ledPin4 = 7;

int ledPin5 = 13;





int vLdr = 5;



int getNeutral(int s)

{

if(s == SERVOG)

return 86;

else

return 84;

}





void handleS(int s, int speed)

{

//Vitesse :

// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30

int tab[6] = {0,1,3,8,10,30};

int pos = getNeutral(s);



int acc;

if (speed < 0)

acc = - tab[abs(speed)];

else

acc = tab[speed];



if(s == SERVOG)

servog.write(pos += acc);

else

servod.write(pos -= acc);

}





void move(int direction)

{

int m1 = 0, m2 = 0;

switch(direction)

{

case DROITE: m1 = -1; m2 = 1; break;

case GAUCHE: m1 = 1; m2 = -1; break;

case AVANT: m1 = -1; m2 = -1; break;

case ARRIERE: m1 = 1; m2 = 1; break;

}

handleS(SERVOG, m1*VMAX);

handleS(SERVOD, m2*VMAX);

}



void handleUPDD(int updd)

{

if(digitalRead(updd) == HIGH)

{

move(ARRIERE);

delay(500);



if (updd == UPDDG)

{

move(DROITE);

}

else

{

move(GAUCHE);

}

delay(800);

}

}



void sharp()

{

int v = analogRead(SHARP);

if (v >= 230)

{

move(ARRIERE);

delay(300);

move(DROITE);

delay(900);

}

else if (v >= 140)

{

handleS(SERVOG, VMAX);

handleS(SERVOD, 0);

delay(1500);

}

}

void setup()

{

pinMode(buzzer,OUTPUT);



analogWrite (buzzer, HIGH);

digitalWrite(ledPin1, HIGH);

delay (500);

analogWrite (buzzer, LOW);

delay (500);

analogWrite (buzzer, HIGH);

digitalWrite(ledPin4, HIGH);

delay (500);

analogWrite (buzzer, LOW);

delay (500);

analogWrite (buzzer, HIGH);

digitalWrite(ledPin3, HIGH);

delay (500);

analogWrite (buzzer, LOW);

delay(500);

analogWrite (buzzer, HIGH);

digitalWrite(ledPin2, HIGH);

delay(500);

analogWrite (buzzer, LOW);





pinMode(UPDDG, INPUT);

pinMode(UPDDD, INPUT);



Serial.begin(9600);

servog.attach(10);

servod.attach(9);

move(AVANT);





pinMode(ledPin1, OUTPUT);

pinMode(ledPin2, OUTPUT);

pinMode(ledPin3, OUTPUT);

pinMode(ledPin4, OUTPUT);

pinMode(ledPin5, OUTPUT);









}



void loop()

{

handleUPDD(UPDDG);

handleUPDD(UPDDD);

sharp();

move(AVANT);





digitalWrite(ledPin1, HIGH);

digitalWrite (ledPin2,LOW);

delay(500);

digitalWrite(ledPin1, LOW);

digitalWrite(ledPin2, HIGH);

delay(500);





digitalWrite(ledPin3, HIGH);

digitalWrite (ledPin4,LOW);

delay(500);

digitalWrite(ledPin3, LOW);

digitalWrite(ledPin4, HIGH);

delay(500);



digitalWrite(ledPin5, HIGH);

delay(100);

digitalWrite(ledPin5, LOW);

delay(100);









}[/code]



Pour l'instant,mon robot,quand j'appuis sur l'interrupteur,fais 4 bip puis démarre normalement .Mais je voudrais en plus rajouter les led avec les bip. 1er bip = led1 2eme bip = led4 3eme bip = led3 4eme bip = led2

#19 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 11 janvier 2011 - 05:39

Rien que sur la cohérence:
ligne 146 et suivantes: tu déclares des broches en sortie, (LedPINi) dont tu te sers avant!
soit tu déclares avant, soit tu déclares pas du tout...

et cela fonctione de faire analogWrite(HIGH) ? l'intéret d'analogWrite était d'avoir un signal en MLI(tantôt en haut tantot en bas, à 500Hz donc audible), si tu mets HIGH, le rapport cyclique est à 1(toujours en haut). je sais pas si tu vois de quoi je parles mais en gros l'intéret du code que je te donnais (analogWrite(100) ) était de créer un signal alternatif, et là tu crée un signal continu, tu dois juste obtenir un petit "toc" au moment du transitoire(passage de 0 à 5V). Mais après tout si tu en est satisfait...

Pour la LED qui ne fonctionne pas c'est étrange, vérifie tes branchements?

#20 alex54-RX

alex54-RX

    Membre

  • Membres
  • 37 messages
  • Gender:Male

Posté 11 janvier 2011 - 05:46

ben en faite a partir de la ligne 146 c'est pour initialisé les leds pour le jeux de lumières,puis donc si j'utilise le code la,le buzzer faire un bip continu puis âpres les 4 leds s’allument donc cela ne marche pas et je ne sais pas pourquoi.Et analogwrite pour le buzzer , oui sa marche.

EDIT : Mince alors, tu avais raison , j'ai mis pinmode...des led avant et maintenant sa marche, merci !



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users