Brauche Hilfe bei Auslagern der Funktionen in andere Datei

Also,es geht um folgendes,

ich habe einen Beispielcode inkl. Datei der Funktionen im Anhang.
ich brauche Hilfe bzw. ein Beispiel wie ich die Funktion beim gedrücktem Taster auslagern kann.
Am besten auch wie ich beides auslagern kann,taster und led wenns geht?

Wäre jemand Bitte so nett mir es zu erklären?

bedanke mich vorab

Mfg.
Hasutechno

Blink.rar (545 Bytes)

Du schreibst eine Funktion.

const int buttonPin = 2;     // taster pin
const int ledPin =  13;      // LED pin

int buttonState = 0;         // variable Taster status
void setup() {
  
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT);     
}

void loop(){  
  buttonState = digitalRead(buttonPin);     // zustand des Tasters auslesen
  if (buttonState == HIGH) {                // wenn Taster gedrückt       
    digitalWrite(ledPin, HIGH);             // LED einschalten
  }     else {    
    digitalWrite(ledPin, LOW);             // sonst led ausschalten
  }
}

zB:

byte buttonread (int pin)
 {
  return (digitalRead(pin));
 }

und statt

buttonState = digitalRead(buttonPin);     // zustand des Tasters auslesen

schreibst Du dann

buttonState = buttonread (buttonPin);

Grüße Uwe

ok aber versteh das immer noch nicht,sorry :disappointed_relieved:

Also:

const int buttonPin = 2;     //Taster pin
const int ledPin =  13;      // LED pin

int buttonState = 0;         // variable Taster status
void setup() {
  
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT);     
}

void loop(){  
  buttonState = digitalRead(buttonPin);     // zustand des Tasters auslesen

}

Also die Zeile:

buttonState = buttonread (buttonPin);

das ist mir nun klar,aber wohin soll ich denn die zeile:

byte buttonread (int pin)
 {
  return (digitalRead(pin));
 }

kopieren. Und noch wichtiger was kommt dann in die Datei Subfunktionen und Tasterabfrage rein?

Sorry möchte den code verstehen als Anfänger....

Mfg. Haustechno

Funktionen werden außerhalb von anderen Funktionen definiert. Also zB

#include
#define
variablendefinitionen
meine fuktion1(){...}
setup(){...}
loop(){...}
meinefunktion2(){...}

Grüße Uwe

Also, ist das dann demnach richtig?

const int buttonPin = 2;     //Taster pin
const int ledPin =  13;      // LED pin

int buttonState = 0;         // variable Taster status

meinefunktion1(){...}

void setup() {
  
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT);     
}
void loop(){  
  buttonState = digitalRead(buttonPin);     // zustand des Tasters auslesen

}

Und was kommt zwischen den klammern rein {...} ?

Und was kommt zwischen den klammern rein {...} ?

Na, das was die Funktion machen soll.

Vielleicht noch eine Ergänzung:

wenn du z.B.

byte meineFunktion2() {
   byte ergebnis;
   // ... 
   ergebnis = ... 
   return ergebnis;
}

In einer anderen Datei haben willst, oder diese Definition erst später kommt als da wo sie verwendet wird, dann muss vor der Verwendung eine Deklaration zu finden sein:

byte meineFunktion2(); // Deklaration, ohne { }

