Hi, ich habe einen simplen code für eine selbstgebaute Brikettpresse geschrieben.
Im Prinzip steuern zwei Endschalter die Vorwärts- und Rückwärtsbewegung eines Hydraulik-Kolben.
Jetzt würde ich gern einen Failsafe einbauen, dass im Falle eines Fehlers (Endschalter spricht nicht an oder Maschine klemmt) nicht die Hydraulik heiss läuft und sich selbst zerlegt.
Die Zeit die der Kolben von Schalter1 bis Schalter2 braucht ist ca. 5. Sekunden.
Ich würde gern programmieren, dass der Prozess stoppt (also die Pneumatik, die den Lauf des Kolben steuert, den Status "LOW" annimmt und dort bleibt) falls der Kolben nach 10 Sekunden immer noch nicht bei Schalter2 angekommen ist.
Kann mit das bitte jemand helfen. Ich komme da nicht weiter. Ich habe schon recherchiert und bin auf "millis" gestoßen, aber wie ich das in dem Fall anwende bekomme ich leider nicht hin.
Hier mein Code:
int pneumatik = 8; // Steuert Vor/Rücklauf des Kolbens
int schalter1 = 7; // Endschalter für Vorwärtslauf Kolben
int schalter2 = 4; // Endschalter für Rückwärtslauf Kolben
int mainschalter = 12; // Hauptschalter
int ruehrwerk = 10; // Schaltet Rührwerk im Spänebehälter an/aus
int SwitchStatus = 0;
void setup ()
{
pinMode(pneumatik, OUTPUT);
pinMode(ruehrwerk, OUTPUT);
pinMode(mainschalter, INPUT);
pinMode(schalter1, INPUT);
pinMode(schalter2, INPUT);
}
void loop () {
SwitchStatus=digitalRead(mainschalter); //Hauptschalter
if (SwitchStatus == LOW)
{
digitalWrite(ruehrwerk, LOW);
digitalWrite(pneumatik, LOW);
SwitchStatus=digitalRead(schalter1); //Vorwärtsfahrt Kolben
if (SwitchStatus == HIGH)
{
digitalWrite(pneumatik, HIGH);
delay(500);
}
SwitchStatus=digitalRead(schalter2); // Rückwärtsfahrt Kolben
if (SwitchStatus == HIGH)
{
digitalWrite(pneumatik, LOW);
delay(500);
}}
else {
digitalWrite(ruehrwerk, HIGH);
digitalWrite(pneumatik, HIGH);
} }