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
  Library unter Linux Mint installieren atmel900 1 94 22.11.2016 14:12
Letzter Beitrag: rkuehle
  Dallas Temp Library und LiquidCrystal_i2c relay 20 468 27.10.2016 12:20
Letzter Beitrag: hotsystems
  Problem mit SD Card Library BennIY 4 194 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 477 03.07.2016 09:00
Letzter Beitrag: Binatone
  Wo kann ich hier noch Code spahren? (SPI-,Ethernet-,SD-,GSM-Library) avoid 4 384 05.06.2016 14:16
Letzter Beitrag: avoid
  [Suche] Library Programmierer/in für privates Projekt avoid 8 578 19.05.2016 15:01
Letzter Beitrag: avoid
  PID ohne Library MeisterQ 5 534 01.05.2016 09:23
Letzter Beitrag: MeisterQ
  Inhalt einer Variable mit per Virtual Wire versenden toto1975 17 1.774 26.03.2016 18:57
Letzter Beitrag: hotsystems
  Problem mit Pin Change Interrupt in Library Retian 0 321 10.02.2016 23:37
Letzter Beitrag: Retian
  Pin anhand Variable schalten ! b3ta 13 827 12.01.2016 08:30
Letzter Beitrag: b3ta

Gehe zu:


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