Umstellung auf Floatgenerell bei Speed

Umstellung auf Float bei Beschleunigung
Entfernen von minspeed
Entfernen nicht notwendiger Konstruktoren in Lokomotive
This commit is contained in:
2023-05-19 16:41:59 +02:00
parent a5f5b18a27
commit fe94db4e88
5 changed files with 51 additions and 66 deletions

View File

@@ -2,22 +2,17 @@
#include<motor.h>
#include<math.h>
Locomotive::Locomotive(int accelerate, int decelerate, byte minSpeed, byte maxSpeed, IMotor& motor): _motor(motor)
Locomotive::Locomotive(float accelerate, float decelerate, byte minSpeedStart, byte minSpeedStop, IMotor& motor): _motor(motor)
{
_currentSpeed=0;
_currentAcc=0;
_accelerate=accelerate;
_decelerate=decelerate;
_minSpeed=minSpeed;
_maxSpeed=maxSpeed;
_minSpeedStart=minSpeedStart;
_minSpeedStop=minSpeedStop;
};
void Locomotive::Accelerate()
{
Accelerate(_maxSpeed);
};
void Locomotive::Accelerate(byte Speed)
{
/* Serial.print("Locomotive.Accelerate: ");
@@ -26,6 +21,11 @@ void Locomotive::Accelerate(byte Speed)
Serial.print(Speed);
Serial.print(" ");
*/
Serial.print("Accelerate: currentspeed=");
Serial.print((_currentSpeed));
Serial.print(" targetspeed=");
Serial.print(Speed);
_targetSpeed = Speed;
_millisStart = millis()-_delay;
if (_targetSpeed>_currentSpeed)
@@ -33,31 +33,41 @@ void Locomotive::Accelerate(byte Speed)
else
_currentAcc = - _decelerate;
Serial.print(" _currentAcc=");
Serial.print(_currentAcc);
Serial.println();
};
void Locomotive::Accelerate(byte Speed, float bremsweg)
{
Serial.print("Accelerate: currentspeed=");
Serial.print((_currentSpeed));
Serial.print(" targetspeed=");
Serial.print(Speed);
Serial.print(" bremsweg=");
Serial.print((bremsweg));
_targetSpeed = Speed;
_currentSpeed = (_currentSpeed<_minSpeed)? _minSpeed : _currentSpeed;
_currentSpeed = (_currentSpeed<_minSpeedStart)? _minSpeedStart : _currentSpeed;
_millisStart = millis()-_delay;
byte _targetSpeed2 = ((_targetSpeed < _currentSpeed)&&(_targetSpeed == 0)) ? _minSpeed : _targetSpeed;
byte _targetSpeed2 = ((_targetSpeed < _currentSpeed)&&(_targetSpeed == 0)) ? _minSpeedStop : _targetSpeed;
int deltaspeed = (_targetSpeed2 - _currentSpeed);
_currentAcc = copysign(deltaspeed * deltaspeed / (100.0 * bremsweg), deltaspeed);
_currentAcc = copysign(deltaspeed * deltaspeed / (100.0 * bremsweg ) * (_delay / 300.0) , deltaspeed);
if (_currentAcc == 0)
_currentAcc = copysign(1, deltaspeed);
Serial.print(" targetspeed2=");
Serial.print(_targetSpeed2);
Serial.print(" _currentAcc=");
Serial.print(_currentAcc);
Serial.println();
};
void Locomotive::Break()
{
Accelerate(0);
};
void Locomotive::setSpeed(byte Speed)
void Locomotive::setSpeed(float Speed)
{
_currentSpeed = Speed;
_motor.setSpeed( (int) (_currentSpeed+0.5));
@@ -86,14 +96,14 @@ void Locomotive::loop()
Serial.println(newspeed);
*/
int breakspeed = _minSpeed * 80 / 100;
int breakspeed = _minSpeedStop;
if ((newspeed>_targetSpeed) && (_currentAcc>0))
{
newspeed = _targetSpeed;
_currentAcc =0;
}
else if ((newspeed<_minSpeed) && (_currentAcc>0)) newspeed = _minSpeed;
else if ((newspeed<_minSpeedStart) && (_currentAcc>0)) newspeed = _minSpeedStart;
else if ((newspeed<breakspeed) && (_currentAcc<0))
{
newspeed = 0;
@@ -107,13 +117,8 @@ void Locomotive::loop()
};
byte Locomotive::currentSpeed()
float Locomotive::currentSpeed()
{
return ((byte) (_currentSpeed+0.5));
};
byte Locomotive::getDefaultSpeed()
{
return _maxSpeed;
return (_currentSpeed);
};