Problème de programmation NXC
Fermé
Anagor
Messages postés
4
Date d'inscription
dimanche 22 mai 2016
Statut
Membre
Dernière intervention
23 mai 2016
-
Modifié par jipicy le 22/05/2016 à 19:35
Anagor Messages postés 4 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 23 mai 2016 - 23 mai 2016 à 19:53
Anagor Messages postés 4 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 23 mai 2016 - 23 mai 2016 à 19:53
A voir également:
- Problème de programmation NXC
- Application de programmation - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Télécharger le programme de pmu - Télécharger - Médias et Actualité
- Ce programme est bloqué par une stratégie de groupe - Forum Windows
1 réponse
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
22 mai 2016 à 19:29
22 mai 2016 à 19:29
Bonjour,
Les tests en boucle comme while (valueS1 == 1) ne testent qu'une copie du SENSOR_1 qui aura constamment la même valeur. Il faut relire le capteur à chaque itération par while (SENSOR_1 == 1).
Idem pour les autres boucles.
Les tests en boucle comme while (valueS1 == 1) ne testent qu'une copie du SENSOR_1 qui aura constamment la même valeur. Il faut relire le capteur à chaque itération par while (SENSOR_1 == 1).
Idem pour les autres boucles.
22 mai 2016 à 21:12
sub avancer ()
{
OnFwd(OUT_A, 50);
OnFwd(OUT_B, 50);
}
sub arret ()
{
Off(OUT_A);
Off(OUT_B);
}
sub tourner_gauche()
{
OnRev(OUT_A, 50);
OnFwd(OUT_B, 50);
Wait(300); // 0.3 = 10°
Off(OUT_A);
Off(OUT_B);
}
sub tourner_droite()
{
OnFwd(OUT_A, 50);
OnRev(OUT_B, 50);
Wait(300);
Off(OUT_A);
Off(OUT_B);
}
sub contourner ()
{
OnRev(OUT_A, 50);
OnFwd(OUT_B, 50);
Wait(2500);
int valueS1 = SENSOR_1;
while (SENSOR_1 == 1)
{
OnFwd(OUT_A, 50);
OnFwd(OUT_B, 50);
int valueS1 = SENSOR_1;
}
while (SENSOR_1 != 1)
{
int valueS3 = SENSOR_3;
if (SENSOR_3 <= 20)
{
avancer();
}
else if (SENSOR_3 > 20)
{
OnFwd(OUT_A, 50);
OnFwd(OUT_B, 50);
Wait(1500);
OnFwd(OUT_A, 50); // tourne à droite
OnRev(OUT_B, 50);
Wait(2000);
OnFwd(OUT_A, 50);
OnFwd(OUT_B, 50);
}
OnRev(OUT_A, 50);
OnFwd(OUT_B, 50);
Wait(2500);
}
}
task main()
{
while (1)
{
SetSensor(S1,SENSOR_COLORFULL);
SetSensorTouch(S2);
SetSensorLowspeed(S3);
SensorUS(S3);
int valueS1 = SENSOR_1;
int valueS2 = SENSOR_2;
int valueS3 = SENSOR_3;
if (valueS1==1 & valueS2==0)
{
avancer();
}
else if (valueS1==5 & valueS2==0)
{
arret ();
tourner_gauche();
}
else if (valueS1==2 & valueS2==0)
{
arret ();
tourner_droite();
}
else if (valueS2==1)
{
arret ();
contourner();
}
}
}
22 mai 2016 à 21:18
Je ferais plutôt :
22 mai 2016 à 21:23
-Faire avancer le robot jusqu'à une ligne rouge
-Faire tourner le robot d'un quart de tour
-Faire avancer le robot dans sa nouvelle direction.
Merci encore pour votre aide.
3 terminales en détresse.
PS: Voici le programme que nous avions essayé mais qui est resté sans succès:
task main()
{
SetSensor(S1,SENSOR_COLORFULL);
int valueS1 = SENSOR_1;
while (SENSOR_1 !=5)
{
OnFwd(OUT_A, 50);
OnFwd(OUT_B, 50);
}
OnRev(OUT_A, 50);
OnFwd(OUT_B, 50);
Wait(1500);
}
23 mai 2016 à 19:53