Komparator mit Einschaltverzögerung

Hallo!
Ich bin noch relativ unerfahren in sachen Arduino und einer meiner Codes für mein Duemilanove funktioniert nicht Richtig :confused:

Nun, das Board soll mithilfe 3 der 6 Analogen eingängen ab einer bestimmten angelegten spannung einen Digitalen Pin ein/aus schalten.
(Spannung am Analog-Pin niedrig → Dig.Pin nach kurzem “Delay” EIN schalten; Spannung am Analog-pin hoch → Dig.pin Sofort ausschalten, Das ganze dient zum laden von 3 Kondensator-Bänken.An den Spannungsteiler ist gedacht)

OHNE die einschaltpause sieht der Code sehr simpel aus, Funktioniert auch gut:

int capPin1 = 0;
int capVal1;
int capPin2 = 1;
int capVal2;
int capPin3 = 2;
int capVal3;
int TimerPin1 = 9;
int TimerPin2 = 8;
int TimerPin3 = 7;

void setup(){

pinMode(TimerPin1, OUTPUT);
pinMode(TimerPin2, OUTPUT);
pinMode(TimerPin3, OUTPUT);

}

void loop() {
{
{capVal1 = analogRead(capPin1);
capVal2 = analogRead(capPin2);
capVal3 = analogRead(capPin3);}

if (capVal1 >= 1015) {
digitalWrite(TimerPin1, LOW); }
{if (capVal1 <= 1015) {
digitalWrite(TimerPin1, HIGH); }
}

if (capVal2 >= 1015) {
digitalWrite(TimerPin2, LOW); }
{if (capVal2 <= 1015) {
digitalWrite(TimerPin2, HIGH); }
}

if (capVal3 >= 1015) {
digitalWrite(TimerPin3, LOW); }
{if (capVal3 <= 1015) {
digitalWrite(TimerPin3, HIGH); }
}
}
}

Wird nun aber ein “Delay”-Befehl eingefügt, Wartet das Board auch beim Ausschalten eine bestimmte zeit.

Mach ich etwas falsch?
Danke schonmal im Voraus für Antworten.
MfG

Wo hattest Du das Delay eingebaut?

Delay ist an sich in Deinem Fall nicht so gut, da der Arduino, während er wegen einer Spannung grade im Delay hängt, nicht auf die anderen Schwellen reagieren kann.

Besser wäre es, wenn Du Dir den Zeitpunkt merken würdest, an dem er umschalten soll. Von wegen "wenn beim letzten Durchlauf die Schwelle noch nicht erreicht war und es jetzt ist, dann setze eine Variable auf millis() + Verzögerung. Wenn diese Variable kleiner als millis(), dann schalten).

Hätte den Vorteil, dass Du auch noch andere Sachen parallel laufen lassen kannst, ohne Dich um zeitweilige Delays scheren zu müssen. :)

Mit dem Delay sah (ein abschnitt) des Codes so aus:

if (capVal1 >= 1015) {
digitalWrite(TimerPin1, LOW); }
{if (capVal1 <= 1015) {
delay(500);
digitalWrite(TimerPin1, HIGH); }
}

Also Das Delay sollte um 500 Millisekunden liegen.
Also wenn ich das richtig verstehe, Stoppt das Board während der “Delay” Funktion?

MfG

Ja, bei einem "delay()" wartet er so lange wie angegeben an genau dieser Stelle.

(Dem kannst Du dann höchstens mit einem Interrupts begegnen, aber das bringt Dir in dem Fall wirklich was...)

Uha Verwirrung :D Das der Microcontroller bei Delay wartet ist mir jetzt auf jeden fall schonmal klar. Doch wie kann ich es jetzt machen das er alles Parallel durchführt? Ein kleines beispiel wäre vllt. gut, so könnt ichs besser verstehen ;) MfG

Vielleicht was in der Richtung:

if (capVal1 >= 1015 && remember1 == HIGH) {
digitalWrite(TimerPin1, LOW);
remember1 = LOW;
rememberTime1 = 0;
}
if (capVal1 < 1015 && remember1 == LOW) {
remember1 = HIGH;
rememberTime1 = millis() + 500;
}
if (rememberTime1 != 0 && rememberTime1 < millis() && remember1 == HIGH) {
digitalWrite(TimerPin1, HIGH);
rememberTime1 = 0;
}

Ahhhh. So war das gemeint. Der schleier lichtet sich ;D Vielen Dank. Ich werds sofort mal ausprobieren. MfG