Hallo Zusammen,
bin gerade was am verzweifeln.
Habe hier einen tollen Sketch im Forum gefunden und wollte den für meine Zwecke etwas passend machen.
Leider bekomme ich es so nicht hin sondern versaue es mir immer nur.
Hat da jemand eine Idee wie ich aus zwei Tastern einen Taster zeitgesteuert hinbekomme ?
Also tasten auf Pin 2 dann läuft der Servo in die Endposition und nach 6 Sek läuft dieser wieder in die Ausgangsposition.
Ich bin sonst schon mit einem Ne555 oder Funktionsgenerator dran aber wollte das gerne alles in einem Sketch unterbringen aber da versagen meine Programmierkenntnisse.
Hier der Sketch:
#include <MobaTools.h>
const byte Weiche_Gerade = 40; // Endlage des Servos wenn Weiche auf Gerade
const byte Weiche_Mitte = 40; // Mittellage
const byte Weiche_Abzweig = 80; // Endlage des Servos wenn Weiche auf Abzweig
byte Weiche_soll = Weiche_Gerade; // Speichervariable für die aktuelle Lage
const byte Stellzeit_Servo_Weiche = 7; // Stellgeschwindigkeit Weiche
const byte Pin_Servo = 9; // Servo an PIN 3
const byte Pin_Taster = 2; // Taster an PIN 4
const byte entprellzeit = 20; // Zeitintervall der Tasterabfrage
boolean taster_gedrueckt = 0; // Speichervariable für den Tasterzustand
boolean last_tasterzustand = 0; // zur Erkennung der Flanke
MoToTimer Entprellen; // Timer-Objekt zum Entprellen
MoToServo servo;
void setup()
{ // Definition des Taster PINS
pinMode(Pin_Taster, INPUT_PULLUP); // wird nur 1x im Setup gemacht
servo.attach(Pin_Servo, true); // Aktivierung ServoPin - mit automatischer Abschaltung
servo.setSpeed( Stellzeit_Servo_Weiche ); // Servogeschwindigkeit einstellen
servo.write(Weiche_Mitte); // Servo fährt in Mittelstellung
delay(500); // Warten das der Servo die Stellung erreicht hat
servo.write(Weiche_Gerade);
}
void loop()
{
if ( !Entprellen.running() )
{
Entprellen.setTime( entprellzeit ); // Entprellzeit neu setzen
taster_gedrueckt = ! digitalRead( Pin_Taster ); // invertiert mit ! wegen INPUT_PULLUP
if ( taster_gedrueckt == 0 ) last_tasterzustand = 0; // Zur Flankenerkennung 'gedrückt'
}
if ( taster_gedrueckt == 1 && last_tasterzustand == 0 )
{
last_tasterzustand = taster_gedrueckt; // zur Flankenerkennung
if ( Weiche_soll == Weiche_Abzweig )
{
Weiche_soll = Weiche_Gerade;
} else {
Weiche_soll = Weiche_Abzweig;
}
servo.write(Weiche_soll); // Servo auf neue Position fahren.
}
}
Vielleicht erbarmt sich ja ein Fachkundiger.
Würde mich freuen um mal wieder etwas Licht am Tunnel sehen.
Schönen Gruß und bleibt gesund
Marc