void loop() { byte x; // ... x = meineFunktion2(); // Verwendung }

Diese Deklarationen sind oft in include Dateien zu finden, muss aber nicht sein ...

Und, falls es dich verwirrt, Funktionsdeklaration und Definition müssen den Ergebnis-Datentyp enthalten, also

void setup(); void meineFunktion1() { } // das ist eine Funktion, die nichts macht

Haustechno: Und was kommt zwischen den klammern rein {...} ?

Eben das, was deine Funktion dann später können soll. Das können wir dir doch nicht sagen, das entscheidest du selbst... Allerdings muss du deine Funktion auch irgendwo in der loop mal aufrufen, sonst nützt sie dir ja nichts.

Vielen Dank an alle, ich werde damit rumspielen und hoffentlich was draus lernen :grin:

Mfg. Haustechno

Haustechno: Vielen Dank an alle, ich werde damit rumspielen und hoffentlich was draus lernen :grin:

Mfg. Haustechno

Wir sind immer für Fragen da.

Also mit Hilfe des Forums hab ich nun folgendes hinbekommen.

Im hauptcode ist das :

const int buttonPinGross = 2;                 // taster pin Gross
const int buttonPinKlein = 3;                 // taster pin Klein

const int ledPinGross = 13;                       // LED pin
const int ledPinKlein = 12;

int buttonStateGross = 0;                     // variable Taster status
int buttonStateKlein = 0;                     // variable Taster status

void setup() {
  
  pinMode(ledPinGross, OUTPUT); 
  pinMode(ledPinKlein, OUTPUT); 
  
  pinMode(buttonPinGross, INPUT_PULLUP); 
  pinMode(buttonPinKlein, INPUT_PULLUP);
}

void loop(){
buttonStateGross = digitalRead(buttonPinGross);        // zustand des Tasters Gross auslesen
buttonStateKlein = digitalRead(buttonPinKlein);        // zustand des Tasters Klein auslesen

LEDtestGross();                                       // Unterprogramm fuer Gross Ausgaenge aufrufen
LEDtestKlein();                                       // Unterprogramm fuer Klein Ausgaenge aufrufen
}

In der Datei Sufunktionen dann folgendes:

//_________Funktion Gross 
void LEDtestGross()
{
  if (buttonStateGross == LOW) {                // wenn Taster gedrückt
       
    digitalWrite(ledPinGross, HIGH);             // LED einschalten
    delay(1000);
    digitalWrite(ledPinGross, LOW); 
   delay(1000); 
    digitalWrite(ledPinGross, HIGH);  
  }     
  else {
    
  digitalWrite(ledPinGross, LOW);             // sonst led ausschalten
   }
 }
   
  //______Funktion Klein
void LEDtestKlein()
{
  if (buttonStateKlein == LOW) {                // wenn Taster gedrückt
       
     digitalWrite(ledPinKlein, HIGH);             // LED einschalten
    delay(500);
    digitalWrite(ledPinKlein, LOW); 
   delay(500); 
    digitalWrite(ledPinKlein, HIGH); 
  }     
  else {
    
  digitalWrite(ledPinKlein, LOW);             // sonst led ausschalten
  }
}

Somit sind die Funktionen groß und klein ausgelagert und funktioniert. Aber ist das auch so vom code her ok?

Mfg. Haustechno

Gut. Vom Kode her Ok, Du fängst ja gerade an. ;) ;)

Jetzt versuch nur mehr eine Funktion zu haben und Du übergibst als Ardument den Zustand des Tasters und das dazugehöhrige Pin des LEDs und die Zeit.

Grüße Uwe

Hmm , ok heißt das es noch nicht gut ist,oder ? :disappointed_relieved:

Verstehe deine Antwort nicht ganz,sorry

Mfg. Haustechno

Als Anfänger ist das Gut, es funktioniert ja. Grüße Uwe

Was Uwe meint:
Du könntest auch eine einzige Funktion schreiben:

void LedTest(byte ledPin, boolean State, unsigned int blinkTime) ;

und die zwei mal aufrufen:

LedTest(ledPinGross, buttonStateGross, 1000);
LedTest(ledPinKlein, buttonStateKlein, 500);

Das hätte zwei Vorteile:

  • Die buttonState Variablen könnten lokal sein statt global
  • Der Code wäre im Endeffekt etwas kleiner

Aber Uwe hat recht: Wenn es funktioniert, ist es gut.
Dein Arduino hat den Speicher sowieso, und braucht mit dem “besseren” Sketch auch nicht weniger Strom.
Und als Demo zum Auslagern von Funktionen in eine andere Datei zeigt es eben, dass eine Zusatz-Datei mehrere Funktionen enthalten kann.

Edit: oops, du hast 2 Blink-Zeiten, das hatte ich übersehen.
Viel Spass beim Schreiben der Funktion LedTest :wink: