Millis () in Verbindung mit der If-Abfrage

Hallo zusammen,

ich habe ein Problem mit der Funktion millis() in Verbindung mit der If Abfrage. Ich hoffe sehr dass mir einer von euch helfen kann.

Problemstellung:
Es sollen, nachdem ein Schalter betätigt wurde, vier Relais unterschiedlich lange geschaltet werden. Der erste Ansatz über delay hatte nicht geklappt weswegen ich mir das Programm Blinkwithoutdelay näher angeschaut habe.

Angefangen habe ich dann erstmal mit einem Relais und daraufhin ein kleines Programm geschrieben.
Als erstes soll der Schalter abgefragt werden und anschließend das Relais geschaltet werden.
Mit der Funktion Millis soll das Relais nach einer Sekunde ausgeschaltet werden. Mein Ziel sollte eigentlich sein, dass nur nachdem der Schalter betätigt wurde das Relais geschaltet wird. Allerdings wird die If Abfrage durchgeführt obwohl der Schalter gar nicht betätigt wurde.

Ich muss dazusagen dass ich noch ein blutiger Anfänger bin!

Vielen Dank im voraus
Gruß Max

const int relaisPin = 24;
const int schalterPin = 7;
unsigned long previousMillis = 0;
const long intervall = 1000;

void setup() {
  pinMode (motorPin, OUTPUT);
  pinMode (schalterPin, INPUT);
}

void loop() {

  if (digitalRead(schalterPin) == LOW) {
    digitalWrite (relaisPin, LOW);

    unsigned long currentMillis = millis ();
    if (currentMillis - previousMillis >= intervall) {
      previousMillis = currentMillis;
      digitalWrite (relaisPin, HIGH);
    }

  }
}

Ja, das steht auch so in deinem Code!
Bei jedem Loop() Durchlauf kommt die If Abfrage an die Reihe.

evtl. hilft dir ja sowas weiter:

Der Code wird nicht kompiliert...

Ich denke, es könnte einfacher sein: millis_single_delay.ino.

Hallo
soll das Relais "blinken" oder nach der betätigung des Tasters verzögert schalten?
Schalten? Ein- oder Ausschalten ?
Was macht der Motorpin und welchen Wert hat die Konstante?

Zeichne ein Timingdiagram, damit die Abhängigkeiten ersichtlich werden.

Meinst du mich?

Der motorPin ist leider ein Schreibfehler und soll relaisPin heißen.
Das Relais soll 1 Sekunde schalten und danach aus bleiben und nicht wieder schalten.
Das Relais schaltet bei LOW.

Nein @ max3514 Code

und die anderen drei Relais ?

const int relaisPin = 24;
const int schalterPin = 7;
unsigned long lastMillis = 0;
const unsigned long intervall = 1000;
boolean einmal = false;

void setup() {
  pinMode (relaisPin, OUTPUT);
  pinMode (schalterPin, INPUT);
}

void loop()
{

  if (digitalRead(schalterPin) == LOW && digitalRead(relaisPin) == HIGH && einmal == false)
  {
    digitalWrite (relaisPin, LOW);
    lastMillis = millis();
  }
  if (millis() - lastMillis >= intervall && digitalRead(relaisPin)== LOW && einmal == false) {
    digitalWrite (relaisPin, HIGH);
    einmal = true;
  }
}

?

sollen quasi nach dem gleichen Prinzip schalten aber unabhängig von einander.
Hätte den Code für das erste Relais dann einfach kopiert und angepasst.

ich werde nachher einen Blick in meine Sketchkiste werden, um zu gucken was man an diese Standardaufgabenstellung schnell anpassen kann.
Bist du ein bißchen im C++ Syntax zuhause ?

Ich brauche zwar etwas um es nachvollziehen zu können aber an sich verstehe ich es dann.
Aber vielen Dank schonmal!

Das hilft mir auf jeden Fall schon mal sehr weiter!
Danke!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.