Pages: [1]   Go Down
Author Topic: Frage: eigene Library schreiben und einbinden  (Read 1245 times)
0 Members and 1 Guest are viewing this topic.
Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich eine eigene Library schreiben und diese dann mit #include in mein sketch einbinden?
Kann mir da jemand weiterhelfen?

mfg
Michael
Logged

Germany
Offline Offline
Edison Member
*
Karma: 46
Posts: 2310
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Gibt ein schönes Tutorial: http://arduino.cc/en/Hacking/LibraryTutorial
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Hilfe! Ich hab mir das Tutorial gleich durchgelesen und auch gleich meine Library geschrieben aber es funktioniert nicht.

LedDisplay.h:
Code:
#ifndef LedDisplay_h
#define LedDisplay_h

#include "Arduino.h"

class LedDisplay
{
public:
LedDisplay();
void updateDisplay(int digit, int display_mode);
private:
int numbersca[10][8] = //code for common anode display (ca)
{
  {0,0,1,0,0,0,0,1}, //0
  {0,1,1,0,1,1,1,1}, //1
  {0,0,1,1,0,0,1,0}, //2
  {0,0,1,0,0,1,1,0}, //3
  {0,1,1,0,1,1,0,0}, //4
  {1,0,1,0,0,1,0,0}, //5
  {1,0,1,0,0,0,0,0}, //6
  {0,0,1,0,1,1,1,1}, //7
  {0,0,1,0,0,0,0,0}, //8
  {0,0,1,0,0,1,0,0}, //9
};

int numberscc[10][8] = //code for commen cathode display (cc)
{
  {1,1,0,1,1,1,1,0}, //0
  {1,0,0,1,0,0,0,0}, //1
  {1,1,0,0,1,1,0,1}, //2
  {1,1,0,1,1,0,0,1}, //3
  {1,0,0,1,0,0,1,1}, //4
  {0,1,0,1,1,0,1,1}, //5
  {0,1,0,1,1,1,1,1}, //6
  {1,1,0,1,0,0,0,0}, //7
  {1,1,0,1,1,1,1,1}, //8
  {1,1,0,1,1,0,1,1}, //9
};
int i;
}
#endif

LedDisplay.cpp:
Code:
#include "Arduino.h"
#include "LedDisplay.h"

void LedDisplay::updateDisplay(int Digit, int display_mode)
{
 
  if(display_mode==0)
  {
  for(i=0; i<=7; i++)
  {
    digitalWrite(i, HIGH); //clear all segments (HIGH wegen common anode display)
  }
 
  for(i=0; i<=7; i++)
  {
  if(numbersca[Digit][i]==0)
    {
        digitalWrite(i, LOW);
        delay(3);
        digitalWrite(i,HIGH);
    }
    else
    {
      delay(3);
    }
  }
}
  else if(display_mode==1)
  {
for(i=0; i<=7; i++)
  {
    digitalWrite(i, LOW); //clear all segments (HIGH wegen common anode display)
  }
 
  for(i=0; i<=7; i++)
  {
  if(numbersca[Digit][i]==1)
    {
        digitalWrite(i, HIGH);
        delay(3);
        digitalWrite(i,LOW);
    }
    else
    {
      delay(3);
    }
  }
}
}

mein Sketch:
Code:
#include <LedDisplay.h>

int i, n, j;
LedDisplay Display();

void setup()
{
  for(i=0; i<=7; i++)
  {
    pinMode(i,OUTPUT);
  }
}

void loop()
{
  for(n=0; n<=9; n++)
  {   
    for(j=0; j<=30; j++)
      Dislplay.updateDisplay(n,0);
  }
}

Fehlermeldung nach dem Überprüfen: "new types may not be defined in a return type"

Bitte um Hilfe.

mfg
Michael

« Last Edit: January 04, 2013, 09:17:20 am by michael__k » Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 3
Posts: 294
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf den ersten Blick müsstest du m.M. nach noch die new Funktion hinzufügen:
LedDisplay::LedDisplay()
{
}

In dieser kannst du deine Klasse initialisieren
Logged

