custom Library – multiple definitions

OP #4827282
Lesenswert?
• ▲
▼
Aloha!

Ich versuche gerade die Keypad Library so zu modifizieren, dass ich sie 
mit PCF 8574 Port Expandern betreiben kann. Der Einfachheit wegen habe 
ich in der Keypad Library wiederum eine Library für den PCF.

Aber ich bekomme es nicht zum laufen ohne folgende Fehlermeldung:
1
/var/folders/v0/xh4cnpz96rq5fw8nk7m1g0jw0000gp/T/arduino_build_43838/libraries/Keypad/Keypad.cpp.o: In function `Keypad::numKeys()':
2
/Users/elias/Documents/Arduino/libraries/Keypad/src/Keypad.h:81: multiple definition of `PCF'
3
/var/folders/v0/xh4cnpz96rq5fw8nk7m1g0jw0000gp/T/arduino_build_43838/sketch/test.ino.cpp.o:/Users/elias/Documents/Arduino/test/test.ino:33: first defined here
4
/Applications/Arduino.app/Contents/Java/hardware/tools/arm/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/bin/ld: Disabling relaxation: it will not work with multiple definitions
5
collect2: error: ld returned 1 exit status
6
Fehler beim Kompilieren für das Board Teensy 3.6.

An Keypad.cpp habe ich nichts verändert, an Keypad.h habe ich 
digitalRead/digitalWrite in PCF.read/PCF.write geändert und
1
#include "PCF8574.h"
2
PCF8574 PCF(0x20);
habe ich oben eingefügt.
Was mache ich falsch?

Danke!



Hier der ganze Code der Keypad.h:
1
#ifndef KEYPAD_H
2
#define KEYPAD_H
3

4
#include "Key.h"
5
#include "PCF8574.h"
6
PCF8574 PCF(0x20);
7

8
// bperrybap - Thanks for a well reasoned argument and the following macro(s).
9
// See http://arduino.cc/forum/index.php/topic,142041.msg1069480.html#msg1069480
10
#ifndef INPUT_PULLUP
11
#warning "Using  pinMode() INPUT_PULLUP AVR emulation"
12
#define INPUT_PULLUP 0x2
13
#define pinMode(_pin, _mode) _mypinMode(_pin, _mode)
14
#define _mypinMode(_pin, _mode)  \
15
do {               \
16
  if(_mode == INPUT_PULLUP)   \
17
    pinMode(_pin, INPUT);   \
18
    PCF.write(_pin, 1);   \
19
  if(_mode != INPUT_PULLUP)   \
20
    pinMode(_pin, _mode);   \
21
}while(0)
22
#endif
23

24

25
#define OPEN LOW
26
#define CLOSED HIGH
27

28
typedef char KeypadEvent;
29
typedef unsigned int uint;
30
typedef unsigned long ulong;
31

32
// Made changes according to this post http://arduino.cc/forum/index.php?topic=58337.0
33
// by Nick Gammon. Thanks for the input Nick. It actually saved 78 bytes for me. :)
34
typedef struct {
35
    byte rows;
36
    byte columns;
37
} KeypadSize;
38

39
#define LIST_MAX 10    // Max number of keys on the active list.
40
#define MAPSIZE 10    // MAPSIZE is the number of rows (times 16 columns)
41
#define makeKeymap(x) ((char*)x)
42

43

44
//class Keypad : public Key, public HAL_obj {
45
class Keypad : public Key {
46
public:
47

48
  Keypad(char *userKeymap, byte *row, byte *col, byte numRows, byte numCols);
49

50
  virtual void pin_mode(byte pinNum, byte mode) { pinMode(pinNum, mode); }
51
  virtual void pin_write(byte pinNum, boolean level) { PCF.write(pinNum, level); }
52
  virtual int  pin_read(byte pinNum) { return PCF.read(pinNum); }
53

54
  uint bitMap[MAPSIZE];  // 10 row x 16 column array of bits. Except Due which has 32 columns.
55
  Key key[LIST_MAX];
56
  unsigned long holdTimer;
57

58
  char getKey();
59
  bool getKeys();
60
  KeyState getState();
61
  void begin(char *userKeymap);
62
  bool isPressed(char keyChar);
63
  void setDebounceTime(uint);
64
  void setHoldTime(uint);
65
  void addEventListener(void (*listener)(char));
66
  int findInList(char keyChar);
67
  int findInList(int keyCode);
68
  char waitForKey();
69
  bool keyStateChanged();
70
  byte numKeys();
71

72
private:
73
  unsigned long startTime;
74
  char *keymap;
75
    byte *rowPins;
76
    byte *columnPins;
77
  KeypadSize sizeKpd;
78
  uint debounceTime;
79
  uint holdTime;
80
  bool single_key;
81

82
  void scanKeys();
83
  bool updateList();
84
  void nextKeyState(byte n, boolean button);
85
  void transitionTo(byte n, KeyState nextState);
86
  void (*keypadEventListener)(char);
87
};
88

89
#endif

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.