Hi,
es geht darum den derzeitigen Gang aus der Gescwindigkeit und der Drehzahl zu berechnen.
So wie es jetzt ist geht es auch.
Aber sobald ich die Übersetzung der Gänge ändere haut es nicht mehr hin, weil dann der “gearFactor” in einem ganz anderen Bereich ist. Was auch irgendwie Sinn macht.
Ich bin mir nur nicht sicher, ob ich das überhaupt noch so kompakt hinkriege oder ob ich für jede Variante eine eigene
“Erkennungsfunktion” schreiben muss.
Wahrscheinlich müssten die Vergleichswerte irgendwie “dynamisch” von irgendwas abgeleitet werden.
Komme aber nicht drauf wie.
//Gears
int rpm; //Drehzahl
int vel; //Geschwindigkeit
int gear;
const float PrimaryM5xx [3][2] = {
//Primärübersetzung
{20.0,65.0}, //S51
{21.0,62.0}, //S70
{0.0,0.0} //Custom
};
const float GearsM5xx [7][5][2]= {
//Gänge
{
// M531
{10.0,44.0},
{17.0,38.0},
{22.0,34.0},
{0.0,0.0},
{0.0,0.0}
},
{
//M541 S51/S70
{10.0,44.0},
{16.0,40.0},
{19.0,36.0},
{22.0,34.0},
{0.0,0.0,}
},
{
//M541 SR80
{10.0,44.0},
{16.0,40.0},
{20.0,36.0},
{23.0,32.0},
{0.0,0.0}
},
{
//5-Gang MS50
{12.0,44.0},
{16.0,40.0},
{19.0,36.0},
{22.0,34.0},
{23.0,32.0}
},
{
//5-Gang Nachbau kurz
{10.0,44.0},
{16.0,40.0},
{19.0,36.0},
{22.0,34.0},
{23.0,32.0},
},
{
//5-Gang Nachbau lang
{10.0,44.0},
{16.0,40.0},
{19.0,36.0},
{22.0,34.0},
{24.0,32.0}
},
{
//Custom
{0.0,0.0},
{0.0,0.0},
{0.0,0.0},
{0.0,0.0},
{0.0,0.0}
},
};
const float SecondaryM5xx [5][2] = {
//Sekundärübersetzung
{15.0,34.0}, //S51
{16.0,34.0}, //S70
{16.0,31.0}, //SR80
{15.0,51.0}, //MS50
{0.0,0.0} //Custom
};
int gearsNr = 1;
float Primary = PrimaryM5xx[0][1] / PrimaryM5xx[0][0];
float Secondary = SecondaryM5xx[0][1] / SecondaryM5xx[0][0];
float i1 =GearsM5xx [gearsNr][0][1] / GearsM5xx [gearsNr][0][0]*Primary*Secondary;
float i2 =GearsM5xx [gearsNr][1][1] / GearsM5xx [gearsNr][1][0]*Primary*Secondary;
float i3 =GearsM5xx [gearsNr][2][1] / GearsM5xx [gearsNr][2][0]*Primary*Secondary;
float i4 =GearsM5xx [gearsNr][3][1] / GearsM5xx [gearsNr][3][0]*Primary*Secondary;
float i5 =GearsM5xx [gearsNr][4][1] / GearsM5xx [gearsNr][4][0]*Primary*Secondary;
float iFactor = i1*i2*i3*i4;
float gearFactor=0.0;
void loop(){
gearFactor = (vel * iFactor)/rpm;
if (gearFactor < 300){
gear = 0;
}
else if (gearFactor > 300 && gearFactor < 400){
gear = 1;
}
else if (gearFactor > 500 && gearFactor < 600){
gear = 2;
}
else if (gearFactor > 700 && gearFactor < 800){
gear = 3;
}
else if (gearFactor > 900 && gearFactor < 1000){
gear = 4;
}
else if (gearFactor > 1000){
gear = 0;
}
}
Gruß
schUk0