INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
2 Servos mit einem Kippschalter steuern
31.10.2015, 22:16
Beitrag #1
2 Servos mit einem Kippschalter steuern
Hallo zusammen,
ich baue Modellbahnmodule in Spurgröße H0. Zum Steuern von zwei Torflügeln mithilfe 2 seperater Servos und zur Steuerung der Beleuchtung habe ich mir ein Arduino (Dccduino uno) geholt. In sachen Programmierung bin ich absoluter Neuling. Mein Problem ist gerade, dass die Servos auf den Taster nicht reagieren.
Ich habe mal Testweise die BetriebsLED 13 mit impliziert. Diese reagiert auf den Kippschalter(AN/Aus).

Hier der Code:

#include "TimerOne.h"
#include <Servo.h>

Servo servo;
#include "TimerOne.h"
#include <Servo.h>

Servo servo;

const int buttonPin = A3; // Kippschalter
const int ledPin = 13; // BetriebsLED

int Servo_Tor_links = A4;
int Servo_Tor_rechts = A5;


int Tor_rechts_offen = 05;
int Tor_rechts_geschlossen = 90;
int Tor_rechts_soll = Tor_rechts_geschlossen;

int Tor_links_offen = 120;
int Tor_links_geschlossen = 90;
int Tor_links_soll = Tor_links_geschlossen;

void setup() {

Timer1.initialize(1000000);
Timer1.attachInterrupt(Zaehler);

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);
// activate pullup
digitalWrite(buttonPin, HIGH);
}

void Zaehler()
{
}
void Tor_links_auf() //Linkes Tor AUF

{ servo.attach(Servo_Tor_links);
while (Tor_links_soll > Tor_links_offen)
{
Tor_links_soll--;
servo.write(Tor_links_soll);
delay(50);
if (Tor_links_soll == Tor_links_offen)
{
delay(300);
servo.detach();
}
}
}

void Tor_links_zu() //Linkes Tor ZU

{ servo.attach(Servo_Tor_links);
while (Tor_links_soll < Tor_links_geschlossen)
{ Tor_links_soll++;
servo.write(Tor_links_soll);
delay(50);
if (Tor_links_soll == Tor_links_geschlossen)
{
delay(300);
servo.detach();

}
}
}
void Tor_rechts_zu() //Rechtes Tor ZU

{ servo.attach(Servo_Tor_rechts);
while (Tor_rechts_soll > Tor_rechts_geschlossen)
{
Tor_rechts_soll--;
servo.write(Tor_rechts_soll);
delay(50);
if (Tor_rechts_soll == Tor_rechts_geschlossen)
{
delay(300);
servo.detach();
}

}

}

void Tor_rechts_auf()//Rechtes Tor AUF

{ servo.attach (Servo_Tor_rechts);
while (Tor_rechts_soll < Tor_rechts_offen)
{ Tor_rechts_soll++;
servo.write(Tor_rechts_soll);
delay(50);
if (Tor_rechts_soll == Tor_rechts_offen)
{
delay(300);
servo.detach();
}
}
}

void loop()

{
digitalWrite(ledPin, !digitalRead(buttonPin));

if (buttonPin == LOW)
{
digitalWrite(ledPin, LOW);
Tor_rechts_auf ();
delay(2000);
Tor_links_auf ();
delay(30000);
}

if (buttonPin == HIGH)
{
digitalWrite(ledPin, HIGH);
Tor_links_zu ();
delay(2000);
Tor_rechts_zu ();
}
}


Danke, wenn mir jemand da helfen kann.
Gruss Felix
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.10.2015, 22:24 (Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2015 22:29 von hotsystems.)
Beitrag #2
RE: 2 Servos mit einem Kippschalter steuern
Hallo,
So wirst du das Programm nie zum funktionieren bringen.
Dein Programm wartet mehr, als das es was tut.
Die ganzen delays stoppen den Ablauf und in derzeit reagiert dein Programm auf keinen Tastendruck.
Ersetzte die delays durch millis (BlinkWithoutDelay) und dann macht der Sketch auch nicht nur Pausen.

Und bitte setze deinen Code hier in Code-Tags rein, dann ist der besser lesbar.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 17:47
Beitrag #3
RE: 2 Servos mit einem Kippschalter steuern
Hallo Hotsystems,
hilft mir jetzt aber auch nicht weiter.
Mit den millis (BlinkWithoutDelay) werde ich mal auseinander setzten.
Ich such immer noch den Fehler im Code, da die Servos und der Kippschalter funktionieren und richtig angeschlossen sind.
Weiss jemand eine Beispielfunktion?

Gruss Felix
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 17:50 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2015 17:52 von hotsystems.)
Beitrag #4
RE: 2 Servos mit einem Kippschalter steuern
Dann setze deinen Code wenigstens richtig rein, damit dieser besser lesbar ist.
Und was für eine Beispielfunktion meinst du?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 18:06
Beitrag #5
RE: 2 Servos mit einem Kippschalter steuern
Hallo,
So in etwa?:

Code:
#include "TimerOne.h"
#include <Servo.h>

Servo servo;

const int buttonPin = A3;     // Kippschalter
const int ledPin =  13;   // BetriebsLED

int Servo_Tor_links = A4;
int Servo_Tor_rechts = A5;


int Tor_rechts_offen = 05;
int Tor_rechts_geschlossen = 90;
int Tor_rechts_soll = Tor_rechts_geschlossen;

int Tor_links_offen = 120;
int Tor_links_geschlossen = 90;
int Tor_links_soll = Tor_links_geschlossen;

void setup() {

  Timer1.initialize(1000000);
  Timer1.attachInterrupt(Zaehler);
  
pinMode(ledPin, OUTPUT);      

pinMode(buttonPin, INPUT);    
  // activate pullup
digitalWrite(buttonPin, HIGH);
}

void Zaehler()
{
}
void Tor_links_auf() //Linkes Tor AUF

{  servo.attach(Servo_Tor_links);
  while (Tor_links_soll > Tor_links_offen)
  {
    Tor_links_soll--;
    servo.write(Tor_links_soll);
    delay(50);
    if (Tor_links_soll == Tor_links_offen)
    {
      delay(300);
      servo.detach();
    }
  }
}

void Tor_links_zu() //Linkes Tor ZU

{  servo.attach(Servo_Tor_links);
  while (Tor_links_soll < Tor_links_geschlossen)
  { Tor_links_soll++;
    servo.write(Tor_links_soll);
    delay(50);
    if (Tor_links_soll == Tor_links_geschlossen)
    {
      delay(300);
      servo.detach();

    }
  }
}
void Tor_rechts_zu() //Rechtes Tor ZU

{ servo.attach(Servo_Tor_rechts);
  while (Tor_rechts_soll > Tor_rechts_geschlossen)
  {
    Tor_rechts_soll--;
    servo.write(Tor_rechts_soll);
    delay(50);
    if (Tor_rechts_soll == Tor_rechts_geschlossen)
    {
      delay(300);
      servo.detach();
    }

  }

}

void Tor_rechts_auf()//Rechtes Tor AUF

{ servo.attach (Servo_Tor_rechts);
  while (Tor_rechts_soll < Tor_rechts_offen)
  { Tor_rechts_soll++;
    servo.write(Tor_rechts_soll);
    delay(50);
    if (Tor_rechts_soll == Tor_rechts_offen)
    {
      delay(300);
      servo.detach();
    }
  }
}

void loop()

{
   digitalWrite(ledPin, !digitalRead(buttonPin));

  if (buttonPin == LOW)
{
  digitalWrite(ledPin, LOW);
  Tor_rechts_auf ();
  delay(2000);
  Tor_links_auf ();
  delay(30000);
}

if (buttonPin == HIGH)
{
  digitalWrite(ledPin, HIGH);
  Tor_links_zu ();
  delay(2000);
  Tor_rechts_zu ();
}
}
Ein Beispiel an dem ich mich orientieren kann. Servosteuerung.ZB.
Hatte schon gegooglt gehabt. Da fand ichnur mit "2Tastern einen Servo steuern".
Mir ist das Programmieren totales Neuland. Den Code hab ich von einem Kollegen.

Gruss Felix
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 18:09 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2015 18:11 von hotsystems.)
Beitrag #6
RE: 2 Servos mit einem Kippschalter steuern
Zu Anfang hast du doppelte include Befehle.
Es fehlt die Definition der Variablen "tor_rechs_geschlossen und tor_links_geschlossen".

Eine bessere Formatierung und Dokumentation wäre hilfreich.

Ok, das ist jetzt schon mal besser bis auf die Dokumentation.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 18:32
Beitrag #7
RE: 2 Servos mit einem Kippschalter steuern
Wenn ich das Richtig verstanden habe,brauche ich den Timer für den Zeitlichen Ablauf der Toröffnung.
Und den Servo für die Servosteuerung.
Wie müsste dieDefinition der Variablen aussehen?
Mehr kann ich dazu leider auch nicht beisteuern...

Gruss Felix
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.11.2015, 18:44
Beitrag #8
RE: 2 Servos mit einem Kippschalter steuern
(01.11.2015 18:32)Moba55 schrieb:  Wenn ich das Richtig verstanden habe,brauche ich den Timer für den Zeitlichen Ablauf der Toröffnung.
Und den Servo für die Servosteuerung.
Wie müsste dieDefinition der Variablen aussehen?
Mehr kann ich dazu leider auch nicht beisteuern...

Die doppelten Include hast du im neuen Sketch schon rausgenommen.
Die Definition hängt von den Inhalten hab, was drin stehen soll.
Z.B. "int tor_rechts_geschlossen = 0"

Wichtig für ein besseres Verständnis wäre eine Beschreibung im Sketch was die einzelnen Befehle bewirken sollen, das macht es uns einfacher.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Zwei identische I2C sensoren an einem Bus Karli 19 873 02.04.2018 22:13
Letzter Beitrag: Harry
  4dig 7seg LED Helligkeit steuern daja64 5 326 18.02.2018 10:38
Letzter Beitrag: Tommy56
  byte´s zu einem String zusammenfassen ? Franz54 18 1.189 31.01.2018 10:10
Letzter Beitrag: MicroBahner
  Schrittmotor mit Puls/Richtung Steuern Günni 6 689 19.01.2018 10:30
Letzter Beitrag: Tommy56
  Mehrere Ausgänge mit einem Befehl auf High oder Low setzen dahans 1 601 10.01.2018 12:48
Letzter Beitrag: Tommy56
  RC Anwendung mit 3 Empfängereingangen und einem MPU6050 Thorsten_S 19 1.373 10.12.2017 19:59
Letzter Beitrag: Tommy56
Question Mehrere HX711 an einem Arduino Nano Lambacher 59 4.613 17.10.2017 09:34
Letzter Beitrag: Tommy56
  Schrittmotor Geschwindigkeit mit Wägezelle + HX711 Modul steuern Schrittmotor 10 1.874 30.08.2017 23:45
Letzter Beitrag: hotsystems
  Servo mit einem Taster und 433mhz steuern Thor Wallhall 63 5.036 29.07.2017 11:02
Letzter Beitrag: Thor Wallhall
  2 Servos ohne delay steuern Ratlos 27 3.829 26.07.2017 20:43
Letzter Beitrag: MicroBahner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste