Funktion in Dauerschleife

Moin.

Ich hätte eine Frage zu Funktionen.

Kann man die so schreiben, dass die solange wiederholt wird, bis man ein return erzwingt?

Heißt, ich möchte das z.B. eine LED solange blinkt, bis ich einen Taster betätige!

Soweit ich weiß, springt die Arduino jedes mal zurück, auch wenn kein return gesetzt ist!

Oder muss ich das mit einer do....while-Schleife, bzw. while-Schleife machen?

Besten Dank schon mal im voraus

Wieso ein return erzwingen.
Die loop wiederholt sich ständig, also nur eine Abfrage in die Loop und fertig.

Pseudocode:

-Taster abfragen
-wenn nicht gedrückt, dann Led jede Sekunde invertieren, ansonsten nichts machen

Ob man das mit "if" oder mit "do - while" oder mit "switch / case" oder anderweitig umsetzt, ist für die Logik egal.
Hauptsache, der Code enthält kein "delay".

Gruß,

Helmuth

Ja, das die Loop sich wiederholt ist mir schon klar

mir geht es mehr darum

#define taster 10

void Setup(){

pinMode(taster, INPUT);
digitalWrite(taster, HIGH);


}

void loop(){

//irgendwas machen

funktion();

//irgendwas machen

}

funktion(){


//irgendwas machen

if(!digitalRead(taster)){

return;

}

}

Also, es geht mir darum, dass ich in der Funktion funktion() bleibe und erst bei betätigen des Tasters zurück in den loop() gesprungen wird!!!!!

Ich verstehe weder Deinen Code, noch den Satz mit den 5 Ausrufezeichen.

Liegt Deiner Frage ein reales Problem zugrunde, oder geht es hier um Deine Hausaufgaben?

Als erstes Mal steht eine Funktion nicht in der loop, die kannst du hinschreiben wo du willst.
Und trotzdem verstehe ich dich nicht, es ist völlig unlogisch, in einer Funktion zu verweilen
bis man z.B. einen Taster drückt.

Wenn du unbedingt eine Funktion brauchst dann bau in der loop eine Abfrage ein und spring
immer wieder in die Funktion bis eben dein Taster gedrückt wird und dann nicht mehr

Das hier ist auch Müll:

pinMode(taster, INPUT);
digitalWrite(taster, HIGH);

Meine Kristallkugel sagt: Du möchtest Goto-Spaghetticode schreiben und dafür return missbrauchen. Stimmt das? Wenn ja, warum?

Normalerweise nimmt man return, um einen Funktionswert zurückzugeben.

Was hast Du wirklich vor?

Warum ist

inMode(taster,INPUT);

digitalWrite(taster,HIGH);

Müll?

ok,

inMode(taster,INPUT);

kann ich weglassen!
Aber den zweiten Teil brauche ich für die Pullup-Widerstände.

Aber den zweiten Teil brauche ich für die Pullup-Widerstände.

? :fearful:

Zum Aktivieren der internen Pullups: Tutorial

Du brauchst:

pinMode( taster, INPUT_PULLUP);

"There are 20K pullup resistors built into the Atmega chip that can be accessed from software. These built-in pullup resistors are accessed by setting the pinMode() as INPUT_PULLUP. This effectively inverts the behavior of the INPUT mode, where HIGH means the sensor is off, and LOW means the sensor is on. "

Aduadu:
Also, es geht mir darum, dass ich in der Funktion funktion() bleibe und erst bei betätigen des Tasters zurück in den loop() gesprungen wird!!!!!

Gerade das macht man nicht. Gewöhne es dir am besten gar nicht erst an.

Lasse die Funktion einen bool zurückgeben. Dann gebe true zurück wenn das Ereignis eingetreten ist und false wenn nicht. Dann kannst du in loop() darauf abfragen und dann etwas machen wenn true zurück kommt. Aber während es false ist kannst du noch andere Dinge erledigen!

Und Müll ist das mit INPUT und HIGH nicht unbedingt. Es gab mal Zeiten wo es kein INPUT_PULLUP gab und da wurde das genau so gemacht.

Es gab mal Zeiten wo es kein INPUT_PULLUP gab und da wurde das genau so gemacht.

Wieder was gelernt. Asche auf mein Haupt.

Beim Arduino kann man

pinMode(taster, INPUT_PULLUP);

oder

pinMode(taster,INPUT);
digitalWrite(taster,HIGH);

alternativ verwenden. In beiden Fällen werden die internen Pullup-Widerstände aktiviert.

"INPUT_PULLUP" gibt es "erst" seit Arduino IDE 1 irgendwas, ist also "relativ neu" :slight_smile:

Edit: OK, da waren andere schneller :slight_smile:

das mit den pinMode( taster, INPUT_PULLUP);kannte ich auch noch nicht!

ok, dann werde ich es mit der Funktion mal mit dem bool-Werten versuchen. Dann gibt es auch nicht so nen Spagetti-Code :slight_smile: