#include <math.h>

using namespace std;


double berechneFunktion(double x) { 
  //  return exp(-x * x); // Funktion f(x)=e^(-x^2) (anschwellende & abschwellende Beschleunigung)
  return x; // Funktion f(x)=x  (konstante Beschleunigung)
  //Die Funktion gibt den Beschleunigungsverlauf an
}

double Umdrehungen = 8;
double Beschleunigung = 2; // Anzahl der Umdrehungen bis RPSmax erreicht ist
double RPMmax = 60; // maximale Drehzahl 1/min

double RPSmax = RPMmax / 60; // RotationsPerSeconds Umdrehung/Sekunde
double k = (Umdrehungen-2*Beschleunigung)*200; // Anzahl der Steps mit RPSmax
double startX = 0.01; 
double endX = 1.01;
double deltaX = (endX-startX)/(200*Beschleunigung);  // Schrittweite 200 entspricht einer Umdrehung 


void setup() {
  pinMode(5, OUTPUT);
}
void loop() {

  for (double x = startX; x <= endX-deltaX; x += deltaX) {
   double Drehzahl = RPSmax*berechneFunktion(x);
   digitalWrite(5, HIGH);
   delay(5/Drehzahl/2);
   digitalWrite(5, LOW);
   delay(5/Drehzahl/2);
  }
  for (double i = 0; i < k; i++) {
   double Drehzahl = RPSmax;
   digitalWrite(5, HIGH);
   delay(5/Drehzahl/2);
   digitalWrite(5, LOW);
   delay(5/Drehzahl/2);
  }
  for (double x = (endX-startX); x > deltaX; x -= deltaX) {
   double Drehzahl = RPSmax*berechneFunktion(x);
   digitalWrite(5, HIGH);
   delay(5/Drehzahl/2);
   digitalWrite(5, LOW);
   delay(5/Drehzahl/2);
  }
  delay(3000);
}
A4988