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
Zentrale Variablen für verschiedene Klassen
28.10.2018, 22:06 (Dieser Beitrag wurde zuletzt bearbeitet: 28.10.2018 22:08 von Smirgel.)
Beitrag #1
Zentrale Variablen für verschiedene Klassen
Hallo liebe Bastler, Frickler und Programmierer.

In einem komplexeren Projekt möchte ich aus verschiedenen Klassen auf Zentrale Daten zugreifen.
Sagen wir mal ich habe eine Hauptdatei.ino. Dazu verwende ich eine selbstgeschriebene Klasse für ein 128x64 Display. Hauptdatei.ino und die Display-Klasse sollen auf globale Werte zugreifen .

Mein Problem war es die Hauptdatei.ino als Objekt (quasi als Container für die globalen Werte) an die Display-Klasse zu übergeben. Deswegen habe ich eine weitere Klasse geschrieben, nennen wir sie mal Kernel, welche ausschließlich die Daten speichert und wieder zurückgibt. Die Kernel-Klasse wird in der Hauptdatei.ino Instanziiert und im setup() über eine display.initialize(Kernel kernel)-Funktion an die Display-Klasse übergeben.

Leider verhalten sich beide Kernel-Objekte, also in der Hauptdatei.ino und der Display-Klasse unabhängig voneinander.

Vielleicht hat jemand einen Tip für mich oder einen anderen Lösungsweg. Das wäre echt super.

Smi Ó_ò


Hauptdatei.ino
Code:
#include "Arduino.h"
#include "Wire.h"
#include "U8glib.h"
#include "Kernel.h"
#include "Display.h"

#define RIGHT     0
#define LEFT      1

Kernel kernel=Kernel();
Display display=Display();

bool readed;
byte encoderValue;


void setup(){
    Serial.begin(9600);
    Wire.begin(8);
    Wire.onReceive(receiveEvent);
    kernel.value=123;
    display.initialize(kernel);
}

void loop(){
    display.update();
    if(readed){
        switchEncoder();
        readed=false;
    }
}

void receiveEvent(int howMany) {
    encoderValue = Wire.read();
    readed=true;
}

void switchEncoder(){
    switch(encoderValue){
        case RIGHT:
            display.right();
            Serial.println(kernel.value);
            break;
        case LEFT:
            display.left();
            Serial.println(kernel.value);
            break;
    }
}


Kernel.h
Code:
#ifndef KERNEL_H_
#define KERNEL_H_

#include "Arduino.h"

class Kernel {

public:
    Kernel();
    byte value=0;
};

#endif


Kernel.cpp
Code:
#include "Kernel.h"

Kernel::Kernel() {}


Display.h
Code:
#ifndef DISPLAY_H_
#define DISPLAY_H_

#include "Arduino.h"
#include "U8glib.h"
#include "Kernel.h"

class Display {
    private:
    U8GLIB_ST7920_128X64_1X u8g;
    Kernel kernel;
    boolean redraw;

    public:
    Display();
    void initialize(Kernel k);
    void update();
    void left();
    void right();
};

#endif

Display.cpp
Code:
#include "Display.h"

Display::Display() : u8g(10,9,8,2,7,6,5,4,11,13,12,3) {
    redraw=true;
}

void Display::initialize(Kernel k){
    kernel=k;
}

void Display::update(){
    if (redraw) {
        u8g.firstPage();
        do{
            u8g.setFont(u8g_font_04b_03br);
            u8g.setFontPosTop();
            u8g.setPrintPos(1,1);
            u8g.print("VALUE: "+String(kernel.value));

        }while(u8g.nextPage());
        redraw=false;
    }
}

void Display::left(){
    if(kernel.value>0)kernel.value--;
    redraw=true;
}

void Display::right(){
    if(kernel.value<255)kernel.value++;
    redraw=true;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.10.2018, 11:17
Beitrag #2
RE: Zentrale Variablen für verschiedene Klassen
Versuche es mal mit der Übergabe als Pointer oder als Referenz. So wie es jetzt ist, wird eine Kopie übergeben.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.10.2018, 16:56
Beitrag #3
RE: Zentrale Variablen für verschiedene Klassen
Jup Tommy.
Danke für das richtige Stichwort. Mit Pointern hatte ich mich bisher noch nicht beschäftigt. Hab also keine Ahnung was ich da mache aber es funktioniert mit folgengen Änderungen:

Hauptdatei.ino
Code:
void setup(){
    Serial.begin(9600);
    Wire.begin(8);
    Wire.onReceive(receiveEvent);
    kernel.value=123;
    display.initialize(&kernel);  //<---
}


Display.h
Code:
class Display {
    private:
    U8GLIB_ST7920_128X64_1X u8g;
    Kernel* kernel;  //<---
    boolean redraw;
    .......

Display.cpp
Code:
void Display::initialize(Kernel* k){  //<---
    kernel=k;
}

void Display::update(){
    if (redraw) {
        u8g.firstPage();
        do{
            u8g.setFont(u8g_font_04b_03br);
            u8g.setFontPosTop();
            u8g.setPrintPos(1,1);
            u8g.print("VALUE: "+String(kernel->value));  //<---

        }while(u8g.nextPage());
        redraw=false;
    }
}

void Display::left(){
    if(kernel->value>0)kernel->value--;  //<---
    redraw=true;
}

void Display::right(){
    if(kernel->value<255)kernel->value++;  //<---
    redraw=true;
}

Und danke für die schnelle Antwort.

Grüße. Smi O_o
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.10.2018, 21:24
Beitrag #4
RE: Zentrale Variablen für verschiedene Klassen
Prima, dass es funktioniert.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Externes "Ansprechen" von Variablen xXIchbinannonymXx 3 189 20.11.2019 20:20
Letzter Beitrag: Tommy56
  Wasserverbrauchszähler, statische Variablen, komisches Verhalten in der loop() pzYsTorM 14 1.278 19.03.2019 20:33
Letzter Beitrag: Hilgi
  Hilfe benötigt beim Verknüpfen von Klassen Batucada 7 1.046 02.03.2019 23:47
Letzter Beitrag: georg01
  Anfängerfragen zu Klassen HarryS 13 1.442 21.01.2019 21:20
Letzter Beitrag: HarryS
  char in Variablen aufteilen fv1895 7 801 06.01.2019 11:59
Letzter Beitrag: Tommy56
  Variablen zu einem CHAR verbinden und einbinden Frank_aus_WOB 3 1.041 02.01.2019 09:07
Letzter Beitrag: Tommy56
  Verkettung von Variablen flint74 5 807 30.12.2018 14:33
Letzter Beitrag: Tommy56
  Variablen über Eingabe im Setup beschreiben heini320 3 713 30.12.2018 11:37
Letzter Beitrag: Tommy56
  Speichern u. Lesen von Variablen von SDCard Christian_Moba-Arduino 7 2.070 24.08.2018 17:35
Letzter Beitrag: Tommy56
Question Falsche Variablen Deklaration? nimmzwei 7 1.746 15.01.2018 18:31
Letzter Beitrag: Tommy56

Gehe zu:


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