Schalter nur einmal abfragen

Hallo,

Ich wollte mal fragen, ob es möglich ist, einen Schalter nur einmal abzufragen. Quasi im Setup.

Und je nach Stellung ( High oder Low), dann unterschiedliche loops bzw. Voids auszuführen.

Es reicht, wenn der Schalter nur beim Start geprüft wird. Und somit die Loop nicht verlangsamt.

Danke im Vorraus

Markus1995

Ja das geht.

Zuvor muss aber bereits im Setup der entsprechende Eingang definiert sein.
Den Zustand der Schalterstellung in einer (globalen) Variablen im Setup merken.
Dann im Loop auswerten.

Gruß
Peter

Ok danke,

Also im Grund dann ja nur z.b. das digitalread ins setup.

Probier ich nach der Arbeit mal.

Gruß
Markus

Markus1995:
Ok danke,

Also im Grund dann ja nur z.b. das digitalread ins setup.

Probier ich nach der Arbeit mal.

Gruß
Markus

Ja.
Nur vor dem digitalread muss der entsprechende Eingang bereits als input definiert sein.

Gruß
Peter

Markus1995:
Hallo,

Ich wollte mal fragen, ob es möglich ist, einen Schalter nur einmal abzufragen. Quasi im Setup.

Und je nach Stellung ( High oder Low), dann unterschiedliche loops bzw. Voids auszuführen.

Es reicht, wenn der Schalter nur beim Start geprüft wird. Und somit die Loop nicht verlangsamt.

Dazu fragst Du den Schalter im setup ab und rufst dann je nachdem eine Deiner beiden Loopfunktionen in einer Endlosschleife immer wieder und wieder auf.

void setup() {                
  if (digitalRead(2)==LOW) while(1) loopLow();
  else while(1) loopHigh();
}

Die eigentliche "loop" Funktion bleibt dann leer und wird nicht verwendet.

Zwischen zwei loop() aufrufen kann evtl. der SerialEvent Handler laufen.
bzw. das geht dann nicht, wenn dein sketch nie aus setup() raus kommt.

vgl. Arduino main

        setup();

	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}

Das Verfahren, dass ein Taster eine ganz andere Funktion hat, wenn er während des Einschaltens gedrückt ist, ist sehr beliebt für einen Testmodus o.ä.

Evtl. kann man da eine Kombination machen

void setup() {                
  pinMode(2, INPUT_PULLUP); 
  if (digitalRead(2)==LOW) while(1) testloop();
}

void loop()
{ 
    // Normal-Betrieb
    boolean buttonPressed = (digitalRead(2) == LOW); // nun wirkt der Taster ganz anders 
}