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
Eclipse ".ino.cpp"
27.04.2016, 22:07
Beitrag #1
Eclipse ".ino.cpp"
Ich habe mir Arduino Eclipse 3.0.0 runtergeladen.
Einfache Scetch funktionieren einwandfrei.

Dann wollte ich eine Scetch mit einer selbst erstellten Classe ausprobiere, welche in der normalen Arduino-IDE ohne Fehler kompiliert wird.

Aber unter Eclipse wird eine Datei ".ino.cpp" erzeugt, in der die Declaration der Methoden vorhanden sind. Welche aber leider nur einen Fehler erzeugen.

Code:
../.ino.cpp:12:6: error: 'ShiftRegister' has not been declared
void ShiftRegister::pinHigh(byte pin, byte regNr) ;

Kann man das irgendwie umgehen ?

Wen ich die Declarationen aus der ".ino.cpp" entferne, dann kann ich es fehlerlos kompilieren, aber sobald ich etwas in der Scetch ändere, werden die Declaration wieder erzeugt,
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.04.2016, 23:09
Beitrag #2
RE: Eclipse ".ino.cpp"
Hallo Mathias,

ich gehe mal davonaus, dass du deine eigene Lib im Eclipse im Ordner für eigene / private Libraries sauber untergebracht hast.
Das mal angenommen scheint es ein Problem mit dem Klassenkonstruktor zu geben. Es wird ja eine Funktion "pinHigh" aufgerufen, die zur Klasse "ShiftRegister" gehört. Nur leider ist die Klasse wohl nicht bekannt!? Ist aber stochern im Nebel solang man den Code der Library nicht sehen kann Huh

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2016, 17:04
Beitrag #3
RE: Eclipse ".ino.cpp"
Ich habe nichts externes eingebunden, sondern eine Classe innerhalb des Haupt-Programmes geschrieben.
Eigentlich nichts besonderes.
Wie schon gesagt, die normale Arduino-IDE hat keine Probleme.

Code:
#include "Arduino.h"

class ShiftRegister
{
  public:
    ShiftRegister(byte data, byte clock, byte latch, byte count = 1);
    ~ShiftRegister() ;
    void setreg(byte r, byte regNr = 0);
    void pinHigh(byte pin, byte regNr = 0);
    void pinLow(byte pin, byte regNr = 0);
    void update();
  private:
    byte latchPin;
    byte clockPin;
    byte dataPin;

    byte shiftCount;
    byte *reg = 0;
};

