Utilisation d'un éditeur Nous allons utiliser le logiciel libre Gedit afin d'écrire nos programmes. Si vous êtes sous Debian ( ou debian-like ) et qu'il n'est pas installé, IL suffit de l'installer via cette commande : sudo apt-get install



Yüklə 0,51 Mb.
səhifə27/43
tarix04.01.2022
ölçüsü0,51 Mb.
#61490
1   ...   23   24   25   26   27   28   29   30   ...   43
Jouer de la musique

Pour jouer une note, vous pouvez utiliser la commande :

PlayToneEx(frequency, duration, volume, loop?)

Qui possède 4 arguments. Le premier est la fréquence en Hertz, le second est la durée en millisecondes, le troisième est le volume et le dernier pour savoir si la musique tourne en boucle. Voici un tableau des fréquences utiles :



SON

3

4

5

6

7

8

9

SI

247

494

988

1976

3951

7902




LA#

233

466

932

1865

3729

7458




LA

220

440

880

1760

3520

7040

14080

SOL#




415

831

1661

3322

6644

13288

SOL




392

784

1568

3136

6272

12544

FA#




370

740

1480

2960

5920

11840

FA




349

698

1397

2794

5588

11176

MI




330

659

1319

2637

5274

10548

RE#




311

622

1245

2489

4978

9956

RE




294

587

1175

2349

4699

9398

DO#




277

554

1109

2217

4435

8870

DO




262

523

1047

2093

4186

8372

Comme avec la fonction PlayFileEx, le NXT n'attend pas la fin de la note pour passer à autre chose. Donc si vous utilisez plusieurs notes à la suites, vous devrez mettre de l'attente entre les deux comme dans l'exemple suivant :

#define VOL 3

task main()

{

PlayToneEx(262,400,VOL,FALSE); Wait(500);



PlayToneEx(294,400,VOL,FALSE); Wait(500);

PlayToneEx(330,400,VOL,FALSE); Wait(500);

PlayToneEx(294,400,VOL,FALSE); Wait(500);

PlayToneEx(262,1600,VOL,FALSE); Wait(2000);

}

Vous pouvez créer très facilements des morceaux de musique avec les fonctionnalités de BricxCC.



Si vous voulez jouer de la musique tout faisant avancer le robot, la meilleure façon est d'utiliser des tâches distinctes. Ici vous avez un exemple d'un programme plutôt stupide où le robot avance en avant et en arrière, en faisant de la musique.

task music()

{

while (true)



{

PlayTone(262,400); Wait(500);

PlayTone(294,400); Wait(500);

PlayTone(330,400); Wait(500);

PlayTone(294,400); Wait(500);

}

}



task movement()

{

while(true)



{

OnFwd(OUT_AC, 75); Wait(3000);

OnRev(OUT_AC, 75); Wait(3000);

}

}



task main()

{

Precedes(music, movement);



}

Conclusion

Dans ce chapitre, vous avez apprit à faire jouer de la musique au NXT. Vous avez aussi vu comment utiliser une tâche distincte pour jouer de la musique.

Plus sur les moteurs

Il y a beaucoup de fonctions qui vous permettent de contrôler les moteurs plus précisément. Dans ce chapitre, nous allons traiter de ces commandes : ResetTachoCount , Coast( Float )OnFwdRegOnRevRegOnFwdSyncOnRevSyncRotateMotorRotateMotorEx et les concepts de PID.



Arrêt en douceur

Quand on utilise la fonction Off (), le cerveau moteur s'arrête immédiatement, freinant l'arbre et tenant donc position. Il est aussi possible de stopper les moteurs d'une manière plus douce, sans utiliser le frein. Pour cela il faut utiliser Float() ou Coast(), qui coupe simplement la puissance du moteur. Voici un exemple. Le moteur commence par freiner en utilisant les freins; ensuite sans utiliser les freins. Notez la différence. Actuellement, la différence est extrêmement faible pour ce robot en particulier. Mais cela crée beaucoup de différence pour beaucoup d'autres robots.

task main()

{

OnFwd(OUT_AC, 75);



Wait(500);

Off(OUT_AC);

Wait(1000);

OnFwd(OUT_AC, 75);

Wait(500);

Float(OUT_AC);

}

Les commandes avancées

Les commandes OnFwd() et OnRev() sont de simples routines pour faire bouger les moteurs.

Les servomoteurs du NXT contiennent un encodeur intégré qui vous permet de contrôler précisément la position et la vitesse de l'arbre;

Le firmware du NXT met en oeuvre un PID ( Proportional Integrative Derivative) pour contrôler la position des moteurs et la vitesse des moteurs. Cela permet de contrôler plus précisément la vitesse des moteurs, leur position et de faire des feedback.

