Methoden

Methoden sind Programmanweisungsblöcke. Wiederkehrende Abfolgen von Befehlen können in Methoden sinnvoll strukturiert werden. Parameter können an Methoden übergeben und Werte zurückgeliefert werden.

Eine einfache Methode könnte so aussehen:

Nun kann man die Methode z.B. aus dem void loop() aufrufen mit blinken();.

Parameter lassen sich auch an Methoden übergeben. Die Struktur sieht so aus:

Hierbei wird der Parameter thePin und dauer übergeben. Der Aufruf kann dann so erfolgen: blinken(3,1000);.

Man kann auch einen Wert von der Methode zurück geben lassen. Dafür verwendet man anstelle von void den Variablentyp, den das Ergebnis haben wird und liefert es am Ende des Anweisungsblockes mit dem Schlüsselwort return an die Methode.

Der Aufruf wäre z.B.:

13 Comments

  1. Calim

    Hallo,

    ich vermute du meinst:

    void blinken(int thePin, int dauer){
    digitalWrite(thePin, HIGH);
    delay(dauer);
    digitalWrite(thePin, LOW);
    delay(dauer);
    }

    Schönes Tutorial. Freue mich schon auf das Päckchen mit dem Arduino. :-)

    Grüße,
    calim

  2. jörg

    Hallo,

    ichdenke:

    void blinken(int thePin, int dauer){
    digitalWrite(thePin, HIGH);
    digitalWrite(dauer, LOW);
    }

    mich würde bei der Anleitung interessieren, od die Schleife nur ein Mal durchlaufen wird.
    Muss ich das mit Return erzwingen?

    Grüße,
    Jörg

  3. The backend part of your company supports these profit centers.
    Then consider yourself one of the few, true internet marketers.
    It’s probably some mix of the two, so I have to
    give him props for not going too far in either direction.

  4. Manne

    Hallole,
    ich hatte mal ne Frage. Wie sieht das ganze aus wenn ich einen Paarmeter übergeben möchte und auch einen zurückbekommen möchte.
    Gruß
    Manfred

  5. Tom

    Hallo Jörg
    void blinken(int thePin, int dauer){
    digitalWrite(thePin, HIGH);
    digitalWrite(dauer, LOW);
    }
    ist falsch, da du ja nicht den Pin (3000 haste ja eh nicht ) änder möchtest.

    und Manne
    Wenn du etwas übergeben und zurück bekommen möchtest dann versuch doch mal
    float( int Übergabe,float was)
    .
    .
    return ErgebnisZurück
    Habe leider keinen Aduino ( noch nicht )

  6. Also ich würde ja die nachfolgende Methode so ändern:

    statt:
    void blinken(int thePin, int dauer){
    digitalWrite(thePin, HIGH);
    delay(500);
    digitalWrite(thePin, LOW);
    delay(500);
    }

    eben:
    void blinken(int thePin, int dauer){
    digitalWrite(thePin, HIGH);
    delay(dauer);
    digitalWrite(thePin, LOW);
    delay(dauer);
    }

    ansonsten ist die delay Zeit dauerhaft 500ms.

    Ansonsten gutes Beispiel.

  7. Tim Sparla

    Hallo,
    dieser Moment wenn man vier/fünf Stunden an einem Programm schreibt und dann einen von tausenden Befehlen nicht kennt. Ich hatte diesesmal vergessen, wie ich einen Void-Teil im Hauptprogramm öffne. Naja, dank dir weiß ichs wieder.
    Vielen Dank für das Tutorial.

    PS: Hab mehr gelernt als ich brauchte ;)

  8. Robert

    Hallo!
    Möchte mit einer Methode etwas abarbeiten, und mit einer if Anweisung eine Bedingung abfragen, wenn die erfüllt ist, mittels if und return wieder zurückkehren.
    Mein erster Code, zum testen der Methode:
    void starten() {
    digitalWrite(LEDor, HIGH);
    delay(2000);
    digitalWrite(LEDor, LOW);
    delay(5000);
    return;
    }

    void loop() {

    if (digitalRead (Tart)== HIGH)
    { // Taster Betrieb
    while (1) {
    starten();
    digitalWrite(Motor, HIGH);
    delay(1000);
    digitalWrite(Motor, LOW);
    delay(3000);

    }
    }
    Dabei kommt diese Fehlermeldung:
    a function-definition is not allowed here before ‚{‚ token
    schon mal ein Danke
    Robert

  9. Robert

    Oder gibts eine bessere Lösung?
    Möchte daß LEDs an 3 Ausgängen blinken, bis ein Schalter – Eingang HIGH ist.
    Robert

  10. Tihomas

    Hallo Robert
    Das ist RETURN is unsinnig da mit } eh zum Ausgang gesprungen wird .
    und wenn du einen Fehler mit } hast oder mit ) dann weil davor eins Fehlt oder zuviel ist also am besten den ganzen code Posten nicht nur einen Ausschnitt
    Bei mir lief das Fehler frei

    const int LEDor =13;
    const int Tart =4;
    const int Motor =8;
    void setup() {
    // put your setup code here, to run once:
    pinMode(LEDor, OUTPUT);
    pinMode(Motor, OUTPUT);
    pinMode(Tart, INPUT);
    }
    void starten() {
    digitalWrite(LEDor, HIGH);
    delay(2000);
    digitalWrite(LEDor, LOW);
    delay(5000);
    return;
    }

    void loop() {

    if (digitalRead (Tart)== HIGH)
    { // Taster Betrieb
    while (1) {
    starten();
    digitalWrite(Motor, HIGH);
    delay(1000);
    digitalWrite(Motor, LOW);
    delay(3000);

    }}}

  11. Danke, mal.
    Hier der Code:
    void setup() {
    #define LEDws 3
    #define Motor 4
    #define LEDor 5
    #define LEDbl 6
    #define LEDrt 7
    #define LEDgn 8
    #define Tstart 11
    #define Tspirale 12
    #define Tart 13

    Serial.begin (9600);
    pinMode(LEDws, OUTPUT);
    pinMode(Motor, OUTPUT);
    pinMode(LEDor, OUTPUT);
    pinMode(LEDbl, OUTPUT);
    pinMode(LEDrt, OUTPUT);
    pinMode(LEDgn, OUTPUT);
    digitalWrite(Tstart, INPUT);
    digitalWrite(Tspirale, INPUT);
    digitalWrite(Tart, INPUT);
    digitalWrite(Tstart, HIGH);
    digitalWrite(Tspirale, HIGH);
    digitalWrite(Tart, HIGH);
    }
    void starten(int a) {
    digitalWrite(LEDbl, HIGH);
    for (int a=0; a<1000; a++) {
    if (digitalRead(Tstart) == HIGH) { digitalWrite(LEDbl, LOW); return; }
    }
    digitalWrite(LEDbl, LOW);
    delay(1000);
    digitalWrite(LEDbl, HIGH);
    for (int a=0; a<5000; a++) {
    if (digitalRead(Tstart) == HIGH) { digitalWrite(LEDbl, LOW); return; }
    }
    digitalWrite(LEDbl, LOW);
    return;
    }

    void loop() {

    if (digitalRead (Tart)== HIGH)
    { // Taster Betrieb
    while (1) {
    digitalWrite(LEDor, HIGH);
    digitalWrite(LEDws, HIGH);
    starten(5);
    digitalWrite(Motor, HIGH);
    delay(1000);
    digitalWrite(Motor, LOW);
    delay(3000);
    } }
    Mit der Funktion habs mal geschafft, meinen eigentlichen Zweck noch nicht. Aber es muss glaub ich nur mit if Anweisung einfacher gehen. Oder gibts noch was einfacheres?

  12. Tihomas

    Also bei kurezem überschauen Fehler 1 ist void starten (int a)
    Void ist leer und int ist ein wert richtig wäre es dann
    int starten(a)
    im Loop teil fehlt als letztes noch eine geschwungene Klammer } da nur 2 geschlossen sind
    warum Serial ?? du hast ja keine Ausgabe !
    und was soll das ??
    digitalWrite(Tstart, INPUT);
    digitalWrite(Tspirale, INPUT);
    digitalWrite(Tart, INPUT); ?!? da würde ich mal digitalwrite durch pinmode ersetzten

    dann wihle (1) 1 is immer 1 also in der Schleife gefangen

    mit starten versuchst du a zuübergeben aber in der nächsten Zeile setzt du a auf 0
    bei nt geht der Wertebereich aber nur bis -+255 also müsste da float genommen werden

    aber durchsteigen tue ich danicht

    +++++++++++++++++++++++++++++++++
    float a,aa;

    void setup()
    {
    #define LEDws 3
    #define Motor 4
    #define LEDor 5
    #define LEDbl 6
    #define LEDrt 7
    #define LEDgn 8
    #define Tstart 11
    #define Tspirale 12
    #define Tart 13

    pinMode(LEDws, OUTPUT);
    pinMode(Motor, OUTPUT);
    pinMode(LEDor, OUTPUT);
    pinMode(LEDbl, OUTPUT);
    pinMode(LEDrt, OUTPUT);
    pinMode(LEDgn, OUTPUT);
    pinMode(Tstart, INPUT);
    pinMode (Tspirale, INPUT);
    pinMode(Tart, INPUT);
    digitalWrite(Tstart, HIGH);
    digitalWrite(Tspirale, HIGH);
    digitalWrite(Tart, HIGH);
    }

    void loop() {

    if (digitalRead (Tart)== HIGH)
    { // Taster Betrieb

    digitalWrite(LEDor, HIGH);
    digitalWrite(LEDws, HIGH);
    starten();
    digitalWrite(Motor, HIGH);
    delay(1000);
    digitalWrite(Motor, LOW);
    delay(3000);
    }}

    void starten()
    {float a;
    digitalWrite(LEDbl, HIGH);
    for ( a=0; a<1000; a++) {
    if (digitalRead(Tstart) == HIGH) { digitalWrite(LEDbl, LOW);return; }
    }
    digitalWrite(LEDbl, LOW);
    delay(1000);
    digitalWrite(LEDbl, HIGH);
    for ( a=0; a<5000; a++) {
    if (digitalRead(Tstart) == HIGH) { digitalWrite(LEDbl, LOW); return;}
    }
    digitalWrite(LEDbl, LOW);
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.