#define motor 3 #define randomMode 6 #define delayPoti A0 #define speedPoti A1 int motorSpeed = 0; int delayTime = 0; // the setup function runs once when you press reset or power the board void setup() { pinMode(motor, OUTPUT); pinMode(delayPoti, INPUT); pinMode(speedPoti, INPUT); pinMode(randomMode, INPUT); Serial.begin(9600); randomSeed(analogRead(4)); } // the loop function runs over and over again until power down or reset void loop() { if (digitalRead(randomMode) == HIGH) { Random_Mode(); } else { Individual_Mode(); } } void Random_Mode() { //Start mit normaler Geschwindigkeit analogWrite(motor, 176); int delayAfterNormalSpeed = random(100, 500); Serial.print("delayAfterNormalSpeed = "); Serial.println(delayAfterNormalSpeed); //Pause zwischen Start und Geschwindigkeitserhöhung ( for (int i = 0; i < delayAfterNormalSpeed; i++) { if (digitalRead(randomMode) == LOW) { break; } delay(50); } //Geschwindigkeitserhöhung int speedStartValue = random(50, 100); int speedEndValue = random(150, 255); int speedRaiseInterval = random(20, 80); Serial.print("speedStartValue = "); Serial.println(speedStartValue); Serial.print("speedEndValue = "); Serial.println(speedEndValue); Serial.print("speedRaiseInterval = "); Serial.println(speedRaiseInterval); for (int i = speedStartValue; i < speedEndValue; i++) { analogWrite(motor, i); if (digitalRead(randomMode) == LOW) { break; } delay(speedRaiseInterval); } // abrupte Pause mikt 50 % Wahrscheinlichkeit int randomDelay = random(0, 2); Serial.print("randomDelay = "); Serial.println(randomDelay); if (randomDelay == 0) { analogWrite(motor, 0); delay(500); } // Endgeschwindigkeit halten int holdEndSpeed = random(20, 70); Serial.print("holdEndSpeed = "); Serial.println(holdEndSpeed); for (int i = 0; i < holdEndSpeed; i++) { analogWrite(motor, speedEndValue); if (digitalRead(randomMode) == LOW) { break; } delay(100); } int speedDownValue = random(50, 100); int speedDownDelay = random(20, 80); Serial.print("speedDownValue = "); Serial.println(speedDownValue); Serial.print("speedDownDelay = "); Serial.println(speedDownDelay); //Geschwindigkeitreduzieren for (int i = speedEndValue; i > speedDownValue; i--) { analogWrite(motor, i); if (digitalRead(randomMode) == LOW) { break; } delay(speedDownDelay); } delay(100); } void Individual_Mode() { delayTime = analogRead(delayPoti); delayTime = map(delayTime, 0, 1023, 0, 2000); motorSpeed = analogRead(speedPoti); motorSpeed = map(motorSpeed, 0, 1023, 0, 255); analogWrite(motor, motorSpeed); delay(500); analogWrite(motor, 0); delay(delayTime); }