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.:

94 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);
    }

  13. Ardu_Noob

    Hi

    Hätte diese ‚Dinger‘ eher Funktionen genannt, habe Diese auch so benannt kennen gelernt.
    Aber warum nicht, jedem Tierchen, Sein Pläsierchen.

    @Alex
    Die ‚Methode‘ muß dem Programm bekannt sein, BEVOR Diese aufgerufen wird.
    Das kannst Du hinbekommen, indem Du Diese VOR setup() schreibst – lässt Dich aber den Überblick über das eigentliche Programm vollkommen verlieren.

    Deshalb meine Variante:
    VOR setup() kommt eine Art Bekanntmachung:
    void meine_methode(int a, intb);
    Durch den Strichpunkt ist die ‚Methode‘ nur bekannt gemacht und wird vom Compiler in den Tiefen Deines Quelltextes gesucht, irgendwo findet Der dann:
    void meine_methode[int a, int b){
    Also mit öffnender Klammer – hier wird die Methode ‚ganz normal‘ geschrieben, da void (also OHNE Rückgabewert) muß Da auch kein return rein.
    Wenn Du statt Dessen einen Wert zurück haben willst, dann mit return.
    Kleines Beispiel:

    int plus(byte a, byte b); //Funktion bekannt machen
    byte wert_A=0;wert_B=0; //Variablen erstellen

    void setup(){
    … setupcode … //Setup-Zeug
    Serial.begin(9600);
    }

    void loop(){
    wert_A++;
    wert_B++;
    int ergebnis=plus(wert_A, wert_B);
    Serial.print(wert_A);
    Serial.print(„+“);
    Serial.print(wert_B);
    Serial.print(„=“);
    Serial.println(ergebnis);
    }

    int plus(byte a, byte b){ //Funktion definieren
    … Zeug machen, wofür die Funktion gedacht ist …
    return (a+b);
    }

    Das sollte so lauffähig sein.
    Float sollte man, wenn nicht unbedingt benötigt, vermeiden – solange der Code aber in den µC rein passt und tut, was Er soll – passt’s.

  14. … [Trackback]

    […] Read More here|Read More|Find More Informations here|There you will find 31946 additional Informations|Informations to that Topic: arduino-tutorial.de/methoden/ […]

  15. … [Trackback]

    […] Find More here|Find More|Find More Infos here|Here you can find 99546 more Infos|Infos on that Topic: arduino-tutorial.de/methoden/ […]

  16. … [Trackback]

    […] Read More on|Read More|Read More Informations here|There you will find 84312 additional Informations|Infos on that Topic: arduino-tutorial.de/methoden/ […]

  17. … [Trackback]

    […] Read More on|Read More|Read More Informations here|There you will find 77315 additional Informations|Informations on that Topic: arduino-tutorial.de/methoden/ […]

  18. … [Trackback]

    […] Read More on|Read More|Find More Infos here|There you will find 36014 additional Infos|Infos to that Topic: arduino-tutorial.de/methoden/ […]

  19. christian dogma

    […]Wonderful story, reckoned we could combine a handful of unrelated data, nonetheless definitely really worth taking a appear, whoa did a single master about Mid East has got more problerms at the same time […]

  20. car leasing

    […]just beneath, are various entirely not connected web pages to ours, having said that, they’re certainly really worth going over[…]

  21. … [Trackback]

    […] Find More here|Find More|Read More Informations here|Here you can find 64903 additional Informations|Informations on that Topic: arduino-tutorial.de/methoden/ […]

  22. how to trade stocks

    […]very couple of websites that transpire to become comprehensive below, from our point of view are undoubtedly very well really worth checking out[…]

  23. ira

    […]Every as soon as in a though we opt for blogs that we study. Listed below would be the latest web sites that we decide on […]

  24. … [Trackback]

    […] Read More on|Read More|Read More Informations here|There you can find 10233 additional Informations|Infos to that Topic: arduino-tutorial.de/methoden/ […]

  25. Fast Start Amazon

    […]although sites we backlink to below are considerably not connected to ours, we really feel they’re really worth a go as a result of, so possess a look[…]

  26. FS 19 mods

    […]Every once in a although we decide on blogs that we study. Listed beneath would be the most recent web pages that we decide on […]

  27. east coast tasmania

    […]although sites we backlink to below are considerably not associated to ours, we really feel they are basically really worth a go by means of, so have a look[…]

  28. digital music

    […]that will be the end of this article. Here you’ll discover some web pages that we consider you’ll appreciate, just click the links over[…]

  29. Google

    Very couple of web sites that occur to become detailed below, from our point of view are undoubtedly well worth checking out.

  30. mp3

    […]please go to the web sites we stick to, like this a single, as it represents our picks through the web[…]

  31. Remote support

    […]very few sites that happen to be detailed below, from our point of view are undoubtedly very well really worth checking out[…]

  32. christian site

    […]Wonderful story, reckoned we could combine some unrelated information, nevertheless genuinely really worth taking a search, whoa did a single discover about Mid East has got far more problerms as well […]

  33. … [Trackback]

    […] Read More on|Read More|Read More Infos here|Here you can find 8383 more Infos|Infos to that Topic: arduino-tutorial.de/methoden/ […]

  34. rottweiler puppies

    […]although web sites we backlink to beneath are considerably not connected to ours, we really feel they are in fact worth a go by way of, so have a look[…]

  35. Bachata

    […]Wonderful story, reckoned we could combine a couple of unrelated information, nevertheless really worth taking a appear, whoa did a single master about Mid East has got more problerms too […]

  36. celine

    […]although web-sites we backlink to beneath are considerably not associated to ours, we feel they’re truly worth a go by, so possess a look[…]

  37. custom printed patches

    […]Wonderful story, reckoned we could combine a number of unrelated data, nevertheless actually worth taking a appear, whoa did 1 study about Mid East has got more problerms at the same time […]

  38. top vr games

    […]check below, are some totally unrelated internet sites to ours, nevertheless, they’re most trustworthy sources that we use[…]

  39. camping

    […]Every when in a when we select blogs that we study. Listed beneath are the most recent web sites that we pick […]

  40. Stella Mccartney

    […]very few internet sites that transpire to be comprehensive below, from our point of view are undoubtedly effectively worth checking out[…]

Comments are closed, but trackbacks and pingbacks are open.