Salut à toi visiteur !
Inscris toi en moins de 10 secondes pour profitez pleinement du site et partager avec la communauté ! S'inscrire


Aide Petit help en C/NXC


#1
Alors voila je dois écrire un programme de suivie de ligne en NXC (langage basé sur le C) avec un LineLeader jusqu'à ce que la couleur rouge soit trouver par le robot.
Mais mon problème c'est que quand je veux compacter le programme en mettant une partie dans un while, le programme ne veux pas fonctionner (ce compile mais lorsque que j’exécute rien ne ce passe)
La première partie est celle que j'ai essayé de faire pour compacter, la seconde est celle qui a fonctionner.
Je vous remercie de vos aides x)



Code :
/*-----------------------------------------------------------PARTIE 1----------------------------------------------------------*/

void main()
{
DefineSensors(ARRAY, NONE, COLOR, NONE);

int array[8];
int i = 0;
int somme = 0;
int division = 0;
int puissance = 0;

while (GetSensorValue(IN_3) =! 5)
{
GetSensorArray(IN_1, array);

while(i < 8)
{
array[i] = 100 - array[i];
somme += array[i];
array[i] = i * array[i];
division += array[i];
i++;
}

moyenne = division/somme;

if (moyenne < 3)
{
puissance = moyenne * 12;
MotorOn(OUT_B, puissance);
MotorOn(OUT_C, puissance - 20);
}
else if (moyenne > 4)
{
puissance = moyenne * 6;
MotorOn(OUT_B, puissance);
MotorOn(OUT_C, puissance - 20);
}
else
{
MotorOn(OUT_BC, 50);
}
}

MotorOff(OUT_BC);
}


Code :
/*-----------------------------------------------------------PARTIE 2----------------------------------------------------------*/



void main()
{
DefineSensors(ARRAY, NONE, COLOR, NONE);

int array[8];
int somme = 0;
int division = 0;
int puissance = 0;

while (GetSensorValue(IN_3) =! 5)
{
GetSensorArray(IN_1, array);

array[0] = 100 - array[0];
array[1] = 100 - array[1];
array[2] = 100 - array[2];
array[3] = 100 - array[3];
array[4] = 100 - array[4];
array[5] = 100 - array[5];
array[6] = 100 - array[6];
array[7] = 100 - array[7];

somme = array[0] + array[1] + array[2] + array[3] + array[4] + array[5] + array[6] + array[7];

array[0] = 0 * array[0];
array[1] = 1 * array[1];
array[2] = 2 * array[2];
array[3] = 3 * array[3];
array[4] = 4 * array[4];
array[5] = 5 * array[5];
array[6] = 6 * array[6];
array[7] = 7 * array[7];

division = array[0] + array[1] + array[2] + array[3] + array[4] + array[5] + array[6] + array[7];

moyenne = division/somme;

if (moyenne < 3)
{
puissance = moyenne * 12;
MotorOn(OUT_B, puissance);
MotorOn(OUT_C, puissance - 20);
}
else if (moyenne > 4)
{
puissance = moyenne * 6;
MotorOn(OUT_B, puissance);
MotorOn(OUT_C, puissance - 20);
}
else
{
MotorOn(OUT_BC, 50);
}
}

MotorOff(OUT_BC);
}

#2
Pourquoi mettre un while dans un while pourquoi pas
Code :
while (GetSensorValue(IN_3) =! 5 && i < 8)

Je connais pas du tout NXC et sa syntaxe exacte, j'ai juste penser à ça en premier, je regarde ca plus longtemps quand j'ai un peu de temps Wink
PS: Tu es sur d'incrémenter i qqpart ? je vois pas où oO (du coup ca tourne a l'infinie)

#3
Citation caché.
Connexion
ou Inscription pour voir ce contenu ! C'est rapide ;)

Ah oui c'est juste quand j'ai recopier sur le forum que j'ai oublier le i++ x) je le rajoute

Et j'ai mis un while dans un while car le GetSensorValue(IN_3) =! 5 correspond au fait d'avancer tant que la couleur 5 soit le rouge ne soit détecter

#4
Citation caché.
Connexion
ou Inscription pour voir ce contenu ! C'est rapide ;)
Oui mais un while imbriqué dans un while n'est pas ce qu'il y a de plus optimisé ou "propre" si tu peut tout faire en un seul.
Avec un seul while tu peut faire plusieurs verifications (GetSensorValue(IN_3) =! 5 ETAUSSI i <8) puis i++; dans le même while. Je pense que ton code s'y prête. "&&" étant le "ETAUSSI"

#5
Citation caché.
Connexion
ou Inscription pour voir ce contenu ! C'est rapide ;)

Du coup j'ai utiliser ce que tu m'as dis mais j'ai aussi remplacer des while dans des while par la création d'un fonction pour pas qu'il y ait dans le main plein de choses inutiles x) (la bases sans doute pour ceux qui sont habitué mais pour moi... :-/)
Mais en tout cas merci de ton aide Smile


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Résolu Petit problème NeMoGoD 2 10,348 19-06-2020, 22:12
Dernier message: NeMoGoD
  petit probleme batarddu65 1 1,125 16-05-2018, 08:39
Dernier message: bitri12
  besoin d'un petit coup de pouce lounours 2 1,874 07-10-2014, 18:25
Dernier message: lounours

Atteindre :