//****************************************************************************************** // Programme de détection et d'analyse d'objets // Projet Robolife. // Ce programme devra être intégré au comportement de l'herbivore. // Version RCX : 1.5 // Version NQC : 2.1 // Version RcxCC : 3.1 // Auteur : Cyrille Quesson (alias Guonzo) // Date : 02/2001 //****************************************************************************************** /* Informations diverses. Port1 : détection parchoc; Port2 : détection lumière; Port3 : détection attaque Pour toutes les actions de déplacement, il faut mettre en ouvre un système de dplct aléatoire. J'y ai déjà réfléchis, voir le prog. dandineur pour piquer des idées... */ //Les valeurs suivantes sont à définir expérimentalement. (Par lecture du capteur de lumière // directement sur le RCX.) Ici les valeurs sont arbitraires et ont servis au déverminage. #define PLAGE_MUR_INF 30 #define PLAGE_MUR_SUP 35 #define PLAGE_NOURRITURE_INF 53 #define PLAGE_NOURRITURE_SUP 62 //Variables globales int points=100; task main() { //initialisation (pour l'instant, rien n'est définitif SetPower(OUT_A+OUT_C,1); OnFwd(OUT_A+OUT_C); SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); SetSensor(SENSOR_2,SENSOR_LIGHT); //On lance les taches parallèles : start PareChoc; start DetectionAttaque; } task PareChoc() { while(true) { //Si le pare choc cogne, alors : if(SENSOR_1 == 1) { //Peut-être est-ce de la nourriture... if(PLAGE_NOURRITURE_INF <= SENSOR_2 && SENSOR_2 <= PLAGE_NOURRITURE_SUP) ActionPince(); //Peut-être est-ce un mur... if(PLAGE_MUR_INF <= SENSOR_2 && SENSOR_2 <= PLAGE_MUR_SUP) ActionRencontreMur(); } } } task DetectionAttaque() { while(true) { if(SENSOR_3 == 1) { if(points > 0) { points--; //il faut fixer le nombre de points à retirer... ActionFuite(); } else { PlaySound(2); Wait(400); points=100; } //mort déclaré et résurection // Donc cette partie ne sert à rien du tout.... } } } void ActionPince() { //Doit positionner le robot, attraper l'objet, le ramener à la colonie. //Il en profite pour augmenter son énergie. //Stock le message de présence de nourriture. PlaySound(4); } void ActionRencontreMur() { //Recule et tourne pour éviter le mur. Voir le programme dandinneur. PlaySound(0); } void ActionFuite() { //En fait, je crois que le meilleur comportement serait le suivant : SetPower(OUT_A+OUT_C,4); ActionRencontreMur(); SetPower(OUT_A+OUT_C,1); }