Avatar billede steen-h Mester
22. marts 2016 - 16:29 Der er 4 kommentarer og
1 løsning

Lave arduino bibliotek

Jeg er ved at lave et arduino bibliotek og er rendt ind i problemer.

Biblioteket er lavet med en class hvor en function kalder en anden function i samme class. Det har jeg set man kan gøre hvis den kaldte function er defineret som static

Bee_spi.h

class Bee_spi
{
  public:
Bee_spi();
void SetTime(int  Hour,int Minute,int  Date,int  Month,int  Year);
static void writeRegisterTime(byte thisRegister, char thisValue);
static void writeRegister(byte thisRegister, char thisValue);
void CSsetup(int UrPin,int KgPin);
   
  private:
static int _UrPin;
static int _KgPin;
};

Bee_spi.cpp
void SetTime(int  Hour,int Minute,int  Date,int  Month,int  Year)
{
    Bee_spi::writeRegisterTime(0x80, 30); // Setup sekunder register
}

Det virker, men er det ikke også den rigtige måde at gøre det på ?

Problemet er private variabler, det virker ikke at definere dem som static
static int _UrPin;
static int _KgPin;

Dem kalder jeg her
void Bee_spi::CSsetup(int UrPin,int KgPin)
{
    pinMode(UrPin, OUTPUT); // Ur
    digitalWrite(UrPin, LOW);
    pinMode(KgPin, OUTPUT);  // Til vejecelle
    digitalWrite(KgPin, HIGH);
    _UrPin = UrPin;
    _KgPin = KgPin;
}

og her
void writeRegister(byte thisRegister, char thisValue)
{
    digitalWrite(_UrPin, HIGH);
    SPI.transfer(thisRegister);
    SPI.transfer(thisValue);
    digitalWrite(_UrPin, LOW);
}

Hvordan gør jeg det ?

Her er fejlmeddelsen

In function 'void writeRegister(byte, char)':
Bee_spi.cpp:61:18: error: '_UrPin' was not declared in this scope
    digitalWrite(_UrPin, HIGH);
Avatar billede arne_v Ekspert
22. marts 2016 - 16:34 #1
Bee_spi.h

class Bee_spi
{
  public:
    Bee_spi();
    void SetTime(int  Hour,int Minute,int  Date,int  Month,int  Year);
    void writeRegisterTime(byte thisRegister, char thisValue);
    void writeRegister(byte thisRegister, char thisValue);
    void CSsetup(int UrPin,int KgPin);
 
  private: 
    int _UrPin;
    int _KgPin;
};

Bee_spi.cpp

void Bee_spi::SetTime(int  Hour,int Minute,int  Date,int  Month,int  Year)
{
    writeRegisterTime(0x80, 30); // Setup sekunder register
}

void Bee_spi::writeRegister(byte thisRegister, char thisValue)
{
    digitalWrite(_UrPin, HIGH);
    SPI.transfer(thisRegister);
    SPI.transfer(thisValue);
    digitalWrite(_UrPin, LOW);
}
Avatar billede steen-h Mester
22. marts 2016 - 16:44 #2
Lige det jeg manglede.

Tak for hjælpen Arne, læg et svar
Avatar billede arne_v Ekspert
22. marts 2016 - 17:08 #3
svar
Avatar billede arne_v Ekspert
22. marts 2016 - 17:09 #4
og hvis det ikke var helt klart hvad jeg lavede om:

void writeRegister(byte thisRegister, char thisValue)
{
...
}

er en C style function

void Bee_spi::writeRegister(byte thisRegister, char thisValue)
{
...
}

er en metode i klasse Bee_spi
Avatar billede steen-h Mester
22. marts 2016 - 18:11 #5
Det var hel klart, jeg havde stiret mig blind.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester