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
  Neo Pixel Clone mit 7 2812B Steuern Lil-De 8 214 12.06.2017 22:02
Letzter Beitrag: Lil-De
  Bild in eine html Seite auf einem ESP8266 einfügen rockzm 1 258 06.04.2017 14:57
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 333 13.03.2017 12:12
Letzter Beitrag: Tommy56
  RGB Animation über Serial Steuern Medolino 5 293 20.02.2017 16:14
Letzter Beitrag: Medolino
  Mehrere HX711 mit einem Arduino Uno be14b029 5 403 08.02.2017 18:09
Letzter Beitrag: Binatone
  8 Taster an einem Pin Kitt 9 660 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Mehrere Servos gleichzeitig steuern (Hexapod) scritch 7 520 25.01.2017 08:18
Letzter Beitrag: scritch
  Über drei Taster zwei externe Timer steuern Sidamo 23 842 09.01.2017 20:12
Letzter Beitrag: Tommy56
  aufeinander Aufbauende Lichtaktion mit einem Taster Colby 9 597 17.12.2016 13:30
Letzter Beitrag: Colby
  Bridge und TemperaturWebPanel in einem Skript j_ard 4 510 17.12.2016 11:06
Letzter Beitrag: j_ard

Gehe zu:


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