ShiftRegister::ShiftRegister(byte data, byte clock, byte latch, byte count) {
  shiftCount = count;
  reg = new byte[shiftCount];
  for (int i = 0; i < shiftCount; i++) {
    reg[i] = 0b00000000;
  }
  dataPin = data;
  clockPin = clock;
  latchPin = latch;
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

ShiftRegister::~ShiftRegister() {
  delete[] reg;
  reg = 0;
}

void ShiftRegister::setreg(byte r, byte regNr) {
  reg[regNr] = r;
}

void ShiftRegister::pinHigh(byte pin, byte regNr) {
  reg[regNr] = reg[regNr] | (1 << pin);
}

void ShiftRegister::pinLow(byte pin, byte regNr) {
  reg[regNr] = reg[regNr] & ~ (1 << pin);
}

void ShiftRegister::update() {
  digitalWrite(latchPin, LOW);
  //  for (int i = 0; i < shiftCount; i++) {
  for (int i = shiftCount - 1; i >= 0; i--) {
    shiftOut(dataPin, clockPin, MSBFIRST, reg[i]);
  }
  digitalWrite(latchPin, HIGH);
}

// --- End ShiftRegister ---

byte latchPin = 9;
byte clockPin = 8;
byte dataPin = 10;

ShiftRegister shift(dataPin, clockPin, latchPin, 9);

void setup() {
  //  Serial.begin(9600);
  shift.setreg(0b10101010, 2);
  shift.setreg(0b11110000, 3);
  shift.setreg(0b00110011, 4);
  shift.setreg(0b11111111, 5);
}

byte wert1 = 0;
byte wert2 = 0;

byte z = 0;

void loop() {
  for (int i=0; i <= 8; i++) {
    shift.setreg(random(256),i);
  };
  z += 1;
  if (z >= 2) {
    z = 0;
  };

  //  shift.setreg(wert1, 0);
  //  shift.setreg(wert2, 1);
  //  shift.pinHigh(1, 1);
  //  shift.pinHigh(3, 1);
  //  shift.pinLow(3);
  //  shift.setreg(random(0x100), 6);
  //  shift.setreg(255, 7);
  //  shift.setreg(255, 8);
  //  wert1 += 1;
  shift.update();

  delay(100);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2016, 22:35 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2016 22:47 von rkuehle.)
Beitrag #4
RE: Eclipse ".ino.cpp"
Hallo Mathias,

habe eben zum Test die Klasse in eine .h und .cpp ausgelagert und die Dateien im gleichen Verzeichnis wie den Sketch abgelegt. Dann den Header mit
Code:
#include "ShiftRegister.h"
eingebunden. Läuft ohne Probleme. Die Klasse ist also völlig okay.
Oder du nimmst den Weg wie er hier beschrieben ist (mir persönlich zu umständlich): http://eclipse.baeyens.it/how_to.shtml#/j
Scheint eher ein Problem für das Plugin zu sein Klassen direkt im Sketch zu "verarbeiten".
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2016, 17:56
Beitrag #5
RE: Eclipse ".ino.cpp"
Zitat:habe eben zum Test die Klasse in eine .h und .cpp ausgelagert und die Dateien im gleichen Verzeichnis wie den Sketch abgelegt.
Danke, so klappt es.

Es ist recht mühsam, das man eine h & cpp betreuen muss. Aber das ist leider in C++ so. Sad
Als eingefleischter Pascal Programmierer ist da man einfacheres gewohnt.

Gibt es etwa in Eclipse eine Möglichkeit, welches die Deklaration automatisiert.
Bei Lazarus(Pascal), kann man eine neue Methode deklarieren, in C++ wäre die im Header. Dann kan man Ctrl+Shift+c drücken und dann wird einem automatisch der ganze Methode-Kopf geschrieben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2016, 19:11
Beitrag #6
RE: Eclipse ".ino.cpp"
Hallo Mathias,

hier: http://stackoverflow.com/questions/12668...clipse-cdt
gibt es etliche Shortcuts. Antwort 0 dürfte dich interessieren.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2016, 16:08
Beitrag #7
RE: Eclipse ".ino.cpp"
Ich habe etwas gefunden, da kann man eine Methode im Header deklarieren, dann wird diese in der Source erzeugt.
Nur wen ich die Übergabe-Variablen änder oder ergänze, dann macht diese Funktion nicht mehr mit.

http://stackoverflow.com/questions/23227...-in-an-ide

Antwort 10
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2016, 16:59
Beitrag #8
RE: Eclipse ".ino.cpp"
Hallo Mathias,
Zitat:Nur wen ich die Übergabe-Variablen änder oder ergänze, dann macht diese Funktion nicht mehr mit.
Naja wenn man in der Antwort nachschaut steht da ja auch
Zitat:Add function prototype to .h file void foobar()
Ist ja ein Prototyp für eine Funktion ohne Übergabe- oder Returnwerte.
Vielleicht noch wichtiger ist ja die Tatsache, dass da von Eclipse CDT gesprochen wird und nicht von Eclipse für Arduino.
Das ist ja das gute, dass man in Eclipse-Anwendungen einbauen kann was man möchte, oder eben weglassen Huh
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Question Arduino mit Java ( Eclipse ) steuern SirKomex 0 520 28.01.2016 08:48
Letzter Beitrag: SirKomex

Gehe zu:


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