Si vous voulez que le robot aille parfaitement droit, vous pouvez utiliser une fonctione de synchronisation qui fait que le couple de moteurs tournent ensemble et s'attendent si l'un ralentit ou est bloqué. D'une façon simple, vous pouvez définir un couple de moteur pour qu'il soient synchronisés. Il y a aussi de nombreuses commandes pour libérer toute la puissance des cerveau-moteurs.

La fonction OnFwdReg(port,speed,regmode) fait avancer le moteur spécifié par port à la vitesse speed en appliquant le mode de régulation regmode spécifié. regmode peut êtreOUT_REGMODE_IDLEOUT_REGMODE_SPEED ou OUT_REGMODE_SYNC. Si IDLE est sélectionné, il n'y aura pas de régulation PID d'appliqué. Si SPEED est sélectionné, le NXT va réguler LE moteur pour qu'il ai une vitesse constante, même si la charge moteur varie. Pour finir, si SYNC est sélectionné, le couple de moteurs spécifié par port se déplacera synchronisé comme expliqué avant.

La fonction OnRevReg(port,speed,regmode) fait exactement la même chose que la commande précédente mais dans le sens inverse.

task main()

{

OnFwdReg(OUT_AC,50,OUT_REGMODE_IDLE);



Wait(2000);

Off(OUT_AC);

PlayTone(4000,50);

Wait(1000);

ResetTachoCount(OUT_AC);

OnFwdReg(OUT_AC,50,OUT_REGMODE_SPEED);

Wait(2000);

Off(OUT_AC);

PlayTone(4000,50);

Wait(1000);

OnFwdReg(OUT_AC,50,OUT_REGMODE_SYNC);

Wait(2000);

Off(OUT_AC);

}

Ce programme montre très bien les différentes régulation si vous essayez de stopper les roues avec votre main. Pour le premier ( le mode IDLE ), si vous stopper une roue, cela de fera rien sur l'autre. Pour le second ( le mode SPEED ), essayer de ralentir la roue, vous verrez que le NXT augmentera la puissance de son moteur pour contrecarrer votre freinage afin de garder la vitesse constante. Enfin (pour le mode SYNC), arrêter une roue fera arrêter l'autre jusqu'à ce que la première soit débloquée.



La fonction OnFwdSync(port,speed,turnpct) est la même que la fonction OnFwdReg() avec le mode SYNC, mais maintenant vous pouvez spécifier un pourcentage de synchronisation.

La fonction OnRevSync(port,speed,turnpct) est la même que la précédente, mais dans l'autre direction. Le programme suivant fait une démonstration des fonctions : essayez de changer les valeurs pour voir ce qu'il se passe.

task main()

{

PlayTone(5000,30);



OnFwdSync(OUT_AC,50,0);

Wait(1000);

PlayTone(5000,30);

OnFwdSync(OUT_AC,50,20);

Wait(1000);

PlayTone(5000,30);

OnFwdSync(OUT_AC,50,-40);

Wait(1000);

PlayTone(5000,30);

OnRevSync(OUT_AC,50,90);

Wait(1000);

Off(OUT_AC);

}

Pour finir, les moteurs peuvent être configurés pour tourner un nombre défini de degrés ( en se rappelant qu'un tour complet fait 360° ).



Pour chacune des fonctions suivantes, vous pouvez agir sur la direction des moteurs en changeant le signe de la vitesse ou de l'angle. Donc si la vitesse et l'angle on le même signe, le moteur avancera, sinon il reculera.

La fonction RotateMotor(port,speed,degrees) fait tourner le moteur spécifié par port de degrees degrés à une vitesse de speed ( allant de 0 à 100 ).

task main()

{

RotateMotor(OUT_AC, 50,360);



RotateMotor(OUT_C, 50,-360);

}

La fonction RotateMotorEx(port,speed,degrees,turnpct,sync,stop) est une extension de la fonction précédente, ce qui vous permet de synchroniser deux moteurs, de spécifier un facteur turnpct et un booleen pour sync. Cela vous permet aussi de spécifier si le moteur doit freiner apres la rotation de l'angle spécifié en utilisant un dernier booleen.



task main()

{

RotateMotorEx(OUT_AC,50,360,0,true,true);



RotateMotorEx(OUT_AC,50,360,40,true,true);

RotateMotorEx(OUT_AC,50,360,-40,true,true);

RotateMotorEx(OUT_AC,50,360,100,true,true);

}


Yüklə 0,51 Mb.

Dostları ilə paylaş:
1   ...   23   24   25   26   27   28   29   30   ...   43




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin