Bonjour à tous,
Pour un projet en classe, j'essaye d'asservir en freinage une roue en rotation.
A l'aide d'un disque de frein et d'un photorecepteur, je peux mesurer la vitesse de la roue.
J'essaie de récupérer la vitesse, le temps, le jerk (dérivée seconde de la vitesse) et le DT entre chaque mesures.
Mais, je n'arrive pas à récupérer toutes ces mesures dans un même tableau et je ne comprends pas pourquoi.
Le système de mesure de la vitesse fonctionne, j'ai déjà reussi a récupérer des données.
#define SO 18 // Capteur optique
#define HT 19 // Clock
float vitesse = 0.0 ;
volatile unsigned long T1;
volatile unsigned long T2;
unsigned long T2_c;
unsigned long T1_c;
unsigned long dT_op;
volatile byte b=0;
volatile int b_c=0;
int NbMesures = 9;
float Vitesse[9][2];
volatile int MesIndex =0;
long total=0;
float Jerk = 0;
int i;
int j;
long DT;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(HT, INPUT);
attachInterrupt(digitalPinToInterrupt(HT), Clock, RISING);
pinMode(SO, INPUT);
attachInterrupt(digitalPinToInterrupt(SO), readSO, RISING);
}
void Clock(){
b = b+1;
}
void readSO(){
T1=T2;
T2=micros();
}
void loop() {
// put your main code here, to run repeatedly:
noInterrupts();
T2_c = T2;
T1_c = T1;
b_c = b;
interrupts();
dT_op = T2_c-T1_c;
vitesse = (1e6)/ (16*dT_op);
Vitesse[MesIndex][1] = vitesse;
Vitesse[MesIndex][0] = T2_c;
if (MesIndex=0){
i = 9;
j = 8;
}
else if (MesIndex=1){
i=0;
j=9;
}
else{
i = MesIndex-1;
j = MesIndex-2;
}
//Dérivée seconde i.e. Jerk :
DT = Vitesse[MesIndex][0] - Vitesse[i][0];
Vitesse[MesIndex][2] = (Vitesse[j][1] - 2*Vitesse[i][1] + Vitesse[MesIndex][1])*1e12 / (DT*DT);
//Print de vitesse
if (b_c>2){
//Serial.print(pwr);
Serial.print(" vitesse : ");
Serial.print(Vitesse[MesIndex][1]);
Serial.print(",");
Serial.print(" Temps : ");
Serial.print(Vitesse[MesIndex][0]);
Serial.print(",");
Serial.print(" jerk : ");
Serial.print(Vitesse[MesIndex][2]);
Serial.print(",");
Serial.print(" DT : ");
Serial.print(DT);
Serial.print(" MesIndex : ");
Serial.print(MesIndex);
Serial.println();
noInterrupts();
b=0;
interrupts();
b_c=0;
}
MesIndex = MesIndex+1;
if (MesIndex>9){
MesIndex=0;
}
}
La clock est un générateur extérieur qui envoie une impulsion toutes les 100 ms.
Voici ce que j'obtiens :
Je ne comprends pas pouquoi l'index n'incremente pas.
Merci d'avance pour votre aide