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.

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?

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.

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.

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
  A4988 Driver mit einem Nema 17 Hangloose 3 140 04.09.2016 21:49
Letzter Beitrag: Hangloose
  Arduino Steuern über eigne Homepage b3ta 8 397 16.08.2016 11:07
Letzter Beitrag: Pit
  PWM-Lüfter mit Adafruit Motor-Shield steuern? phischmi 9 448 22.07.2016 18:06
Letzter Beitrag: phischmi
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 751 16.07.2016 11:43
Letzter Beitrag: Binatone
  DC Motor in beide Richtungen steuern WIMunios 5 643 24.03.2016 12:04
Letzter Beitrag: Bitklopfer
  Kann ich mit einem Arduino ein Gyro für Adroid Simulieren? Demitos 0 406 16.03.2016 18:33
Letzter Beitrag: Demitos
  Mit RFID Sensor NFC Tags steuern WIMunios 14 919 15.03.2016 12:07
Letzter Beitrag: WIMunios
  Ansteuerung von einem Relais mit einem PS2 Controller minigarage 2 336 11.03.2016 15:31
Letzter Beitrag: minigarage
  WS2812 Helligkeit einzelner LEDs steuern mavericklp 3 657 11.03.2016 09:32
Letzter Beitrag: torsten_156
Bug Mit zwei Ultraschallsensoren die Drehbewegung eines Servos steuern Poet 5 558 21.02.2016 18:37
Letzter Beitrag: Carlo

Gehe zu:


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