Ich habe noch nicht all zu viel Erfahrung mit dem Arduino.
Jedoch habe ich mir eine automatische absaug Einrichtung für meine Werkstatt gebaut die Folgendes Können muss: Stromfluss erkennen -> Staubsauger einschalten mit Nachlauf und auch manuell bedienbar sein(sprich ein, Aus , Auto). Gebaut ist alles schon ein Stromsensor der mir die werte liefert, ein Taster, zwei LEDs zur Identifizierung des Modus sowie ein 5V Relay und ein 12 Volt Schütz, dass mit dem Relay verbunden ist, zur Sicherheit, solch kleinen China teilen vertrau ich dann doch keine 8 Ampere an.
Auf jeden Fall hab ich schon einen alten Code Geschrieben der Anfangs Funktioniert hat doch dann machte was er wollte. Der neue funktioniert schon besser doch ich habe leider keinen Plan wie ich die Nachlauf zeit richtig integrieren soll.
Ebenfalls wäre es praktisch dass wenn während der Nachlauf zeit noch mal Strom Fließt das relay aktiviert bleibt.
Aber hier erst mal der Code:
int analogPin = A3; // Pin, der gelesen werden soll
int currentReading = 0; // Variable, die den gelesenen Wert speichert
int maxReading;
int minReading;
int offset;
int relayPin = 7;
int i;
int ZeitSpeicher;
bool ZeitGespeichert = true;
int Taster= 4; // Taster Pin
int gedrueckt = 0;
int tasterstatus;
int modus= 1; //Aus=1, An=2, Auto =3
bool RelayStatus=false; // false = aus , True = an
int ledAn = 1;
int ledAuto = 2;
int Nachlauf= 10000; //in milisec
int Stromstaerke = 250;
void setup() {
Serial.begin(9600);
pinMode(relayPin, OUTPUT);
pinMode(ledAn, OUTPUT);
pinMode(ledAuto, OUTPUT);
digitalWrite(ledAn, LOW);
digitalWrite(ledAuto, LOW);
digitalWrite(relayPin, HIGH);
}
void loop() {
tasterstatus=digitalRead(Taster);
if(gedrueckt == 1){
if(tasterstatus == LOW){ // Taster Gedrückt gehalten?
gedrueckt = 0;}}
else{
if(tasterstatus == HIGH){
gedrueckt=1;
if(modus == 1){ modus = 2;
RelayStatus = true; // An
Serial.println("an");
digitalWrite(ledAn, HIGH);
digitalWrite(ledAuto, LOW);}
else if(modus == 3){ modus = 1;
RelayStatus = false; // Aus
Serial.println("aus");
digitalWrite(ledAn, LOW);
digitalWrite(ledAuto, LOW);}
else if(modus == 2){ modus = 3;
RelayStatus = false; // Auto
Serial.println("Auto:");
digitalWrite(ledAuto, HIGH);}}}
//Automatik Strom erkennung
if(modus == 3){
maxReading = 0;
minReading = 1024;
for(i=0; i<=99; ++i){
delay(2);
currentReading = analogRead(analogPin);
if (currentReading > maxReading) maxReading = currentReading;
if (currentReading < minReading) minReading = currentReading;
}
offset = maxReading - minReading;
//abfrage
if(offset > Stromstaerke){
Serial.println("Automatik An");
//zeit Gespeichert?
if(ZeitGespeichert){
ZeitSpeicher= millis();
ZeitGespeichert = false;}
//Nachlauf
if(ZeitSpeicher + Nachlauf > millis()){
//ab hier wusste ich einfach nicht mehr Weiter, Vieleicht is aber das vorherige ebenfalls falsch.
}
}}
if(RelayStatus){digitalWrite(relayPin, LOW);}
else{digitalWrite(relayPin, HIGH);}
Wo ich Schwierigkeiten habe steht im Code.
Aber noch mal zusammengefasst: Das Relay soll 10 Sekunden Nachlaufen und bitte nicht mit delay(); (die knöpfe müssen ja immerhin auch noch funktionieren) und es wäre toll wenn das Programm vorab erkennt ob es das Relay noch weiter aktiviert halten soll wenn es zwischen drin zb. einen Stromstoß gab.
Wenn mir jemand etwas auf die Sprünge helfen Könnte
würde ich mich sehr freuen.