//============================================================== // Nom Programme : minisumo.c // Date : 10-06-2004 // Version : 1 // Auteur : F. Giamarchi // // Description : Controle un robot de type Mini Sumo // : catégorie moins de 500g // //============================================================== // Appel des sous-programmes utiles //============================================================== #include <16f84.h> #include #include //============================================================== // Programme pilote des moteurs //============================================================== int Moteur_Command; void Active_Moteurs() { if (Moteur_Command == Avance) { Moteur_Dr(Av,8); Moteur_Ga(Av,8); if (Ir_Etat == Centre) { delay_ms (200); Ir_Etat = Non; } } else if (Moteur_Command == Recule) { Moteur_Dr(Ar,5); Moteur_Ga(Ar,5); if (Bord_dohyo == Centre) { delay_ms (1000); Bord_dohyo = Non; } else if (Bord_dohyo == A_Droite) { delay_ms (1000); Moteur_Ga(Av,5); delay_ms (500); Bord_dohyo = Non; } else if (Bord_dohyo == A_Gauche) { delay_ms (1000); Moteur_Dr(Av,5); delay_ms (500); Bord_dohyo = Non; } else Bord_dohyo = Non; } else if (Moteur_Command == Droite) { Moteur_Ga(Av,7); Moteur_Dr(Ar,5); if (Ir_Etat == A_Droite) { delay_ms (200); Ir_Etat = Non; } } else if (Moteur_Command == Gauche) { Moteur_Ga(Ar,5); Moteur_Dr(Av,7); if (Ir_Etat == A_Gauche) { delay_ms (200); Ir_Etat = Non; } } else if (Moteur_Command == Arret) { Moteur_Dr(Stop,0); Moteur_Ga(Stop,0); } else { Moteur_Dr(Stop,0); Moteur_Ga(Stop,0); } } //============================================================== // Programme par défaut //============================================================== int Defaut_Command; short Defaut_Drapeau; void Defaut() { Defaut_Command = Avance; Defaut_Drapeau = 1; } //============================================================== // Programme pour chercher l'adversaire //============================================================== int Cherche_Command; short Cherche_Drapeau; void Cherche() { if (Ir_Etat == Centre) { Cherche_Command = Avance; Cherche_Drapeau = 1; Son_Off(); } else if (Ir_Etat == A_Droite) { Cherche_Command = Droite; Cherche_Drapeau = 1; Son_On(); } else if (Ir_Etat == A_Gauche) { Cherche_Command = Gauche; Cherche_Drapeau = 1; Son_On(); } else { Cherche_Drapeau = 0; Son_Off(); } } //============================================================== // Programme pour pousser l'adversaire //============================================================== int Contact_Command; short Contact_Drapeau; void Contact() { if (!Choc_1) { Contact_Drapeau = 0; } else { Contact_Command = Avance; Contact_Drapeau = 1; } } //============================================================== // Programme pour éviter de tomber du dohyo //============================================================== int Dohyo_Command; short Dohyo_Drapeau; void Dohyo() { if (!Bord_Dr && !Bord_Ga) { Dohyo_Drapeau = 0; Bord_dohyo = Non; Son_Off(); } else if (Bord_Dr && Bord_Ga) { Dohyo_Command = Recule; Dohyo_Drapeau = 1; Bord_dohyo = Centre; Son_On(); } else if (Bord_Ga) { Dohyo_Command = Recule; Dohyo_Drapeau = 1; Bord_dohyo = A_Gauche; Son_On(); } else if (Bord_Dr) { Dohyo_Command = Recule; Dohyo_Drapeau = 1; Bord_dohyo = A_Droite; Son_On(); } else { Dohyo_Drapeau = 0; Bord_dohyo = Non; } } //============================================================== // Programme d'arbitrage //============================================================== void Arbitre() { if (Dohyo_Drapeau) Moteur_Command = Dohyo_Command; else if (Contact_Drapeau) Moteur_Command = Contact_Command; else if (Cherche_Drapeau) Moteur_Command = Cherche_Command; else if (Defaut_Drapeau) Moteur_Command = Defaut_Command; else Moteur_Command = Stop; } //============================================================== // Programme principal //============================================================== main() { Init_Sumo(); INIT_Interrup(); Start(); While (1) { Defaut(); Cherche(); Contact(); Dohyo(); Arbitre(); Active_Moteurs(); } } //==============================================================