/******************************************************************* Programme du robot aspirateur avec un 30F4012 Oscillateur: FRC (7.5Mhz)*16PLL= 30 Mips Les trois sortie PWM sont utilisées (2 pour les moteurs de déplacement et 1 pour le moteur de l'aspirateur) Le convertisseur analogique numérique sert pour la gestion des contactes grâce à la mesure de m'intensité qui circule dans les moteurs et à la gestion de l'alimentation. Le timer 23 sert pour faire cligonter une LED et pour la rampe de vitesse des moteurs. nb On pourrait tout aussi bien utiliser un seul timer 16 bits Le timer 45 sert pour temporiser le actions *********************************************************************/ #include "p30f4012.h" #include #include #include #include #include //#define BAUDS_9600_FRC_8PLL 95 //#define BAUDS_9600_FRC_16PLL 194 //pwm max du moteur --> vitesse max admise #define pwm_max_ar 2500 //2210 //1500 //2310 #define pwm_max_dg 2850 #define pwm_min 1800 unsigned long pwm; //fontions de manipulation du robot void avance(void); void recule(void); void tourn_drt(void); void tourn_gch(void); void incr_pwm(void); void arret(void); void redemarrage(void); void frein(void); void roue_libre(void); void demarrer_tempo(unsigned long tempo); volatile unsigned int fin_tempo_var; //variable qui indique la fin d'une tempo volatile unsigned int pwm_count; volatile unsigned int AN_alim,AN_md,AN_mg; //pour le conversion AN volatile unsigned int alim_low; //variable qui indique une baisse de tension volatile unsigned int led_count;//variable pour le clignotement de la led #define AN_alim_min_haut 750 #define AN_alim_min_bas 650 #define AN_md_max 1024 //435 #define AN_mg_max 1024 //435 //pin des moteurs et registre de controle de cette pin //#define EN_A PORTEbits.RE1 #define EN_A_TRIS TRISEbits.TRISE5 #define EN_A_LAT LATEbits.LATE5 #define IN_A1 LATBbits.LATB3 #define IN_A1_TRIS TRISBbits.TRISB3 #define IN_A2 LATBbits.LATB4 #define IN_A2_TRIS TRISBbits.TRISB4 //#define EN_B PORTEbits.RE3 #define EN_B_TRIS TRISEbits.TRISE3 #define EN_B_LAT LATEbits.LATE3 #define IN_B1 LATBbits.LATB5 #define IN_B1_TRIS TRISBbits.TRISB5 #define IN_B2 LATCbits.LATC15 #define IN_B2_TRIS TRISCbits.TRISC15 #define puls_aspi LATEbits.LATE1 #define puls_aspi_TRIS TRISEbits.TRISE1 //variable des contactes #define cntct_drt PORTDbits.RD1 #define cntct_drt_TRIS TRISDbits.TRISD1 #define cntct_gch PORTDbits.RD0 #define cntct_gch_TRIS TRISDbits.TRISD0 #define cntct_centre PORTEbits.RE8 #define cntct_centre_TRIS TRISEbits.TRISE8 #define off 1 #define on 0 #define forward 1 #define reverse 0 #define in 1 #define out 0 //variables de temporisation (limite de temps d'une action !) #define av_tempo 117188 #define rec_tempo 117188 #define drte_tempo 117188 #define gch_tempo 117188 #define frein_tempo 117188 //variables de l'intelligence de l'aspirateur enum {av,rec,drte,gche,ar,red,frn} Etat,Etat_old;//variable qui permet de stocker l'Etat du robot enum {contacte_drt,contacte_gch,contacte_front,nothing,fin_tempo} Evenment;//variable qui permet l'evenment