Académique Documents
Professionnel Documents
Culture Documents
Capteurs
Capteurs
h>
#include "iut_lcd.h"
#include "iut_adc.h"
#include "iut_pwm.h"
int potent = 0;
int etatLectureCapteur = 0;
int vitBase;
float coefBrac = 0.1;
void suiviLigne(void) {
int CD, CG;
static int position;
// lecture des capteurs
CG = adc_read(3);
CD = adc_read(1);
switch (etatLectureCapteur) {
case 0:
position = CD - CG;
if ((CD < 900)&(CG < 200)) etatLectureCapteur = 1;
if ((CG < 900)&(CD < 200)) etatLectureCapteur = 2;
break;
case 1:
position = 800;
if (CD > 900) etatLectureCapteur = 0;
break;
case 2:
position = -800;
if (CG > 900) etatLectureCapteur = 0;
break;
default:
// ce cas ne devrait jamais se produire
etatLectureCapteur = 0;
} // fin du switch
lcd_position(0, 0);
lcd_printf(" Pos %4d ", position);
lcd_position(1, 0);
lcd_printf("CD%4d CG%4d", CD, CG);
void main(void) {
while (1) {
// acquisition entrée
potent = adc_read(0);
// initialisation
FDC = PORTBbits.RB2;
JCK = PORTEbits.RE2;
switch (etat) {
case 0:
lcd_position(0, 0);
lcd_printf(" Pos %4d ", potent);
vitBase=potent;
// arrêt des moteurs
if (JCK != 0) etat = 1;
break;
case 1:
// mise en marche des moteurs
suiviLigne();
if (FDC == 0) etat = 2;
break;
case 2:
pwm_setdc1(0); // 0,25 pour PWM1 (broche C2)
pwm_setdc2(0); // 0,75 pour PWM2 (broche C1)
if (JCK == 0) etat = 0;
break;
default:
// ce cas ne devrait jamais se produire
etat = 0;
} // fin du switch
// mise à jour sorties
return;
}