INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Library - Variable in Memberfunktion
30.12.2015, 18:56
Beitrag #1
Library - Variable in Memberfunktion
Hallo!

Ich wollte letztens eine Library erstellen für verschiedene Buttonaktionen. Die Library soll mit mehreren Buttons gleichzeit funktionieren und je nach Code Doppelklicks, langer Klick etc. auslesen (Ich weiß es gibt bereits eine ähnlich Library dafür Big Grin ).

Ich habe aber das Problem, dass ich gerne lokale Variablen in den Funktionen habe, z.B. timer, state, etc. Nun diese lokale Variablen gehören aber anscheinend nicht zu der class. Wenn ich nun 2 Library-classes definiere überschneiden sich die Funktionsvariablen. Ich hoffe mit diesem Beispiel kann ich es klarer ausdrücken:

test.h:
Code:
#ifndef test_H
#define test_H

#include "Arduino.h"

class test {
  /* Klasse definieren */
  public:
    int button;
    int led;

    test(int buttonPin, int ledPin);
    void LED();

    /* Ungewollte Ausführung, was jedoch möglich wäre:
     *  unsigned long timerLED, timerDO;
     *  bool stateLED, stateDO;
     */
};

#endif

test.cpp:
Code:
#include "test.h"
#include "arduino.h"

test::test(int buttonPin, int ledPin) {
  button = buttonPin;
  led = ledPin;
  pinMode(led, 1);
}

void test::LED() {
  static unsigned long timer; /* << Diese Zeilen sind mein Problem */
  static bool state = 0;      /* << Jede Funktion soll diese Variablen besitzen aber sollen nicht übergreifend sein (--> lokale Var.) */

  /* Beispiels-Anwendung: LED soll 1s nach Klick an gehen. 2. Klick für Aus */
  if (digitalRead(button) && !state) {
    timer = millis();
    state = 1;
  }
  else if (!digitalRead(button) && state && millis() - timer > 1000) digitalWrite(led, 1);
  else if (state && digitalRead(button) && millis() - timer > 1000) {
    state = 0;
    delay(250);
  }
  else digitalWrite(led, 0);
}

void test::DO(){
  static unsigned long timer;
  static bool state;

  //2. Anweisung
}

...

test.ino:
Code:
#include "test.h"

/* Zwei Buttons mit LED definieren */
test one(39, 2);
test two(37, 3);

void setup() {
  pinMode(39, 0);
  pinMode(37, 0);
  pinMode(2, 1);
  pinMode(3, 1);
}

void loop() {
  /* Ausführung: */
  one.LED(); /* Angenommen die Taste ist gedrückt, geht durch den ersten IF --> state in LED() geht auf 1 */
  two.LED(); /* state ist nun in dieser Funktion aber auch schon auf 1, was nicht sein soll */
  one.DO(); /* Dafür sollen lokale Variablen gedacht sein, damit Funktionen nicht gleiche Werte für Variablen haben */
}

Ich hoffe man versteht, was ich meine. Für Fragen bin ich gerne bereit.
Ich wäre sehr dankbar für jeden Vorschlag, wie ich das lösen könnte ! Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2016, 22:40
Beitrag #2
RE: Library - Variable in Memberfunktion
Ich bin mir nicht ganz sicher, da ich schon seit über 15 Jahren nichts mehr mit C++ gemacht habe. Ich denke aber, dass statische Variablen prinzipiell zur Compile - Zeit angelegt werden und daher innerhalb von Klassen nicht lokal zur Instanz und schon gar nicht lokal zu einer Methode innerhalb einer Instanz sein kann. Die Variable wird somit zu einer Klassenvariablen. Du wirst vermutlich nicht um stateLED, stateDO usw. vorbeikommen.

Der Hobbyelektroniker wagt sich an die Arduinoprogrammierung auf Video und auf seiner Webseite
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  32-Bit Variable beschreiben mb817 18 661 10.04.2018 20:04
Letzter Beitrag: Mathias
  Arduin Radio Head Library driver Probleme gandalf7588 3 382 08.04.2018 13:05
Letzter Beitrag: gandalf7588
  Adresse MCP23008 mit Library? DL1AKP 5 218 29.03.2018 13:07
Letzter Beitrag: DL1AKP
  HC-12 verschiede Variable übertragen Harry 27 1.345 23.03.2018 23:41
Letzter Beitrag: Tommy56
  Ucglib Library Problem Bully 26 909 05.03.2018 18:47
Letzter Beitrag: Tommy56
  Library math.h Tellen 6 345 16.02.2018 23:07
Letzter Beitrag: Tellen
  Keyboard.h soll variable "schreiben" Fizzo61 4 304 16.02.2018 16:06
Letzter Beitrag: MicroBahner
  Verständnisprobleme bei der Bounce2.h library Flap 1 214 07.02.2018 20:47
Letzter Beitrag: rkuehle
  Die int-Variable verliert ihren Inhalt Christian54 16 1.056 01.11.2017 17:32
Letzter Beitrag: Christian54
  Ethernet2 Library SSL ArduM0 1 587 10.08.2017 01:18
Letzter Beitrag: rkuehle

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste