Pages: [1]   Go Down
Author Topic: [ resolu ]Eviter les repetitons  (Read 488 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 3
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir
Je fais appel à vous mon programme est très long et je ne sais pas si je vais avoir assez de place sur ma UNO
comment faire pour savoir si mon programme n'est pas trop lourd ?
De plus je dois mettre 4 fois de suite une portion de programme comment faire pour ne pas copier 4 fois la même chose ?
je vous remercie beaucoup pour votre aide


cette partie de code est long (4x la même chose) peut-on réduire ?
merci
Code:

}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);




« Last Edit: May 19, 2013, 08:12:07 am by amigaêl » Logged

Offline Offline
Jr. Member
**
Karma: 3
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir
j'ai essayé de faire ça mais ça ne marche pas !


Code:

}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
byte i = 0;
while (i < 5)
{
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);
i++;


}
for (pos11 = 90; pos11 > 35; pos11 -= 1)
{
  pos10=map(pos11,90,35,90,35);
  servo11.write(pos11);
  servo10.write(pos10);
  delay(10);
}
for (pos9 = 90; pos9 < 180; pos9 += 1)
{
  pos8=map(pos9,90,180,0,45);
  servo9.write(pos9);
  servo8.write(pos8);
  delay(10);





« Last Edit: May 18, 2013, 06:10:42 pm by amigaêl » Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.siteduzero.com/sciences/tutoriels/arduino-pour-bien-commencer-en-electronique-et-en-programmation/les-fonctions-6
Logged

France - Normandy
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici une proposition de factorisation de ton code avec l'utilisation d'une routine pourRegler. Je ne te garantis pas que j'ai rigoureusement respecté tes paramètres mais ainsi tu vas réduire ton code de 3 232 octets à 2 510. Le principe est d'utiliser des tableaux pour définir tes paramètres (valeurs) et une seule routine pour les mettre en oeuvre. Pour cette routine, un index permet de sélectionner le réglage à appliquer.

Code:
#include <Servo.h>

#define NB_REGLAGES 2

int DEB_O[NB_REGLAGES] = {90,  90}; // origines
int FIN_O[NB_REGLAGES] = {35, 180};
int DEB_C[NB_REGLAGES] = {90,   0}; // cibles
int FIN_C[NB_REGLAGES] = {35,  45};
int SENS[NB_REGLAGES]  = {-1,   1}; // sens de parcours

void pourRegler (Servo servoA, Servo servoB, int index)
//***************************************************************************
{
  boolean nonTermine = true;
  int posA = DEB_O[index];
  while (nonTermine)
  {
    int posB = map(posA, DEB_O[index], FIN_O[index], DEB_C[index], FIN_C[index]);
    servoA.write(posA);
    servoB.write(posB);
    delay(10);
   
    posA = posA + SENS[index];
    nonTermine = (SENS[index] == -1) ? (posB > FIN_O[index]) : (posB < FIN_O[index]);
  }
}

void setup ()
//***************************************************************************
{
  Servo servo8;
  Servo servo9;
  Servo servo10;
  Servo servo11;
 
  for (int i=0; i<4; i++)
  {
    pourRegler(servo11, servo10, 0);
    pourRegler(servo9,  servo8,  1);
  }
}
Logged

Offline Offline
Jr. Member
**
Karma: 3
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour
Merci beaucoup à vous deux, je vais pouvoir continuer mon programme !
Logged

France - Normandy
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En complément, si tu dois toujours utiliser ces réglages (90 à 35 et 90 à 180), tu auras intérêt à précalculer une bonne fois pour toutes les résultats des fonctions map() et stocker ces résultats dans un tableau. Tu économiseras ainsi des octets de code (plus d'appel à map) et du temps d'exécution (calculs en moins).
Logged

Offline Offline
Jr. Member
**
Karma: 3
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour corsaire50

merci pour l'info, c'est gentil de m'avoir aidé !
Logged

Pages: [1]   Go Up
Jump to: