J'aimerais recenser les utilisateurs de RobotC afin d'échanger sur son utilisation. Eventuellement créer ensemble (ou alors je le fais seule) un tutoriel car pour l'instant j'ai découvert celui-ci mais il ne me convient pas complètement.
Je précise que je suis enseignante et que cette année j'ai découvert ce logiciel et essayé de l'utiliser avec mes élèves.
Voici par exemple le programme que je viens de faire pour cette voiture (lien) avec roues un peu plus petites et engrenages de direction plus précis.
- Code: Tout sélectionner
#pragma config(Sensor, S1, touchG, sensorTouch)
#pragma config(Sensor, S2, touchD, sensorTouch)
#pragma config(Sensor, S3, couleur, sensorCOLORFULL)
#pragma config(Sensor, S4, sonar, sensorSONAR)
#pragma config(Motor, motorA, moteur, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorB, rotationDr, tmotorNormal, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
void avancer(int distcm) //* 23,5 degres par cm
{ nMotorEncoder[moteur]=0;
int codeurmoteur=0;
while(abs(nMotorEncoder[moteur]) <= abs(distcm*23.5)) // tant que les roues n'ont pas tourné suffisamment
{ if (abs(distcm)==distcm) //distcm est l'angle passé en paramètre
motor[moteur] = 75; //distance positive, on avance
else
motor[moteur] = -75; //distance négative, on recule
codeurmoteur=nMotorEncoder[moteur];
}
motor[moteur]=0; //sinon, la voiture continue à avancer mais j'ai conscience que ceci n'est pas précis.
}
void tourner(int angleR) //sur mon modèle, l'angle du moteur B va de -120 120 (les roues tournent d'environ 20degrés)
{ int signe=0;
nMotorEncoderTarget[rotationDr]=angleR; // définition de l'angle cible
if (angleR>nMotorEncoder[rotationDr])
signe=1; // tourne vers la droite
else signe=-1; // tourne vers la gauche
motor[rotationDr] = signe*75; //75 pourcent de la puissance (dans le bon sens)
while(nMotorRunState[rotationDr]!=runStateIdle)
{ } //attendre sans rien faire
motor[rotationDr] = 0; //arreter le moteur
}
void tournerdroite() // nous définissons ici un angle droit (suite à de multiples essais sur le modèle construit)
{for (int i=1; i<=2; i+=1)
{
tourner(220);
avancer(12);
tourner(-220*2);
avancer(-12);
tourner (220);
}avancer(-5);
}
int angleHasard() // la fonction angleHasard délivre un angle entre -160 et -70 ou 70 et 160
{
/* déclaration des variables locales */
int signe = pow(-1,random(1)); // signe +1 ou -1
int angle = signe*(70+random(90)); // un angle inférieur à 70 degré n'est pas suffisant pour modifier la direction concrètement.
return angle; /* retour a l'appelant en délivrant résultat */
}
task main()
{int droit=SensorValue[touchD];
int gauche=SensorValue[touchG];
int dist=SensorValue[sonar];
int obstacle=0;
while (obstacle<10) //la voiture s'arrêtera après 10 obstacles
{
while (dist>20 && (droit+gauche)==0) //si on se trouve a moins de 20cm d'un obstacle ou si le parechoc arrière touche qqch
{
motor[moteur]=50;
dist=SensorValue[sonar];
droit=SensorValue[touchD];
gauche=SensorValue[touchG];
}
int angle=angleHasard();
avancer(-30); //On s'éloigne de l'obstacle
tourner(angle); //On tourne de l'angle aléatoire vers la fauche ou vers la droite
avancer(20); //On avance avec les roues tournées
tourner (-2*angle); //On tourne les roues dans l'autre sens
avancer (-20); //On recule avec les roues tournées dans l'autre sens
tourner(angle); //On replace les roues dans l'axe de la voiture.
obstacle +=1; //On incrémente la variable obstacle pour pouvoir quitter la boucle While après 10 obstacles
dist=SensorValue[sonar]; //On reprend la valeur du sonar (faut-il encore tourner)
droit=SensorValue[touchD]; //On reprend la valeur du "Touchsensor" arrière droit (1 s'il est enfoncé, 0 sinon)
gauche=SensorValue[touchG];
}
}
J'espère trouvé ici des personnes qui m'aideront à mieux comprendre les différentes fonctions proposées par RobotC.

Merci
.gif)