Erstmal Sorry,
Ich wurde angewiesen einen neuen Thread zu erstellen.
... fand den anderen halt passend ...
Ich bin neu hier und auch im Arduino Bereich.
Ich bin an etwas ähnlichem dran...
Bitte seid gnädig, ich schaffe damit erst seit 2 Wochen... und möchte eine Weichensteuerung (Wegesteuerung an Kreuzweiche mit 3 Taster) "läuft", sowie eine 1 Taster Schrankensteuerung (Servo hoch_runter) mit Blinkleds (Andreaskreuz) "hier hackts".
Im Start -> Schranke unten blinkt... "OK"...Taste 1x Schranke hoch blinkt aber noch... "n. OK" ... nach mehrmaligen drücken geht auch mal die LED aus nicht nachvollziehbar... dann teilweise Taste 1x Schranke runter, blinkt nicht -> noch mal Taste 1x Schranke bleibt unten aber blinkt nun auch...
#include <Servo.h>
Servo Weiche1;
Servo Weiche2;
Servo Weiche3;
Servo Weiche4;
Servo Schranke;
int Grad;
const int T_W = 53;
const int T_O = 52;
const int T_G1 = 51;
const byte T_S= 50; // Taster an Pin 1 und GND
const long interval = 500; // Blinkintervall
const byte entprellzeit = 20; // Zeitintervall der Tasterabfrage
boolean taster_gedrueckt = 0; // Speichervariable für den Tasterzustand
boolean last_tasterzustand = 0; // zur Erkennung der Flanke
// Leds
const int Pin_LED2_Rot = A0; // LED Gerade an PIN A0 high
const int Pin_LED3_Gruen = A0; // LED Gerade an PIN A0 low
const int Pin_LED6_Gruen = A1; // LED Gerade an PIN A1 high
const int Pin_LED7_Rot = A1; // LED Gerade an PIN A1 low
const int Pin_LED4_Rot = A2; // LED Gerade an PIN A0 high
const int Pin_LED5_Gruen = A2; // LED Gerade an PIN A0 low
const int Pin_LED8_Gruen = A3; // LED Gerade an PIN A1 high
const int Pin_LED9_Rot = A3; // LED Gerade an PIN A1 low
// Blinkleds
int ledState = LOW; // Led-Status
uint8_t TasterValue = 0; // Taster-Status
uint8_t BlinkValue = 0; // Blink-Status
uint8_t status = 0;
unsigned long previousMillis = 0;
//___________________VOID SETUP______________
void setup()
{
pinMode(T_W, INPUT_PULLUP);
pinMode(T_O, INPUT_PULLUP);
pinMode(T_G1, INPUT_PULLUP);
pinMode(T_S, INPUT_PULLUP);
// BlinkLed
pinMode(LED_BUILTIN, OUTPUT); // Led Pin13
// Leds definieren
pinMode(Pin_LED3_Gruen, OUTPUT);
digitalWrite(Pin_LED3_Gruen, HIGH); // Initialisieren der LED auf Grundstellung, LED Gerade leuchtet
pinMode(Pin_LED2_Rot, OUTPUT);
digitalWrite(Pin_LED2_Rot, LOW); // Initialisieren der LED auf Grundstellung, LED Abzweig ist aus
pinMode(Pin_LED5_Gruen, OUTPUT);
digitalWrite(Pin_LED5_Gruen, LOW); // Initialisieren der LED auf Grundstellung, LED Gerade leuchtet
pinMode(Pin_LED4_Rot, OUTPUT);
digitalWrite(Pin_LED4_Rot, HIGH); // Initialisieren der LED auf Grundstellung, LED Abzweig ist aus
pinMode(Pin_LED6_Gruen, OUTPUT);
digitalWrite(Pin_LED6_Gruen, HIGH); // Initialisieren der LED auf Grundstellung, LED Gerade leuchtet
pinMode(Pin_LED7_Rot, OUTPUT);
digitalWrite(Pin_LED7_Rot, LOW); // Initialisieren der LED auf Grundstellung, LED Abzweig ist aus
pinMode(Pin_LED8_Gruen, OUTPUT);
digitalWrite(Pin_LED8_Gruen, LOW); // Initialisieren der LED auf Grundstellung, LED Gerade leuchtet
pinMode(Pin_LED9_Rot, OUTPUT);
digitalWrite(Pin_LED9_Rot, HIGH); // Initialisieren der LED auf Grundstellung, LED Abzweig ist aus
}
//___________FUNKTION "schalten"________________
void schalten (Servo Weiche, int PIN, int Winkel)
{
Weiche.attach(PIN);
Weiche.write(Winkel);
delay(200);
Weiche.detach();
}
//___________FUNKTION "W1"___________________
void W1(int Stellung) //0=gerade - 1=abbiegen
{ if(Stellung == 0) //Stellung gerade aus
{
Grad = 0; //Position in Grad
}
if(Stellung == 1) //Stellung abbiegend
{
Grad = 90; //Position in Grad
}
schalten(Weiche1, 2, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W2"___________________
void W2(int Stellung) //0=gerade - 1=abbiegen
{ if(Stellung == 0) //Stellung gerade aus
{
Grad = 0; //Position in Grad
}
if(Stellung == 1) //Stellung abbiegend
{
Grad = 90; //Position in Grad
}
schalten(Weiche2, 3, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W3"___________________
void W3(int Stellung) //0=gerade - 1=abbiegen
{ if(Stellung == 0) //Stellung gerade aus
{
Grad = 0; //Position in Grad
}
if(Stellung == 1) //Stellung abbiegend
{
Grad = 90; //Position in Grad
}
schalten(Weiche3, 2, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "W4"___________________
void W4(int Stellung) //0=gerade - 1=abbiegen
{ if(Stellung == 0) //Stellung gerade aus
{
Grad = 0; //Position in Grad
}
if(Stellung == 1) //Stellung abbiegend
{
Grad = 90; //Position in Grad
}
schalten(Weiche4, 3, Grad); //(Servo, Anschlusspin, Position)
}
//___________FUNKTION "Schranke"___________________
void S(int Stellung) //void S(int Stellung) //0=offen - 1=geschlossen
{
if(Stellung == 0) //Stellung gerade aus
{
Grad = 0; //Position in Grad
}
if(Stellung == 1) //Stellung abbiegend
{
Grad = 90; //Position in Grad
}
schalten(Schranke, 4, Grad); //(Servo, Anschlusspin, Position)
}
//_____________VOID LOOP______________________
void loop()
{
while(digitalRead(T_W) == LOW) //Start Weiche 1 zu 3
{
W1(1);
digitalWrite(Pin_LED3_Gruen, HIGH);
digitalWrite(Pin_LED8_Gruen, LOW);
W2(0);
digitalWrite(Pin_LED4_Rot, HIGH);
digitalWrite(Pin_LED7_Rot, LOW);
}
while(digitalRead(T_O) == LOW) //Start Weiche 1/2 und 3/4
{
W1(0);
digitalWrite(Pin_LED3_Gruen, HIGH);
digitalWrite(Pin_LED6_Gruen, HIGH);
W2(0);
digitalWrite(Pin_LED5_Gruen, LOW);
digitalWrite(Pin_LED8_Gruen, LOW);
}
while(digitalRead(T_G1) == LOW) //Start Weiche 3 zu 4
{
W2(1);
digitalWrite(Pin_LED2_Rot, LOW);
digitalWrite(Pin_LED9_Rot, HIGH);
W1(0);
digitalWrite(Pin_LED5_Gruen, LOW);
digitalWrite(Pin_LED6_Gruen, HIGH);
}
while(digitalRead(T_S) == LOW) //Start Schranke schließen
{
S(0);
}
while(digitalRead(T_S) == LOW) //Start Schranke öffnen
{
S(1);
}
// Blinkled
// BlinkWithoutDelay....
unsigned long currentMillis = millis();
if (BlinkValue == HIGH)
{
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(LED_BUILTIN, ledState);
}
}
else
digitalWrite(LED_BUILTIN, LOW);
// Ende BlinkWithoutDelay....
TasterValue = digitalRead (T_S); // Tasterstatus einlesen
if (status != TasterValue) // Aenderung des Taster ?
{
if (TasterValue) // geschaltet
{
BlinkValue = !BlinkValue; // ...und wird gewechselt.
}
status = TasterValue; // Status merken
}
}
ich hoffe es ist schick so... ich teste mit Wokwi