Arduino 1.0.3|MEGA|UNO|MICRO|PRO MINI3.3
SSD1289 TFT Touch|DS18B20|DS1307
ADNS2610|RFM12|OOK|SSD1303|DHT22
SSD1306 Crius CO-16 OLED|UGUI|SD
SSD1352|

Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hab das File LedDisplay.cpp um den Konstruktor ergänzt aber das ändert nichts.

mfg
Michael
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tritt der Fehler evtl. in dieser Zeile auf:
Code:
      ledDislplay.updateDisplay(n,0);
(Da ist ein Buchstabel zuviel. Aber das wäre eine wirklich blöde Fehlermeldung)

Sonst hilft es evtl. zu wissen wo der Fehler angemeckert wird...
Logged

Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ist mir gerade aufgefallen, dass da ein Tippfehler ist aber daran liegt es nicht.
Die IDE markiert mir die 1. Zeile also das #include <LedDisplay.h>.
und untem im feld wo die ganzen Errors angezeicht werden steht folgendes:

In file included from _7segment_1digit.cpp:1:
C:\Users\.../LedDisplay.h:17: error: a brace-enclosed initializer is not allowed here before '{' token
C:\Users\.../LedDisplay.h:28: error: ISO C++ forbids initialization of member 'numbers_ca'
C:\Users\.../LedDisplay.h:28: error: making 'numbers_ca' static
C:\Users\.../LedDisplay.h:28: error: invalid in-class initialization of static data member of non-integral type 'int [10][8]'
C:\Users\.../LedDisplay.h:31: error: a brace-enclosed initializer is not allowed here before '{' token
C:\Users\.../LedDisplay.h:42: error: ISO C++ forbids initialization of member 'numbers_cc'
C:\Users\.../LedDisplay.h:42: error: making 'numbers_cc' static
C:\Users\.../LedDisplay.h:42: error: invalid in-class initialization of static data member of non-integral type 'int [10][8]'
_7segment_1digit:0: error: new types may not be defined in a return type
_7segment_1digit.cpp:4: note: (perhaps a semicolon is missing after the definition of 'LedDisplay')
_7segment_1digit:0: error: two or more data types in declaration of 'setup'
_7segment_1digit.cpp: In function 'void loop()':
_7segment_1digit:18: error: request for member 'updateDisplay' in 'ledDisplay', which is of non-class type 'LedDisplay ()()'

mfg
Michael
« Last Edit: January 03, 2013, 08:02:06 pm by michael__k » Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
error: new types may not be defined in a return type
... ist ein Folge-Fehler davon, dass deine Klassen-Definition nicht geklappt hat.

Das hat jetzt mit Library schreiben an sich nichts zu tun, sondern damit, dass du numbersca als private class member so nicht initialisieren kannst.

Am einfachsten definierst du dein konstantes (?) Array ausserhalb der class.

Oder im constructor.

Der erste Tip, wenn du "initialize static const array c++" googlest, liefert schon eine brauchbare Lösung
http://forum.chip.de/c-c/static-const-array-1168150.html


Aber hier besser im PROGMEM, wenn es konstant ist.
Logged

Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Hilfe, hab die beiden Arrays außerhalb der Klasse definiert. Aber es kommt noch immer ein Error.

_7segment_1digit.cpp: In function 'void loop()':
_7segment_1digit:18: error: request for member 'updateDisplay' in 'Display', which is of non-class type 'LedDisplay ()()'

Sketch:
Code:
#include <LedDisplay.h>

LedDisplay Display();
int i,j,n;

void setup()
{
  for(i=0; i<=7; i++)
  {
    pinMode(i,OUTPUT);
  }
}

void loop()
{
  for(n=0; n<=9; n++)
  {   
    for(j=0; j<=30; j++)
      Display.updateDisplay(n,0);
  }
}

mfg
Michael
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
'Display' ... is of non-class type 'LedDisplay ()()'


LedDisplay Display();   Deklariert eine Funktion mit dem Namen Display, die keine Paramter braucht und ein LedDisplay Objekt zurückliefert. So gesehen macht die Fehlermeldung wieder Sinn smiley-wink

LedDisplay Display; // ist wohl eher was du willst
Logged

Pages: [1]   Go Up
Jump to: