Cours - ISN Codelab
Transcription
Cours - ISN Codelab
Programmation NXC Application à la commande c d’un robot NXT Lego Richard M OREAU Extrait Laboratoire Ampère - Département PC & GMC [email protected] Last update October 10, 2012 Richard M OREAU – 1 / 84 Plan du cours Objectifs du cours Plan du cours Objectifs Caractéristiques du c robot NXT de Lego Programmation c 1. Caractéristiques du robot NXT de Lego Programme NXC Programmation Multi-tâches Conclusion 2. Programmation du Robot NXT 3. Not eXactly C : "Pas exactement du C" 4. Programmation multi-tâches en NXC Richard M OREAU – 2 / 84 Objectifs du cours Objectifs du cours Plan du cours c ) Commande d’un robot NXT (Lego Mindstorms Quatre types de capteur Trois actionneurs (servomoteurs) Un boîtier NXT Programme NXC Quatre boutons Programmation Multi-tâches Un générateur de son Conclusion Un écran LCD (100x64, 17ms) Une connexion USB (12Mo/sec) Une liaison Bluetooth (460.8Ko/sec) Objectifs Caractéristiques du c robot NXT de Lego Programmation Structure d’un programme NXC main, données, algorithmes, fonctions, subroutines Structure d’un programme multi-tâches NXC Temps, Tâches, synchronisation Richard M OREAU – 3 / 84 Brique NXT Objectifs du cours Caractéristiques du c robot NXT de Lego NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 4 / 84 NXT avec ses capteurs et ses actionneurs Objectifs du cours Caractéristiques du c robot NXT de Lego NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 5 / 84 Bricx Command Center Objectifs du cours Connexion de la brique NXT au lancement du logiciel Caractéristiques du c robot NXT de Lego NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 11 / 84 Bricx Command Center Objectifs du cours Fenêtre principale du logiciel Bricx Command Center (BricxCC) Caractéristiques du c robot NXT de Lego NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 12 / 84 Bricx Command Center Objectifs du cours Caractéristiques du c robot NXT de Lego NXT Dans le menu Edit -> Preferences - Onglet General (Dé)cocher l’option Use MDI Mode pour (dés)activer le Multiple Document Interface. Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 13 / 84 Bricx Command Center Objectifs du cours Caractéristiques du c robot NXT de Lego Dans Preferences - Onglet Compiler - Onglet Common Choisir le langage NXC. NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 14 / 84 Bricx Command Center Objectifs du cours Caractéristiques du c robot NXT de Lego Dans Preferences - Onglet Compiler - Onglet NBC/NXC Choisir Use Internal Compiler et Switches -q NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 15 / 84 Bricx Command Center Objectifs du cours Caractéristiques du c robot NXT de Lego Dans Preferences - Onglet Start Up Réglages des options de démarrage : Port USB et Brick Type NXT NXT Architecture Programmation BricxCC Problèmes Programmation Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 16 / 84 Quelques problèmes Objectifs du cours Caractéristiques du c robot NXT de Lego NXT Architecture Le robot n’est pas visible par le logiciel Programmation BricxCC Problèmes Programmation Allumer le robot ! Tools / Find Brick Programme NXC Programmation Multi-tâches Conclusion Plus de piles Reset (bouton à l’arrière du robot au niveau port USB) Téléphones, PDA, ... Interférences avec la liaison Bluetooth Interférences IR avec le capteur de luminosité Richard M OREAU – 17 / 84 Plan du cours Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs c 1. Caractéristiques du robot NXT de Lego Gestion du temps Programme de commandes Exercices I Le son 2. Programmation du Robot NXT L’affichage Les fichiers Exemples Exercices II 3. Not eXactly C : "Pas exactement du C" Programme NXC Programmation Multi-tâches Conclusion 4. Programmation multi-tâches en NXC Richard M OREAU – 18 / 84 Les capteurs Objectifs du cours Capteur de luminosité Capteur de son Capteur de contact Capteur ultrason Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 19 / 84 Configuration des capteurs Objectifs du cours Caractéristiques du c robot NXT de Lego 4 capteurs nommés S1, S2, S3, S4 ou IN_1, IN_2, IN_3, IN_4 Un type Programmation Les capteurs SENSOR_TYPE_NONE Capteur générique passif SENSOR_TYPE_TOUCH Capteur de contact SENSOR_TYPE_LIGHT Capteur de luminosité SENSOR_TYPE_SOUND_DBCapteur de son SENSOR_TYPE_LOWSPEED Capteur I2 C (Inter Integrated Circuit Bus) Capteur Ultrason, magnétique, RGB, pression, infra rouge, etc. Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Un mode SENSOR_MODE_RAW SENSOR_MODE_BOOL SENSOR_MODE_EDGE SENSOR_MODE_PULSE SENSOR_MODE_PERCENT Intervalle entre 0 et 1023 Booléen (0 ou 1) Nombre de transitions booléennes Nombre de périodes booléennes Valeur entre 0 et 100 Richard M OREAU – 20 / 84 Configuration des capteurs Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Une configuration : un type + un mode Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son Configuration Type Mode SENSOR_TOUCH SENSOR_LIGHT SENSOR_PULSE SENSOR_TYPE_TOUCH SENSOR_TYPE_LIGHT SENSOR_TYPE_TOUCH SENSOR_MODE_BOOL SENSOR_MODE_PERCENT SENSOR_MODE_PULSE L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 21 / 84 Action des capteurs Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Initialiser le type, le mode et la configuration Les capteurs Les actionneurs Gestion du temps Programme de commandes SetSensorType(sensor,type); SetSensorMode(sensor,mode); SetSensor(sensor,configuration); SetSensorType(S1,SENSOR_TYPE_TOUCH); SetSensorMode(S1,SENSOR_MODE_BOOL); SetSensor(S1,SENSOR_TOUCH); Exercices I Le son L’affichage Les fichiers Récupérer une information d’un capteur Exemples Exercices II Sensor(n); SensorUS(n); x=SENSOR_1; dist=SensorUS(S4); Programme NXC Programmation Multi-tâches renvoie la valeur du capteur n (n=Si iǫ[1, 4]) renvoie la valeur du capteur I2 C n; Lit le capteur 1 et sauvegarde sa valeur dans x Lit le capteur US et sauvegarde la distance dans dist Conclusion Remettre à 0 un capteur cumulatif ClearSensor(sensor); ClearSensor(S1); Richard M OREAU – 22 / 84 Action des capteurs Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Configurations spécifiques SetSensorTouch(sensor); SetSensorLight(sensor); SetSensorSound(sensor); SetSensorLowspeed(sensor); Les actionneurs Gestion du temps Programme de commandes // capteur de contact: 1 = appuyé, 0 = relâché // capteur de luminosité: échelonné de 0 à 100 // capteur de son: échelonné de 0 à 100 // capteur Ultra Son: échelonné de 0 à 255 cm Exercices I Le son NB : Certains capteurs peuvent avoir des configurations spécifiques. SetSensorType(sensor,IN_TYPE_LIGHT_ACTIVE); // lumière active sur le capteur luminosité pour améliorer la précision à très courte distance L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Les boutons BTNEXIT, BTNRIGHT, BTNLEFT et BTNCENTER ButtonCount(button,reset); // renvoie le nombre de fois où button a été appuyé, remise à 0 si reset est égal à true ButtonPressed(button,reset); // renvoie si le bouton button est appuyé, remise à 0 si reset est égal à true Richard M OREAU – 23 / 84 Les actionneurs Objectifs du cours Caractéristiques du c robot NXT de Lego Version RCX Version NXT Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Poids Vitesse Couple Encodeur intégré Synchronisation RCX 28 g 340 tr/min 5,5 N.cm X X NXT 80 g 170 tr/min 50 N.cm √ √ Richard M OREAU – 24 / 84 Configuration des actionneurs Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation 3 actionneurs et 4 combinaisons : Les capteurs OUT_A, OUT_B, OUT_C Les actionneurs OUT_AB, OUT_AC, OUT_BC, OUT_ABC Gestion du temps Programme de commandes Commande en puissance Exercices I Le son Commande en pourcentage de - 100 % à + 100 % L’affichage Les fichiers OnFwd(outputs,power); OnFwd(OUT_A,75); // Moteur A en avant à 75% Exemples OnRev(outputs,power); OnRev(OUT_AC,75); // Moteurs A et C en arrière à 75% OnFwd(OUT_AC,-75); // Moteurs A et C en arrière à 75% Exercices II Programme NXC Programmation Multi-tâches Conclusion Arrêt Float(outputs); Off(outputs); // arrêt sans freinage // arrêt avec freinage Richard M OREAU – 25 / 84 Commande des actionneurs Objectifs du cours Caractéristiques du c robot NXT de Lego Commande en position RotateMotor(outputs,power,angle); Commande PID de la position RotateMotorPID(outputs,power,angle,P,I,D); Programmation Les capteurs Les actionneurs Gestion du temps // P : Proportionnel, I : Intégrateur , D : Dérivateur Programme de commandes Exercices I Le son L’affichage Commande en vitesse OnFwdReg(outputs,power,OUT_REGMODE_SPEED); // La vitesse est maintenue constante (accélération si nécessaire) Les fichiers Exemples Exercices II Programme NXC Commande synchronisée OnFwdReg(outputs,power,OUT_REGMODE_SYNC); // La vitesse de tous les moteurs désignés par outputs est identique Programmation Multi-tâches Conclusion Richard M OREAU – 26 / 84 Suivi des actionneurs Objectifs du cours Caractéristiques du c robot NXT de Lego MotorActualSpeed(output); // renvoie la puissance envoyée sur le moteur output Programmation Les capteurs Les actionneurs Suivi de la commande Gestion du temps Suivi des rotations effectuées Programme de commandes Angles MotorRotationCount(output); // renvoie le nombre de degrés effectués sur le moteur output Compte remis à zéro à chaque nouvelle commande ResetRotationCount(output); // remise à zéro du nombre de degrés effectués sur le moteur output Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Suivi du PID MotorRegPValue(output); MotorRegIValue(output); MotorRegDValue(output); // récupère les valeurs du PID Richard M OREAU – 27 / 84 Gestion du temps Objectifs du cours Caractéristiques du c robot NXT de Lego Tick (précision : 1 ms) Wait(timeout) Programmation Attente en ms Paramètres : unsigned int Attention : pas de valeur négative, sinon risque d’attente très Les capteurs Les actionneurs Gestion du temps longue Programme de commandes Exercices I Le son L’affichage Les fichiers Primitives CurrentTick(); // renvoie le temps en ms, type unsigned long (4 octets) x=FirstTick(); // renvoie le temps en ms là où le programme a été lancée Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Arrêt programmé de la brique NXT SleepTimer(); SetSleepTime(tps); SleepTime(); ResetSleepTimer(); SetSleepTimer(tps); SleepNow(); // renvoie la valeur du compteur d’arrêt de la brique // initialise la valeur du compteur d’arrêt automatique à tps minutes // renvoie le temps courant restant avant l’arrêt automatique de la brique // remise à zéro du compteur d’arrêt automatique (évite l’arrêt) // initialise le compteur courant d’arrêt automatique à tps minutes // arrêt de la brique Richard M OREAU – 28 / 84 Programme de commandes Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Une tâche principale task main Séquence de commandes Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC task main() { /*séquence de commandes*/ } Programmation Multi-tâches Conclusion Richard M OREAU – 29 / 84 Premier programme Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Premier programme : Les capteurs Les actionneurs Utilisation des moteurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion task main() { OnFwd(OUT_A, 75); OnFwd(OUT_B, 75); Wait(4000); OnRev(OUT_AB, 75); Wait(4000); Float(OUT_AB); } // Moteur A en avant à 75% // Moteur B en avant à 75% // Attente de 4 secondes // Moteurs A et B en arrière à 75% // Attente de 4 secondes // Arrêt moteurs A et B sans freinage Richard M OREAU – 30 / 84 Le son Objectifs du cours Caractéristiques du c robot NXT de Lego Un son à la fois, attendre la fin du précédent pour jouer le suivant Programmation Les capteurs Les actionneurs Programme de commandes Exercices I L’affichage Jouer une fréquence PlayToneEx(frequency,duration,volume,loop); PlayTone(frequency,duration); // Frequency en Hz, Duration en ms, loop à true pour un son en boucle Les fichiers Exemples Exercices II Programme NXC PlayTone(440,1000); // Joue un do pendant 1 seconde Programmation Multi-tâches Conclusion Jouer une mélodie PlayFileEx("SoundFile.rso",volume,repeat); // Lecture du fichier SoundFile, volume de 0 à 4, repeat à true pour jouer en boucle Gestion du temps Le son Un générateur de son Arrêter StopSound(); Richard M OREAU – 33 / 84 L’affichage via l’écran LCD Objectifs du cours Caractéristiques du c robot NXT de Lego Caractéristiques 100 x 64 pixels, taux de rafraîchissement 17ms Programmation Les capteurs 8 lignes(LCD_LINE1, ...,LCD_LINE8) Les actionneurs 1 caractère : 8 pixels en hauteur, 6 pixels en largeur Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Affichage X : colonne, Y : ligne TextOut(X,Y,string,clear); // Affiche string à partir de la position (X,Y), efface si clear est égal à true NumOut(X,Y,value,clear); // Affiche value à partir de la position (X,Y), efface si clear est égal à true ClearScreen(); // Efface tout l’écran GraphicOut(X,Y,"GraphicFile.ric"); // Affiche GraphicFile à partir de la position (X,Y) PointOut(X,Y); LineOut(X1,Y1,X2,Y2); CircleOut(X,Y,R); RectOut(X,Y,L,H); Richard M OREAU – 34 / 84 L’affichage via l’écran LCD Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son Exemple : #define LargChar 6 // Largeur d’un caractère (6 pixels) ClearScreen(); TextOut(0,LCD_LINE3,"test LCD :",false); NumOut(LargChar*11,LCD_LINE3,11,false); NumOut(LargChar*11,LCD_LINE3,2,false); NumOut(LargChar*11,LCD_LINE3,3,true); TextOut(0,LCD_LINE3,"test LCD :",false); // efface l’écran // affiche test LCD : // affiche test LCD : 11 // affiche test LCD : 21 // affiche 3 // affiche test LCD : 3 L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Richard M OREAU – 35 / 84 La gestion des fichiers Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs // crée le fichier filename avec la taille size et renvoie handle Les actionneurs CloseFile(handle); Gestion du temps // ferme le fichier caractérisé par handle Programme de commandes DeleteFile("filename.txt"); Exercices I // supprime de la mémoire du NXT le fichier "filename.txt" Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Création et connexion CreateFile("filename.txt",size,handle); Récupération des fichiers sur la machine de développement NeXT Explorer du logiciel BricxCC Si un bug apparaît lors du remplissage du fichier : le fichier devient irrécupérable Conclusion Richard M OREAU – 36 / 84 Opération sur les fichiers Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Write(handle,value); // écrit value dans le fichier caractérisé par handle Les actionneurs Gestion du temps Programme de commandes Read(handle,value); // lit value dans le fichier caractérisé par handle Exercices I Le son L’affichage WriteLn(handle,value); Les fichiers // écrit value+CR+LF dans le fichier caractérisé par handle Exemples Exercices II Programme NXC Programmation Multi-tâches ReadLn(handle,value); // lit value dans le fichier caractérisé par handle, puis lit CR et LF Conclusion Richard M OREAU – 37 / 84 Exemples de programme Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Tester les capteurs et afficher leur valeur sur l’écran LCD (1/2) : task main() { SetSensorTouch(S1); while(1) { NumOut(0,LCD_LINE3,SENSOR_1,true); } } // Activation du capteur de contact // Boucle infinie // Affichage de la valeur de S1 Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion task main() { int x; SetSensorLowspeed(S4); while(1) { x=SensorUS(S4); NumOut(0,LCD_LINE4,x,true); } } // Création de la variable x // Activation du capteur ultrason // Boucle infinie // Enregistrement valeur de S4 dans x // Affichage de la variable x Richard M OREAU – 38 / 84 Exemples de programme Objectifs du cours Tester les capteurs et afficher leur valeur sur l’écran LCD (2/2) : Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches task main() { int x; SetSensorTouch(S1); SetSensor(S2,SENSOR_LIGHT); SetSensorMode(S2,SENSOR_MODE_RAW); SetSensorLowspeed(S3); while(1) { x=SensorUS(S3); NumOut(0,LCD_LINE2,SENSOR_1); NumOut(0,LCD_LINE4,SENSOR_2); NumOut(0,LCD_LINE6,x); } } // Création de la variable x // Activation du capteur de contact // Activation du capteur luminosité // Choix du mode RAW pour S2 // Activation du capteur ultrason // Boucle infinie // Enregistrement de S3 dans x // Affichage de la valeur de S1 // Affichage de la valeur de S2 // Affichage de la variable x Conclusion Richard M OREAU – 39 / 84 Exemples de programme Objectifs du cours Opérations sur les boutons et afficher leur valeur : Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion task main() { int x, y, z; while(1) { x=ButtonCount(BTNLEFT,false); y=ButtonCount(BTNRIGHT,false); z = y-x; NumOut(0,LCD_LINE3,x,true); NumOut(0,LCD_LINE3,z,true); if (ButtonPressed(BTNCENTER,false)) { ButtonCount(BTNLEFT,true); ButtonCount(BTNRIGHT,true); } } } // Création des variables x, y, z // Boucle infinie // Comptage nbre de pression sur BTNLEFT // Comptage nbre de pression sur BTNRIGHT // Affichage de la valeur de x // Affichage de la valeur de z // Remise à zéro du compteur // Remise à zéro du compteur Richard M OREAU – 40 / 84 Exemples de programme Objectifs du cours Opérations sur les moteurs, affichage et sons : Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC task main() { int x; OnFwd(OUT_A,75); Wait(2000); x=MotorTachoCount(OUT_A); Off(OUT_A); NumOut(0,LCD_LINE4,x,true); Wait(2000); PlayFileEx("Goodbye.rso",3,false); Wait(1000); } // Création de la variable x // Moteur A en avant // Pendant 2 secondes // Enregistrement du nombre de degrés effectués // Arrêt du moteur // Affichage de la valeur de x // Pendant 2 secondes // Lecture du fichier Goodbye.rso // Pause d’1 seconde Programmation Multi-tâches Conclusion Richard M OREAU – 41 / 84 Exemples de programme Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I Le son L’affichage Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion Attente d’un signal provenant d’un capteur : task main() { SetSensor(S1,SENSOR_TOUCH); OnFwd(OUT_AC, 75); until (SENSOR_1 == 1); Off(OUT_AC); } // Configuration du capteur de contact // Moteurs A et C en avant à 75% // Attente du contact // Arrêt moteurs A et C avec freinage Action suite à une activité d’un capteur : task main() { SetSensorTouch(S1); OnFwd(OUT_AC, 75); while (true) { if (SENSOR_1 == 1) { OnRev(OUT_AC, 75); Wait(2000); Off(OUT_AC); } } } // Configuration du capteur de contact // Fait avancer le robot // Boucle infinie // Test contact // Fait reculer le robot // Arrêt avec freinage des moteurs Richard M OREAU – 42 / 84 Exemples de programme Objectifs du cours Création et sauvegarde de données dans un fichier txt : Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs Gestion du temps Programme de commandes Exercices I task main() { byte fileHandle; string write; DeleteFile("NxtIsCool.txt"); DeleteFile("NxtSays.txt"); CreateFile("NxtIsCool.txt", 512, fileHandle); Le son L’affichage for (int i=2; i<=10; i++ ) { write = "NXT is cool"; string tmp = NumToStr(i); write = StrCat(write,tmp, " times!"); WriteLn(fileHandle,write); } CloseFile(fileHandle); RenameFile("NxtIsCool.txt","NxtSays.txt"); Les fichiers Exemples Exercices II Programme NXC Programmation Multi-tâches Conclusion } Richard M OREAU – 43 / 84 Plan du cours Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Les capteurs Les actionneurs c 1. Caractéristiques du robot NXT de Lego Gestion du temps Programme de commandes Exercices I Le son 2. Programmation du Robot NXT L’affichage Les fichiers Exemples Exercices II 3. Not eXactly C : "Pas exactement du C" Programme NXC Programmation Multi-tâches Conclusion 4. Programmation multi-tâches en NXC Richard M OREAU – 45 / 84 Introduction à NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Déclaration de données Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Initialisation des données Définition des constantes Tâche : séquences d’instructions Commande robot Opérations sur des données Appels de fonctions Structures algorithmiques Conclusion Richard M OREAU – 46 / 84 Introduction à NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Not eXactly C : pas exactement du C Langage de programmation proche du langage C (Syntaxe C-like) c Programmation des briques NXT de Lego Programmation multi-tâches Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Richard M OREAU – 47 / 84 Syntaxe Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC max et Max sont différents Syntaxe Mots clés Les Données Liste de mots clés réservés cf. diapo suivante La base Les structures algorithmiques Les Fonctions NXC Différence entre les minuscules et les majuscules Identificateur suite de lettres, chiffres, _ ne commençant pas par un chiffre Ne_le x1 _12 IF : ok Né_le 2_A 2000 if : pas ok Exercice III Programmation Multi-tâches Conclusion Commentaire /* commentaire à la C */ // commentaire à la C++ Richard M OREAU – 48 / 84 Liste non exhaustive de mots clés Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches abs case do if priority sign sub unsigned asm char else inline repeat start switch until bool const false int return stop task void break continue for long safecall string true while byte default goto mutex short struct typedef Conclusion Richard M OREAU – 49 / 84 Les données Objectifs du cours Caractéristiques du c robot NXT de Lego Toute information manipulée par le programme constantes, variables Programmation Programme NXC un identificateur (avec un nom pertinent) Introduction à NXC Syntaxe une initialisation Mots clés un commentaire Les Données La base Les structures algorithmiques Caractérisée par Les Fonctions NXC Types entier : entier sur 8 bits (1 octect) : bool, byte, char, unsigned char Exercice III entier signé sur 16 bits (2 octets) : short, int ([-32768, 32767]), Programmation Multi-tâches unsigned int Conclusion entier signé sur 32 bits (4 octets) : long, unsigned long Chaîne de caractère Tableau de byte : string Richard M OREAU – 50 / 84 Les données Objectifs du cours Caractéristiques du c robot NXT de Lego Valeurs Décimal Programmation Hexadécimal Programme NXC Booléen : 0 correspond à false et différent de 0 correspond à true Introduction à NXC Syntaxe Mots clés Déclaration de données Les Données Int nombreTour; // nombre de tours effectués La base Les structures algorithmiques Int MissionTerminee = 0; Les Fonctions NXC Int a, b; Exercice III Programmation Multi-tâches Conclusion Déclation de tableaux int lesPositions[10]; // ensemble de points à atteindre Déclaration de lesPositions[0], lesPositions[1], ..., lesPositions[9] Richard M OREAU – 51 / 84 Les données Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Déclaration des variables : locale ou globale ? int x; task main(); { int y; x=y { int z; y = z; } y = z; } task foo() { x=1; y=2; } // x est une variable globale // y est locale dans la tâche main // ok // Début du sous bloc de programmation // Déclaration de la variable locale z // ok; // erreur, z n’existe plus // ok, x est globale // erreur, y n’est pas globale Richard M OREAU – 52 / 84 Les structures de données Objectifs du cours Caractéristiques du c robot NXT de Lego Déclaration, initialisation et utilisation struct robot { string name; int vitesse; }; Programmation Programme NXC // nom du robot // vitesse du robot Introduction à NXC task main() { robot monRobot; monRobot.name = "Astro"; monRobot.vitesse = 0 ; Syntaxe Mots clés Les Données La base Les structures algorithmiques // le robot // vitesse initiale nulle - robot à l’arrêt OnFwd(OUT_A, 50); // le robot avance // Affichage vitesse robot while (true); { monRobot.vitesse=MotorActualSpeed(OUT_A); TextOut(0,LCD_LINE3,"vitesse : ", true); NumOut(64,LCD_LINE3,monRobot.vitesse, true); } } Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Affectation possible si les types sont identiques Richard M OREAU – 53 / 84 Les opérateurs Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Opérateur = += -= *= /= %= ++ – == != ! && || Action Variable affectée de la valeur Variable incrémentée de la valeur Variable décrémentée de la valeur Variable multipliée par la valeur Variable divisée par la valeur Varaible prend la valeur du reste Incrémentation de 1 Décrémentation de 1 Égalité Différent Négation logique ET logique OU logique Exemple x=2; // x prend la valeur 2 x+=2; // 2 est ajoutée à x x-=2; // 2 est retirée à x x*=2; // x est multipliée par 2 x/=2; // x est divisée par 2 x%=5 // si x valait 2, x prend la valeur 1 x++ // si x valait 2, x prend la valeur 3 x– // si x valait 3, x prend la valeur 2 x==2 // Vrai si x vaut 2 sinon faux x!=2 // Vrai si x différent de 2 sinon faux !x // Négation de x x && y // Vrai si x ET y sont vrais sinon faux x || y // Vrai si x OU y sont vrais sinon faux Exercice III Programmation Multi-tâches Quelques conseils : Conclusion Attention à la priorité des opérations (2+3*4 différent de (2+3)*4) Parenthésage (enlève les ambiguïtés et aide à la relecture du code) Richard M OREAU – 54 / 84 Les fonctions de base Objectifs du cours Caractéristiques du c robot NXT de Lego Fonctions sur les chaînes de caractères Fonctions sur les entiers Programmation Programme NXC Introduction à NXC Syntaxe x = StrToNum(str); str = NumToStr(x); i = StrLen(str); str = StrCat(str1,str2); // renvoie la valeur numérique de str // renvoie la chaîne de caractère de l’entier x // renvoie la longueur de str // str est composé de str1 suivi de str2 Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion x = Sin(θ); x = Cos(θ); θ = Asin(x); θ = Acos(x); x = Sqrt(y); // θ en degrés, valeur entre -100 et 100 // θ en degrés, valeur entre -100 et 100 // renvoie le arcsin de x (-100..100) en degré (-90..90) // renvoie le arccos de x (-100.100) en degré (0..180) // renvoie la racine carrée de y Richard M OREAU – 55 / 84 Les structures algorithmiques Objectifs du cours Alternative Caractéristiques du c robot NXT de Lego Programmation Programme NXC Condition Cas Parmi Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Tant que Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Jusqu’à Répétition Boucle for Répéter plusieurs fois if (expression) {instructions} [else {instructions}] switch(expression) { case valeur1 : {instruction}; break; case valeur2 : {instruction}; break; defaut : {instruction} ; } while (expression) {instructions}; do {instruction}; while (expression); for (initialisation;condition;incrémentation) {instruction}; repeat (expression) {instructions} ; Richard M OREAU – 56 / 84 La structure alternative Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Booléen : 0 => faux, différent de 0 => vrai La condition est une expression Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion int dureeTour = 400 ... ... if (SENSOR_1) { OnFwd(OUT_AC,75); Wait(dureeTour); Off(OUT_AC); } else { OnRev(OUT_AC,75); Wait(dureeTour); Off(OUT_AC); ... } // durée de rotation // si le capteur est appuyé // avance // arrêt // Le capteur est relâché // recule // arrêt Richard M OREAU – 57 / 84 La structure cas parmi Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Pour éviter des conditions en cascade Peu importe l’ordre des valeurs mais les valeurs sont différentes int nb ; task main() { ... switch (nb) { case 1 : OnFwd(OUT_A, 75); break; // déclaration variable // selon la valeur de nb // tourne à droite Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion case 3 : OnFwd(OUT_C, 75); break; // tourne à gauche default : Off(OUT_AC); break; // arrêt } ... } Richard M OREAU – 58 / 84 La structure tant que Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC attention aux {} int dureeAction = 100 int NbActionsMax = 5 int NbAction = 0 // durée de fonctionnement // Nombre d’actions à réaliser // Nombre d’actions en cours Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion task main() { while (NbAction <NbActionsMax) { OnFwd(OUT_AC, 75); // avance Wait(dureeAction); Off(OUT_AC); // arrêt nbAction++; // Pour afficher la variable NbAction sur l’écran LCD NumOut(0,LCD_LINE3,NbAction); Wait(dureeAction*10); } } /* Il faut s’assurer que l’action modifie les données afin que l’expression soit fausse à un moment donné */ Richard M OREAU – 59 / 84 Les autres formes de structures de boucle tant que Objectifs du cours Caractéristiques du c robot NXT de Lego Tâches répétitives Programmation while (SENSOR_1 != ValeurRecherchée) { // Traitement } Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Boucles infinies Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion while (1) // ou while (true) { // Attente ou vérification // Traitement } Richard M OREAU – 60 / 84 La structure Repeat Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Nombre d’itérations connues Programme NXC Introduction à NXC Syntaxe int dureeAction = 100 int NbActionsAFaire = 5 // durée de fonctionnement // Nombre d’actions à réaliser task main() { repeat (NbActionsAFaire) { OnFwd(OUT_AC, 75); Wait(dureeAction); Off(OUT_AC); } } // avance Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion // arrêt Richard M OREAU – 61 / 84 La structure for Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Nombre d’itérations connues Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion int dureeAction 100 int NbActionsAFaire = 5 int i ; // durée de fonctionnement // Nombre d’actions à réaliser // Le compteur task main() { for ( i=0 ; i <NbActionsAFaire ; i++ ) { OnFwd(OUT_AC, 75); Wait(dureeAction); Off(OUT_AC); } } // avance // arrêt Richard M OREAU – 62 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego 256 fonctions au maximum (y compris le main et les tâches) pas de déclaration Les fonctions sub permet d’économiser de la mémoire Les fonctions inline void prend plus de mémoire mais le nombre n’est pas limité Les macros en utilisant #define rend le code plus compact et améliore la lisibilité Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Richard M OREAU – 63 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC // avec la fonction sub } // avec la fonction inline inline void turn_around(int pwd, int turn_time) { OnRev(OUT_C, pwr); Wait(turn_time); OnFwd(OUT_AC, pwr); } task main() { OnFwd(OUT_AC, 75); Wait(1000); turn_around(75); Wait(2000); turn_around(75); Wait(1000); Off(OUT _AC); } task main() { OnFwd(OUT_AC, 75); Wait(1000); turn_around(75, 2000); Wait(2000); turn_around(75, 500); Wait(1000); Off(OUT _AC); } sub turn_around(int pwr) { OnRev(OUT_C, pwr); Wait(900); OnFwd(OUT_AC, pwr); Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Richard M OREAU – 64 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Premier exemple de macro pour faire tourner le robot Programmation Programme NXC Introduction à NXC Syntaxe #define turn_around {OnRev(OUT_A,75); Wait(3400); \ PlayTone(333,1000);Wait(1000);} Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion task main() { OnFwd(OUT_AC,75); Wait(1000); turn_around; OnFwd(OUT_AC, pwr); Wait(2000); turn_around; Wait(1000); turn_around; } Richard M OREAU – 65 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion Second exemple de macro avec des arguments #define turn_right(s, t) #define turn_left(s, t) #define forwards(s, t) #define backwards(s, t) OnFwd(OUT_A, s); OnRev(OUT_C, s); Wait(t); OnRev(OUT_A, s); OnFwd(OUT_C, s); Wait(t); OnFwd(OUT_AC, s); Wait(t); OnRev(OUT_AC, s); Wait(t); task main() { backwards(50, 10000); turn_left(75, 750); forwards(50, 1000); turn_right(75, 750); forwards(30, 2000); Off(OUT_AC); } Richard M OREAU – 66 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Passage par valeur : int Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion sub foo(int x) { x=2; } task main() { int y = 1; foo(y); ClearScreen(); NumOut(0,LCD_LINE3,y,false); Wait(2000); } // y est égal à 1 // y reste égal à 1 // Affichage sur l’écran du résultat Richard M OREAU – 67 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Passage par valeur constante : const int Programmation Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques sub foo(const int x) { int z; z=x; x=1; } // Ok // erreur car x ne peut pas être modifiée (constante) Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion task main() { int y; foo(2); foo(4*5); } // ok // ok - l’expression est une constante Richard M OREAU – 68 / 84 Les Fonctions NXC Objectifs du cours Caractéristiques du c robot NXT de Lego Passage par référence : int & Programmation Programme NXC Introduction à NXC Syntaxe Mots clés sub foo(int & x) { x=2; } Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion task main() { int y = 1; foo(y); foo(2); } // y est égal à 1 // y est maintenant égal à 2 // erreur, seules les variables ont des références Richard M OREAU – 69 / 84 Exercice d’application (1/2) Objectifs du cours Objectifs : Caractéristiques du c robot NXT de Lego Programmation Programme NXC Introduction à NXC Syntaxe Mots clés savoir déclarer et utiliser des données ; savoir manipuler des structures algorithmiques ; savoir utiliser des fonctions NXC Les Données La base Les structures algorithmiques Exercices : 1. Construire un robot mobile. Les Fonctions NXC Exercice III Programmation Multi-tâches 2. Le robot avance en ligne droite pendant 4 secondes, tourne à droite, repart en ligne droite pendant 4 secondes et s’arrête 3. Le robot décrit deux fois un carré (3 secondes par côté) et s’arrête. Conclusion Richard M OREAU – 70 / 84 Exercice d’application (2/2) Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Exercices : Programme NXC Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques Les Fonctions NXC Exercice III Programmation Multi-tâches Conclusion 4. Le robot part à 20% de sa puissance puis accélère par échelon de 10% par seconde jusqu’à 80%. 5. Le robot avance en ligne droite puis au 1er appui sur le capteur contact il tourne à 90o vers la droite. Il attend le 2nd appui sur le capteur contact pour repartir tout droit et enfin il s’arrête au bout de 3 secondes. 6. Le robot avance en ligne droite et s’arrête suite à l’appui sur le capteur contact ou au bout de 4 secondes si aucun signal ne provient du capteur. 7. Le robot avance tout droit lorsque l’on tape dans les mains et s’arrête lorsqu’il rencontre une bande noire ou s’il est à moins de 10 cm d’un obstacle. Richard M OREAU – 71 / 84 Plan du cours Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC c 1. Caractéristiques du robot NXT de Lego Introduction à NXC Syntaxe Mots clés Les Données La base Les structures algorithmiques 2. Programmation du Robot NXT Les Fonctions NXC Exercice III Programmation Multi-tâches 3. Not eXactly C : “Pas exactement du C” Conclusion 4. Programmation multi-tâches en NXC Richard M OREAU – 72 / 84 Tâches régulières Objectifs du cours Maîtrise des dates d’activation des actions Scrutation périodique Commande régulière Caractéristiques du c robot NXT de Lego Programmation Programme NXC Limitation de l’occupation du CPU Programmation Multi-tâches Les tâches Partage des données #define Attente 1000 // période d’attente d’une seconde Mise en place de tâches Exercices IV Conclusion task readSensor() { while(1) { Wait(Attente); int position=SENSOR_1; ... } } // boucle infinie // mise en sommeil de la tâche // acquisition Richard M OREAU – 73 / 84 Les tâches Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches Toujours une tâche principale appelée main task main() Exécutée au début d’application Une autre tâche s’exécute seulement si une tâche en cours l’appelle ou si elle est prévue dans le main Partage des données Mise en place de tâches Nombre de tâches limité par la plateforme (256) Exercices IV Définition d’une tâche Conclusion Pas de paramètres Pas de retour task LeNomDeMaTache() { /* séquence de commandes */ } Richard M OREAU – 74 / 84 Gestion des tâches Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Lancement de tâches start taskName; task controlRobot() { OnFwd(OUT_A,75); } Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion task readSensor() { while(1) { if (SENSOR_1 == 1) { start controlRobot; } } } task main() { SetSensor(S1, SENSOR_TOUCH); start readSensor; } Richard M OREAU – 75 / 84 Partage des données Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion Partage d’une valeur entière int x; // variable partagée entre T1 et T2 Partage par mutex (mutual exclusion) int x; // variable partagée entre T1 et T2 mutex port_x; // mutex de protection de x task T1() { ... x=a-b; // opération non atomique ... } task T1() { ... Acquire(port_x); x=a-b; // opération protégée Release(port_x); ... } task T2() { ... y=x; // la valeur de x n’est pas garantie ... } task T2() { int y; ... Acquire(port_x); y=x; // la valeur de x est garantie Release(port_x); ... } Richard M OREAU – 76 / 84 Partage des données Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion Attention aux interférences entre les tâches task check_sensors() { while (true) { if (SENSOR_1) { OnRev(OUT_AC, 75); Wait(500); OnFwd(OUT_A, 75); Wait(850); } } } task submain() { while (true) { OnFwd(OUT_AC, 75); Wait(1000); OnRev(OUT_C, 75); Wait(850); } } task main() { SetSensor(S1, SENSOR_TOUCH); Precedes(check_sensors, submain); } Richard M OREAU – 77 / 84 Partage des données Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion Solution en utilisant mutex (mutual exclusion)) mutex moveMutex; task check_sensors() { while (true) { if (SENSOR_1) { Acquire(moveMutex); OnRev(OUT_A, 75); Wait(1000); Release(moveMutex); } } } task move() { while (true) { Acquire(moveMutex); OnFwd(OUT_A, 75); Wait(5000); Release(moveMutex); } } task main() { SetSensor(S1, SENSOR_TOUCH); Precedes(check_sensors, move); } Richard M OREAU – 78 / 84 Partage des données Objectifs du cours Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion Solution en utilisant des sémaphores int sem; task move_square() { while (true) { until (sem == 0); sem = 1; OnFwd(OUT_AC, 75); sem = 0; Wait(1000); until (sem == 0); sem = 1; OnRev(OUT_C, 75); sem = 0; Wait(850); } } task submain() { SetSensor(S1, SENSOR_TOUCH); while (true) { if (SENSOR_1 == 1) { until (sem == 0); sem = 1; OnRev(OUT_AC, 75); Wait(500); OnFwd(OUT_A, 75); Wait(850); sem = 0; } } } task main() { sem = 0; Precedes(move_square, submain); } Richard M OREAU – 79 / 84 Ordonnancement des tâches Objectifs du cours int go = 0; déclenchement des moteurs Caractéristiques du c robot NXT de Lego Programmation Ordonnancement non prédictible Comportement du moteur A ? Programme NXC Programmation Multi-tâches Les tâches Partage des données Mise en place de tâches Exercices IV Conclusion Attention à ne pas multiplier les tâches Partage et cohérence des données Synchronisation des actions task Commande(); { if (go == 1) { OnFwd(OUT_A, 75); } } task Arret(); { if (go == 0) { Off(OUT_A); } } task Go(); { go = 1 ; } task main() { Precedes(Go, Commande, Arret); } Richard M OREAU – 80 / 84 Mise en place de tâches Objectifs du cours Conception Tâche de démarrage Caractéristiques du c robot NXT de Lego Programmation Initialisations et activations des autres tâches Tâches de réaction à un événement externe ou programmé Programme NXC Programmation Multi-tâches Les tâches Partage des données Un nouveau message Une nouvelle mesure Une alarme programmée sur un dépassement de Timeout Tâches régulières Mise en place de tâches Exercices IV Conclusion Scrutation de capteurs Gestion des actionneurs Suivi du fonctionnement (monitoring) Programmation main Tâches régulières Tâches en continu while (1) {Actions; Wait(Attente); } while (1) {Actions;} Tâches activées par une autre tâche start taskName; Richard M OREAU – 81 / 84 Exercices d’application Objectifs du cours Objectifs : Caractéristiques du c robot NXT de Lego Programmation Programme NXC Programmation Multi-tâches Les tâches savoir faire un programme comprenant plusieurs tâches ; savoir partager des données entre les tâches ; savoir être autonome en programmation NXC. Partage des données Mise en place de tâches Exercices IV Conclusion Exercices : 1. Le robot avance en ligne droite et s’arrête si l’on appuie sur le capteur de contact ou au bout de 4 secondes (solution en utilisant deux tâches) ; 2. Le robot parcourt un dégradé du blanc au noir, affiche sur l’écran la valeur lue par le capteur de luminosité et l’enregistre dans un fichier “Mesure.txt” ; 3. Le robot suit un parcours définit par une ligne noire sur un fond blanc. Richard M OREAU – 82 / 84 Conclusion Objectifs du cours Langage de programmation haut niveau Caractéristiques du c robot NXT de Lego Communications Programmation Capteurs : l’utilisation dépend de la configuration Moteurs : commande en vitesse, en position (PID) IHM : 4 boutons, 1 écran LCD, 1 générateur de son Gestion de fichiers Communication Bluetooth Programme NXC Programmation Multi-tâches Conclusion Conclusion Références Robot Programmation NXC Pas de pointeurs Fonctions non réentrantes Présentation du code Commentaires, choix des noms de variables, définition des constantes Multi-tâches Précision du temps : 1 ms Mise en place des tâches : main, tâches régulières et/ou continues Richard M OREAU – 83 / 84 Attention au partage des données et à la synchronisation Références Objectifs du cours Caractéristiques du c robot NXT de Lego “Not eXactly C (NXC) Programmer’s Guide” by John H ANSEN, version 1.0.1 b33, 2007 Programmation Programme NXC “Programming LEGO NXT Robots using NXC” by Daniele B ENEDETTELLI with revisions by John H ANSEN, version 2.2, 2007 Programmation Multi-tâches Conclusion Conclusion Références “Programmation NXC - Application à la commande d’un robot c ” NXT Lego by Prof. Jean Philippe BABAU, diaporama de cours INSA de Lyon, 2007 c Mindstorms NXT Power Programmins - Robotics in “Lego C” by John H ANSEN Éditeur : Variant Press, 560 pages, ISBN : 978-0973864922, 2007 Richard M OREAU – 84 / 84