PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Bibliothek soll auf andere Bibliothek zugreifen



RoboterSindCool
10.12.2016, 18:00
Guten Abend,
ich bin an einem Programm für den Arduino, dass irgendwie nicht funzen will.
Der Arduino soll ein Steuereingabegerät mit 2 LCDs, 2 Joysticks und 10 Tastern steuern.
Da das relativ viel Code wird will ich so viel wie möglich in Bibliotheken auslagern
Nun habe ich mir ein Programm für den Arduino so gedacht:


Arduino Programm <inlude> Steuereingabegerät.h <include> LiquidCristal.h
<include> Taster.h
<include> Joystick.h

Also implementiert man in das Arduino Programm nur die Steuereingabegerät.h und diese Bibliothek soll sich dann wiederum um das LCD, die Taster und die Joysticks kümmern. Die Taster.h und die Joystick.h und die dazugehörigen cpp Dateien funktionieren auch schon soweit (wenn ich diese im Arduino Hauptprogramm einbinde und Objekte davon erstelle, giebt es keine Fehler). Aber wenn ich jetzt die Steuereingabegerät.h schreibe und von dieser Bibliothek auf die anderen zugreifen will, klappt es noch nicht so richtig. Und zwar hat er ein problem, wenn ich die Objekte von Taster.h bzw. Joystick.h erstellen will. Wenn ich in die Klammern nach dem Objekt den oben definierten Variablennamen schreibe, kommt:
'variable' is not a type
Wenn ich statt dem Variablenname eine Zahl einsetzt (also z.B. 2) dann kommt der Fehler:
error: expected ',' or '...' before numeric constant und error: expected identifier before numeric constant
Leider habe ich noch kein Tutorial gefunden, in dem erklärt wird wie eine Bibliothek Variablen definiert und mit diesen dann objekte von anderen Bibliotheken erstellt. Vieleicht könnt ihr mir ja helfen
Vielen Dank schon mal im Vorraus

#include <Arduino.h>
#include <Arduino.h>
#include <BIB_Taster.h>
#include <BIB_Joystick.h>


class BIB_Roboterbedienung{

private:

int pin_taster_Mod1_R = 0;
int pin_taster_Mod1_M = 1;
int pin_taster_Mod1_L = 0;
int pin_taster_Mod1_O = 1;
int pin_taster_Mod1_U = 0;

int pin_taster_Mod2_R = 0;
int pin_taster_Mod2_M = 1;
int pin_taster_Mod2_L = 0;
int pin_taster_Mod2_O = 1;
int pin_taster_Mod2_U = 0;

int pin_joystick_Mod1_button = 2;
int pin_joystick_Mod1_x = 2;
int pin_joystick_Mod1_y = 3;

int pin_joystick_Mod2_button = 2;
int pin_joystick_Mod2_x = 2;
int pin_joystick_Mod2_y = 3;


BIB_Taster taster_Mod1_R(pin_taster_Mod1_R);
BIB_Taster taster_Mod1_M(pin_taster_Mod1_M);
BIB_Taster taster_Mod1_L(pin_taster_Mod1_L);
BIB_Taster taster_Mod1_O(pin_taster_Mod1_O);
BIB_Taster taster_Mod1_U(pin_taster_Mod1_U);

BIB_Taster taster_Mod2_R(pin_taster_Mod2_R);
BIB_Taster taster_Mod2_M(pin_taster_Mod2_M);
BIB_Taster taster_Mod2_L(pin_taster_Mod2_L);
BIB_Taster taster_Mod2_O(pin_taster_Mod2_O);
BIB_Taster taster_Mod2_U(pin_taster_Mod2_U);

BIB_Joystick joystick_Mod1(pin_joystick_Mod1_button, pin_joystick_Mod1_x, pin_joystick_Mod1_y);
BIB_Joystick joystick_Mod2(pin_joystick_Mod2_button, pin_joystick_Mod2_x, pin_joystick_Mod2_y);


public:

BIB_Roboterbedienung();

String welcheMethode();

};

Mxt
10.12.2016, 18:36
Hallo,

also dein Post ist wirklich schwer zu verstehen.

Nach dreimaligem Durchlesen glaube ich, du willst so was in der Art machen


class BIB_Roboterbedienung
{
private:

const int pin_taster_Mod1_R = 0;

BIB_Taster taster_Mod1_R;

public:

BIB_Roboterbedienung()
: taster_Mod1_R(pin_taster_Mod1_R)
{}

ich bin mir aber nicht sicher.

Man kann Member nicht so initialisieren, wie du das oben gemacht hast. Das geht nur im Konstuktor, entweder so wie in meinem Code in einer Initialisierungsliste, oder im Code des Konstruktors.

RoboterSindCool
11.12.2016, 07:49
Also ich will halt in der Bibliothek "Roboterbedienung.h" objekte von der "Taster.h" bzw. "Joystick.h" machen.

Sisor
11.12.2016, 08:38
class BIB_Roboterbedienung {
private:
BIB_Taster taster_Mod1_R {0};
BIB_Taster taster_Mod1_M {1};
//...

BIB_Joystick joystick_Mod1 {2, 3, 4};
//...

public:
BIB_Roboterbedienung() {}
//...

};
oder:

class BIB_Roboterbedienung {
private:
BIB_Taster taster_Mod1_R;
BIB_Taster taster_Mod1_M;
//...

BIB_Joystick joystick_Mod1;
//...

public:
BIB_Roboterbedienung() :
taster_Mod1_R(0),
taster_Mod1_M(1),
//...
joystick_Mod1(2, 3, 4),
//...
{}

//...
};

Mxt
11.12.2016, 08:57
Genau,

wobei ersteres nur bei neueren Arduino IDEs geht, weil das C++11 ist. Ich glaube ab 1.6.9 ist das eingeschaltet.

Sisor
11.12.2016, 09:37
Ja, ich finde gut, was sich da in C++ getan hat. Ab C++11 ist Initialisierung einheitlich. Alles kann alles mit {} initialisiert werden.
Beispiel:

class Foo {
public:
Foo(char c) : _c(c) {}
char operator() () { return _c; }
private:
char _c;
};

void setup() {
byte myBytes[5] { };
int myPoints[][3] { { 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 } };
String myStr { "HelloWorld" };
Foo myFoo { 'x' };

Serial.begin(9600);
Serial.println(myBytes[4]); // prints '0'
Serial.println(myPoints[1][2]); // prints '6'
Serial.println(myStr); // prints 'HelloWorld'
Serial.println(myFoo()); // prints 'x'
}

void loop() { }

RoboterSindCool
11.12.2016, 16:50
Leute Ich bin einfach nur Beeindruckt dass hier so viel Wissen vorhanden ist und ich bin froh dass es euch gibt!
Also es hat funktioniert! man darf die Werte bzw. die Variablennamen nich in normale klammern setzen sondern muss sie in geschwungene klammern machen.
Vielen Vielen Dank für eure schnelle und sehr gute Hilfe!!!