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 Kommentare zu „Methoden

  1. 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. 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. 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. 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. 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. 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. Oder gibts eine bessere Lösung?
    Möchte daß LEDs an 3 Ausgängen blinken, bis ein Schalter – Eingang HIGH ist.
    Robert

  10. 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. 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. 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. Pingback: Predrag Timotic
  15. Pingback: Google
  16. Pingback: CROs doing DMPK
  17. Pingback: useful reference
  18. Pingback: cum compilation
  19. Pingback: hovershoes
  20. Pingback: free phone cases
  21. Pingback: ninebot
  22. Pingback: 8188848400
  23. Pingback: christian dogma
  24. Pingback: car leasing
  25. Pingback: 안전놀이터
  26. Pingback: ira
  27. Pingback: Lego vergelijken
  28. Pingback: gifts for dad
  29. Pingback: Fast Start Amazon
  30. Pingback: FS 19 mods
  31. Pingback: MILF Porn Online
  32. Pingback: yoyomedia login
  33. Pingback: Balance game
  34. Pingback: lollicock review
  35. Pingback: digital music
  36. Pingback: best hotel offers
  37. Pingback: Google
  38. Pingback: mp3
  39. Pingback: Remote support
  40. Pingback: christian site
  41. Pingback: go to website
  42. Pingback: rottweiler puppies
  43. Pingback: Bachata
  44. Pingback: second life
  45. Pingback: celine
  46. Pingback: Drug stores Canada
  47. Pingback: electronics
  48. Pingback: top vr games
  49. Pingback: tema sull'amicizia
  50. Pingback: nail art courses
  51. Pingback: den ashura
  52. Pingback: سكس نيك
  53. Pingback: games for windows
  54. Pingback: camping
  55. Pingback: Prada
  56. Pingback: Valentino Garavani
  57. Pingback: Stella Mccartney
  58. Pingback: Deppner

Die Kommentare sind geschlossen.