Go Down

Topic: [ resolu ]Eviter les repetitons (Read 524 times) previous topic - next topic

amigaêl

May 18, 2013, 10:39 pm Last Edit: May 19, 2013, 03:12 pm by amigaêl Reason: 1
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: [Select]


}
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);





amigaêl

#1
May 19, 2013, 01:07 am Last Edit: May 19, 2013, 01:10 am by amigaêl Reason: 1
Bonsoir
j'ai essayé de faire ça mais ça ne marche pas !


Code: [Select]


}
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);







corsaire50

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: [Select]
#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);
  }
}

amigaêl

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

corsaire50

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).

amigaêl

Bonjour corsaire50

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

Go Up