Funktion aufrufen

Hallo zusammen,
im Rahmen meiner Abschlussarbeit habe ich mit dem Arduino MEGA 2560 einen Punktezähler für ein Tennismatch mit 2 Sätzen realisiert.
Das funktioniert soweit so gut aber, ich möchte zusätzlich mit einem Taster von den ersten Satz in den 2 Satz schalten um die gleichen Taster zu nutzen die ich beim ersten Satz genutzt habe um dementsprechend den Zähler mit + und - hoch und runter zu schalten.

Frage:
Was muss ich in meine Software schreiben um mit einem Taster von Funktion 1 in Funktion 2 zu schalten. Danke an alle die mir hierbei helfen wollen !

Warum sollen Sie das tun? Wenn der erste Set abgeschlossen ist, sollte die Software automatisch zum zweiten Set wechseln, oder?

1 Like

Das ist Vorgabe vom Kunden!

wieviele Taster gibt es denn insgesamt? Vielleicht macht es ja Sinn, einzelne Taster auf lang drücken abzufragen oder ob zwei bestimmte Taster gleichzeitig gedrückt werden sollen, um die zusätzliche Funktion zu aktivieren?
z.B. beide "+" drücken, um in den nächsten Satz zu wechseln und beide "-" drücken, um in den vorherigen Satz zu wechseln (da ja auch die Punkte lt. Beschreibung abwärts gezählt werden können)

Ja gut das wäre eine Alternative zu dem was ich hier gefragt habe. Aber die Frage war ja wie ich mit einem Taster von einer Funktion in die andere springen kann und anschließend wieder zurück. Also eigentlich bräuchte ich nur die Syntax.

Das kann man sehr gut mit einem Array aus Funktionspointer realisieren.

Probieren Sie es mal mit Einschalten und Ausschalten!

Ich glaube eher er meint, die Syntax das er zwischen beiden Funktionen über den Taster umschalten kann.

Ich verstehe nicht so ganz, warum man für einen zweiten Satz eine weitere „Funktion“ braucht. Eher einen zweiten Datensatz. Die Funktion für die „Tennis-Sätze“ sollte doch für jeden Satz identisch sein.

ach, es gibt diesen Umschalt-Taster also? Ich dachte, es ging um die Vermeidung eines zusätzlichen Tasters.. mea culpa!

Dann sollte es doch recht einfach sein:

  • den zusätzlichen Taster mit einer Toggle-Abfrage belegen
lastInputState = currentInputState;                                                                    
currentInputState = digitalRead(inputPin);                                                                     
if (lastInputState == HIGH && currentInputState == LOW)  {                                                                    
   if (state) {  Serial.println("Toggle off");  }
   else { Serial.println("Toggle on"); }                                                                    
   state = !state;  
}                                                                  
  • und jetzt in Abhängigkeit dazu (in diesem Beispiel `state´) der Funktion für + und - zuweisen, ob Punkte oder Sätze hoch- bzw runtergezählt werden. Ob man das jetzt am besten mit einem switch-case, mit arrays oder einer simplen if-abfrage bewerkstelligt, ist dem eigenen gusto überlassen :wink:

Hier ist ein Beispiel mit Funktionszeigern und der OneButton-Bibliothek
die grüne Taste ruft entweder Funktion1 oder Funktion2 auf und Sie wechseln durch Drücken der roten Taste

#include <OneButton.h>      //  http://www.mathertel.de/Arduino/OneButtonLibrary.aspx

const byte alternatePin   = A0;
const byte greenButtonPin =  2;

OneButton alternateButton(alternatePin);
OneButton greenButton(greenButtonPin);

void function1();
void function2();

void (*currentFunction)() = function1;

void function1() {
  Serial.println("In function1");
}

void function2() {
  Serial.println("In function2");
}

void greenButtonPressed() {
  currentFunction();
}

void alternate() {
  static bool callFunction1 = true;

  Serial.println("switching!");
  callFunction1 = !callFunction1;     // wechseln mit der Taste zwischen den beiden Funktionen
  currentFunction = callFunction1 ? function1 : function2;
}

void setup() {
  alternateButton.attachClick(alternate);
  greenButton.attachClick(greenButtonPressed);
  Serial.begin(115200);
}

void loop() {
  alternateButton.tick();
  greenButton.tick();
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.