Qui sotto potete vedere il software modificato ,per semplificare ho inserito solo la parte che e' stata modificata.
#ifdef OUTPUT_READABLE_REALACCEL
// display real acceleration, adjusted to remove gravity
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetAccel(&aa, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
Serial.print("areal\t");
Serial.print(aaReal.x);
Serial.print("\t");
Serial.print(aaReal.y);
Serial.print("\t");
Serial.println(aaReal.z);
lettura[attuale++] = aaReal.x;
if (attuale > (NUM_ELEM_MEAN - 1) ) {
attuale = 0;
}
media = 0;
for(int index=0;index<NUM_ELEM_MEAN;index++) {
media += lettura[index];
}
media = media / NUM_ELEM_MEAN;
//NEW CODE
if (delay_counter < 1700) {
delay_counter++;
} else {
v = (-500. + media)*(255./400.);
if (v == 0) {
//fermo
vel = 0;
analogWrite (E1,0);
digitalWrite(M1,LOW);
analogWrite (E2,0);
digitalWrite(M2,LOW);
} else if (v > 0) {
//avanti
vel = v;
analogWrite (E1,vel);
digitalWrite(M1,HIGH);
analogWrite (E2,vel);
digitalWrite(M2,HIGH);
} else if (v < 0){
//in dietro
vel = -v;
analogWrite (E1,vel);
digitalWrite(M1,LOW);
analogWrite (E2,vel);
digitalWrite(M2,LOW);
}
}
#endif
Ho semplicemente sostituito nel codice precedente il dato da usare che tiene conto solo della variazione dell'asse x chiamato:"aaReal.x".Poi ho dovuto inserire per la calibrazione del sensore anziché il valore in gradi usato precedentemente il valore -500 che consiste nel valore di partenza quando e' perfettamente parallelo al terreno.Ecco qui si sono presentati i primi problemi perché ad ogni accensione questo valore ha una variazione che quindi mi sposta il riferimento iniziale e questo mi sta dando qualche problema di stabilita'.
Ho dovuto inserire un counter
if (delay_counter < 1700) {
delay_counter++;
questo perché il sensore all'accensione impiega alcuni secondi(circa 15) per raggiungere il valore stabile iniziale quindi dopo circa 1700 letture diventa stabile.Quindi i comandi ai motori vengono inviati dopo questi 15 secondi.
Ora al software manca solo la parte di sterzata data dal potenziometro collegato al manubrio che ancora non ho sviluppato.