Brauche hilfe 2 sketch kombinieren

Habe 2 sketch kombiniert A2 ist ein servomotor angeschlossen es soll sich drehen solange ir low ist , bei high stoppen diese teil klappt einzeln.
Habe noch ein vibrationsmotor es soll sich einmal drehen kurz zb 1sec wenn ir low ist dann stoppen , vibrationsmotor soll sich wieder erst drehen wenn von high auf low.
wenn es möglichst wäre soll sich der vibrationsmotor nur dann einmal drehen wenn der ir erst dreimal von high auf wechselt .
Hier mein zusammen gebasteltes code
so dreht sich kurz servo Motordanach nur noch der vibrationsmotor ohne stop
würde mich freuen für eure Hilfen

const byte servomotor=A2; // Pin
const byte ir = A1; // Pin IR-Sensor
const bool BELEGT = HIGH;
#define VibrationTime 1000 // Timer für Vibrationsmodule, hier 1000 = 1 Sekunden
#define VibrationPin 11 // Geht nur, wenn kein Start-Servo verwendet wird! (Hier war vorher PIN10!!!!!)
#define VibSpeed 180 // Vibrationsgeschwindigkeit
uint8_t ErrorCounter = 0; 
// int VibrationRunsSince = 0; >> Original, geänderte Zeile mit "long"
long VibrationRunsSince = 0;
// Änderung Ende

void setup() {
  pinMode(ir,INPUT);
  pinMode(servomotor,OUTPUT);
  pinMode(VibrationPin,OUTPUT);
}

void loop() {
 static unsigned long aktivZeit;
 if (digitalRead(ir) != BELEGT) { 
    aktivZeit = millis();
    digitalWrite(servomotor, LOW);
 } else {
   // BELEGT
   if (millis() - aktivZeit > 3000)  {
      // hier ist die Verzögerungszeit abgelaufen
      digitalWrite(led, HIGH);
   }
 }

 if (VibrationRunsSince == 0)
  {
    VibrationRunsSince = millis();
    digitalWrite(VibrationPin, HIGH);
//    analogWrite(VibrationPin, VibSpeed); //Test mit reduzierter Geschwindigkeit des Vib Motors
  }
}

void VibrationTimeCheck()
{
  if (millis() > VibrationRunsSince+VibrationTime)
  {
  digitalWrite(VibrationPin, LOW);
  VibrationRunsSince = 0;

  }
}

Dies ist eure dritte von drei Anfragen zum Kombinieren von Sketchen. Ihr solltet den Vorgang inzwischen verstehen. Habt ihr es schon versucht? Je mehr ihr über Programmieren oder das Kombinieren von Programmen lernt, desto unabhängiger werdet ihr und desto weniger müsst ihr warten, bis jemand anderes eure Arbeit erledigt.

„Dreimal von hoch auf hoch wechseln“ Wie ist das möglich?

Du rufst die Funktion VibrationTimeCheck nirgends auf. Also kann der VibrationPin nicht auf LOW wechseln.

Es fehlt übrigens die Deklaration von led.

Das macht irgendwann einen Überlauf, der nirgendwo kompensiert wird.

  1. Das gehört in der Arduino Welt zu den verbotenen Dingen.
  2. An anderer Stelle machst du es richtig.

so habe es umgeschrieben aber irgendwie läuft der servo nicht aber der vibration dreht alle 10 sekunden irca irgendwas ist falsch

const byte led=A2; // Pin
const byte ir = A1; // Pin IR-Sensor
const bool BELEGT = HIGH;
#define VibrationTime 1000 // Timer für Vibrationsmodule, hier 1000 = 1 Sekunden
#define VibrationPin 11 // Geht nur, wenn kein Start-Servo verwendet wird! (Hier war vorher PIN10!!!!!)
#define VibSpeed 180 // Vibrationsgeschwindigkeit
uint8_t ErrorCounter = 0; 
// int VibrationRunsSince = 0; >> Original, geänderte Zeile mit "long"
long VibrationRunsSince = 0;
// Änderung Ende

void setup() {
  pinMode(ir,INPUT);
  pinMode(servomotor,OUTPUT);
  pinMode(VibrationPin,OUTPUT);
  delay(10);
 // VibrationStart();
 digitalWrite(VibrationPin, LOW);
}

void loop() {
 static unsigned long aktivZeit;
 VibrationTimeCheck();
 if (digitalRead(ir) != BELEGT) { 
    aktivZeit = millis();
    digitalWrite(servomotor, LOW);
    VibrationStart();
 } else {
   // BELEGT
   if (millis() - aktivZeit > 3000)  {
      // hier ist die Verzögerungszeit abgelaufen
      digitalWrite(servomotor, HIGH);
   }
 }
 delay(20);
 if (VibrationRunsSince == 0)
  {
    VibrationRunsSince = millis();
    digitalWrite(VibrationPin, HIGH);
//    analogWrite(VibrationPin, VibSpeed); //Test mit reduzierter Geschwindigkeit des Vib Motors
  }
}

void VibrationStart()
{
  if (VibrationRunsSince == 0)
  {
    VibrationRunsSince = millis();
    digitalWrite(VibrationPin, HIGH);
//    analogWrite(VibrationPin, VibSpeed); //Test mit reduzierter Geschwindigkeit des Vib Motors
  }
}

void VibrationTimeCheck()
{
  if (millis() > VibrationRunsSince+VibrationTime)
  {
  digitalWrite(VibrationPin, LOW);
  VibrationRunsSince = 0;

  }
}

Sachte ich schon...

Aus welchem Grund werden defines mit const gemischt?

Vergleiche von signed mit unsigned haben ihre Tücken.

Du möchtest endliche Automaten bauen, auch wenn dir das jetzt noch nicht klar ist.

const byte irPin = A1; // Pin IR-Sensor
const bool isActive = HIGH; // Wenn IR auslöst, wird der ArduinoPIN auf das Level gezogen


//****
const byte VibrationPin = 11;  // Geht nur, wenn kein Start-Servo verwendet wird! (Hier war vorher PIN10!!!!!)

const uint32_t VibrationTime = 1000; // Timer für Vibrationsmodule, hier 1000 = 1 Sekunden
// const uint8_t VibSpeed = 180; // Vibrationsgeschwindigkeit
bool vibrationsState = false;

// uint8_t ErrorCounter = 0;
// int VibrationRunsSince = 0; >> Original, V Zeile mit "long"

unsigned long VibrationRunsSince;
// ****
const byte servoPin = A2; // Pin
const unsigned long servoWait = 3000;  // Anlaufverzögerung
uint32_t servoRunsSince;
bool servoState = false;

void setup()
{
  pinMode(irPin, INPUT);
  pinMode(servoPin, OUTPUT);
  pinMode(VibrationPin, OUTPUT);
  delay(10);
  digitalWrite(VibrationPin, LOW);
  digitalWrite(servoPin, LOW);
}

void loop()
{
  irCheck();
  vibrationCheck();                            // Funktionsaufruf
  servoCheck();
}

void irCheck()
{
  bool irState = digitalRead(irPin);
  if (irState == isActive)                // IR hat ausgelöst
  {
    if (vibrationsState == false)         // Vibration nicht ausgelöst
    {
      vibrationsState = true;             // Vibration auslösen
      VibrationRunsSince = millis();      // Auslösezeit merken
    }
    if (servoState == false)
    {
      servoState = true;
      servoRunsSince = millis();
    }
  }
  else                                    // IR Ende?
  {
    vibrationsState = false;              // löschen
    servoState = false;
  }
}
void vibrationCheck()
{
  if ((vibrationsState == true) &&                     // Aktiv? UND
      (millis() - VibrationRunsSince < VibrationTime)) // und Zeit nicht abgelaufen?
  {
    digitalWrite(VibrationPin, HIGH);   //
  }
  else
  { digitalWrite(VibrationPin, LOW); }   //
}


void servoCheck()
{
  if ((servoState == true) &&                  // Servo aktiv
      (millis() - servoRunsSince > servoWait)) // Wartezeit abgelaufen?
  {
    digitalWrite(servoPin, HIGH);   //
  }
  else
  { digitalWrite(servoPin, LOW); }   //
}

ungetestet