Hilfe bei Code für carsystem

Hallo zusammen,
habe folgenden Code für 3 Servos mit LED Anzeige. Soll für Stopstellen carsystem sein.
Je ein Magnet wir mittel Servo durch die Platte gehoben und im Auto ein Reedkontakt geöffnet. Nach dem Einschalten klappt alles wunderbar. Dann wird alles spannungslos geschalten.
Nun passiert folgendes bei Wiedereinschalten:
die Servos bewegen sich ein Stück in die falsche Richtun (weiter Heben) nach dem ersten Betätigen des Tasters geht es in die Ein-Stellung oder in die Aus-Stellung je nach gedrückten Taster. Alles funzt wieder bis zum nächsten Aus- und Einschalten der Anlage.
Servos sind okay, habe ich mit anderen Code probiert, da passiert das nicht.
Was muß ich am Code verändern?
Danke für eure Hilfe.
Gruß Uwe

Welcher Code ?

//Carsystem Busplatz Stoppstellen mit Anzeige

#include <Servo.h>

const int taster  = 2; //Servo 1 hin
const int taster2 = 3; //Servo 1 her
const int taster3 = 4; //Servo 2 hin
const int taster4 = 5; //Servo 2 her
const int taster5 = 6; //Servo 3 hin
const int taster6 = 7; //Servo 3 her
bool tasterstatus, tasterstatus1, tasterstatus2, tasterstatus3, tasterstatus4, tasterstatus5;
Servo Servo1;
Servo Servo2;
Servo Servo3;
int LED1 = A1; //LED Servo1 auf A1
int LED2 = A2; //LED Servo2 auf A2
int LED3 = A3; //LED Servo3 auf A3

void setup()
{
  pinMode(taster, INPUT_PULLUP);
  pinMode(taster2, INPUT_PULLUP);
  pinMode(taster3, INPUT_PULLUP);
  pinMode(taster4, INPUT_PULLUP);
  pinMode(taster5, INPUT_PULLUP);
  pinMode(taster6, INPUT_PULLUP);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  Servo1.attach(9);
  Servo2.attach(10);
  Servo3.attach(11);
}

void loop()
{
  tasterstatus  = digitalRead(taster);
  tasterstatus1 = digitalRead(taster2);
  tasterstatus2 = digitalRead(taster3);
  tasterstatus3 = digitalRead(taster4);
  tasterstatus4 = digitalRead(taster5);
  tasterstatus5 = digitalRead(taster6);

// Servo 1

  if (tasterstatus == 0)
  {
    Servo1.write(2);
  } else if (tasterstatus1 == 0)
  {
    Servo1.write(40);  //Winkel einstellen

  }

// LED 1 Servo 1
  
  if (tasterstatus == 0)
  {
    digitalWrite(LED1, LOW);
  } else if (tasterstatus1 == 0)
  {
    digitalWrite(LED1, HIGH);

  }

// Servo 2

  if (tasterstatus2 == 0)
  {
    Servo2.write(2);
  } else if (tasterstatus3 == 0)
  {
    Servo2.write(40); //Winkel einstellen
  }

//LED 2 Servo 2

  if (tasterstatus2 == 0)
  {
    digitalWrite(LED2, LOW);
  } else if (tasterstatus3 == 0)
  {
    digitalWrite(LED2, HIGH);

  }

// Servo 3

  if (tasterstatus4 == 0)
  {
    Servo3.write(2);
  } else if (tasterstatus5 == 0)
  {
    Servo3.write(40);  //Winkel einstellen
  }

// LED 3 Servo 3

  if (tasterstatus4 == 0)
  {
    digitalWrite(LED3, LOW);
  } else if (tasterstatus5 == 0)
  {
    digitalWrite(LED3, HIGH);

  }
}

Hallo
Poste ein Bild von dem carsystem.

Hallo Uwe,

Die Servo lib gibt nach dem attach sofort Impulse aus ( Wenn ich mich recht erinnere für die Mittelstellung, also wie ein servo.write(90).
Wenn das bei Dir stört, muss unmittelbar nach dem attach eine write Anweisung mit dem gewünschten Startwinkel folgen.

Franz-Peter

Hallo Microbahner,
wie könnte das aussehen?

Das hat dir Franz-Peter schon geschrieben. Du musst nur den Winkel für deinen Fall anpassen.

Ich werde es morgen probieren.
:+1::+1:

Hallo Zusammen,
ich habe es probiert. Erstmal mit:

Blockquote

Servo1.attach(9);
Servo1.write(90);
<
es gibt keine Veränderungen zum vorherigen Stand.
???
:roll_eyes:

Natürlich nicht. Du machst ja genau das, was er von sich aus sowieso schon macht. Du musst bei der write Anweisung natürlich den Winkel vorgeben, wo sich das Servo für deine Anwendung beim Start hindrehen soll.

wenn ich aber den winkel zum Beispiel auf 120
Servo1.write(120);
schreibe kommt der gleiche Effekt.
Irgendwie ist mein Gehirn total auf Abwegen.

Wie kommst Du auf 120? In deinem gesamten Code kommen nur die Werte write(2) und write(40) vor. Offensichtlich sind das also deine gewünschten Endstellungen. Ich würde erwarten, dass Du beim Einschalten dein Servo zu einer dieser beiden Stellungen bewegen willst.

so, habe es auf den Winkel eingestellt der beim Einschalten angefahren wird und den anderen entsprechent wie gebraucht. Klappt bei Servo 1.
Bei Servo 2 und den gleichen Winkeln fährt dieser anders. Komisch.
ich passe da die Winkel an. Mal schauen.
Liegt vielleicht an den Billigservos.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.