Skocz do zawartości

Jak pisać biblioteki na Arduino?


Pomocna odpowiedź

5 minut temu, farmaceuta napisał:

jaka jest roznica miedzy static i bez w tym przypadku?

Właściwie to powinienem odesłać do pierwszego rozdziału podręcznika C... ale niech Ci będzie.

Bez static ten fun będzie śmiecił po globalnej przestrzeni nazw, czyli np. jakaś inna biblioteka nie mogłaby użyć takiej nazwy funkcji.

Z static fun będzie widziany tylko z poziomu pliku, w którym się znajduje.

 

 

  • Pomogłeś! 1
8 minut temu, ethanak napisał:

Właściwie to powinienem odesłać do pierwszego rozdziału podręcznika C... 

Najpier to zerowke musze skonczyc..😅

 

10 minut temu, ethanak napisał:

Z static fun będzie widziany tylko z poziomu pliku, w którym się znajduje.

I ze zwyklymi zmiennymi tez tak trzeba robic??

No dobrze...no a gdybym stworzy drugi obiekt to wtedy ten static nie jest przypadkiem wspoldzielony przez oba obiekty?

6 minut temu, farmaceuta napisał:

gdybym stworzy drugi obiekt to wtedy ten static nie jest przypadkiem wspoldzielony przez oba obiekty?

Oczywiście że jest. Ale to tylko jeden ze sposobów, w zależności od zastosowania możesz wybrać inny. Poza tym do używania biblioteki wcale nie trzeba tworzyć obiektu.

8 minut temu, farmaceuta napisał:

I ze zwyklymi zmiennymi tez tak trzeba robic??

A masz jakieś zmienne globalne w tej bibliotece? Jeśli tak, to mi wygląda na błąd.

 

  • Pomogłeś! 1

 

1 godzinę temu, ethanak napisał:

A masz jakieś zmienne globalne w tej bibliotece? Jeśli tak, to mi wygląda na błąd.

Nie nie...tak tylko na zapas pytam😉

1 godzinę temu, ethanak napisał:

 Poza tym do używania biblioteki wcale nie trzeba tworzyć obiektu.

To w jaki sposob moge sie wtedy odwolywac do konkretnych metod?

7 minut temu, farmaceuta napisał:

To w jaki sposob moge sie wtedy odwolywac do konkretnych metod?

A dlaczego nie można zastosować normalnych funkcji tylko koniecznie opakowywać je w klasę? Przykład: biblioteka MsTimer2.

  • Lubię! 1

Dzieki wielkie za pomoc Panie kolego @ethanak 🙂 No sprawdzilem ten MsTimer2...jednak jak dla mnie bardziej domyslnie jest tak standardowo operowac metodami...czyli stworzyc obiekt itp..🙂 dziekuje rowniez za mega dluuugie posty z wyjasnieniami i przykladami kolegom @Matthew11  I @_LM_ doceniam wasza pomoc..bo duzo z tego skorzystam👍

  • 2 lat(a) później...
(edytowany)

Hej

Mam pytanie uczę sie pisania bilbioteki. Kod będzię długi i będzie zadelkarowane sporo diod.

Chcę to ładnie ubrać w biblioteke.

Raczkuje w temacie. Jak ładnie zadelakrować zmienną unsigned long Czas_Pracy_Led = 60000UL;  żeby mógł ten czas zmieniać z poziomu programu. Mam ją w pliku nagłowkowym i teraz chciałbym, żeby z poziomu programu zmieniać sobie czas.

 

#ifndef Flash_h
#define Flash_h

#include "Arduino.h"

class Flash
{
  public:
    
    Flash(int pin1, int pin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8, int pin9, int pin10);
    void begin();
    void Store_EEPROM();
    void ReadEEPROM();
    void Funkcje_Przycisku();
    void ledStart();
    

  private:

    int _pin1;
    int _pin2;
    int _pin3;
    int _pin4;
    int _pin5;
    int _pin6;
    int _pin7;
    int _pin8;
    int _pin9;
    int _pin10;

int czas = 50;
int czas2;
byte ile = 0;
uint8_t save = 0;
unsigned long times;
unsigned long aktualnyCzas;
unsigned long zapamietanyCzas;
unsigned long Czas_Pracy_Led = 60000UL; 
byte stan = 0;
int adress = 0;
int adress2 = 1;
int adress3 = 2;
bool flaga = false;
long Przycisk_Drgania_Styku = 50;
int  Stan_Przycisku = HIGH;
int  Poprzedni_Stan_Przycisku = HIGH;
unsigned long Czas_Ostatniego_Wcisniecia = 0;

};

#endif

 

Edytowano przez nebraska

Dodaj metody publiczne (setter i getter), w setterze możesz dodatkowo sprawdzać czy podano jakąś sensowną wartość.

A w ogóle przemyśl czy coś nie powinno być protected a nie private.

  • Lubię! 1
(edytowany)

Dobrym zwyczajem jest użycie np. camelCase to nazw funkcji czy metod, PascalCase do klas i typów złożonych, a snake_case do zmiennych. Któregoś pięknego dnia sam się do tego zastosuję 😉

 

Edytowano przez ethanak
  • Lubię! 1
2 godziny temu, ethanak napisał:

Dodaj metody publiczne (setter i getter), w setterze możesz dodatkowo sprawdzać czy podano jakąś sensowną wartość.

A w ogóle przemyśl czy coś nie powinno być protected a nie private.



przykład:

// W Nagłowku
class Test
{
    public:
         int getX();
         void setX(int newX);
    private:
         int x;
}

// W Zródle 

int Test::getX()
{
     return x;
}

void Test::setX(int newX)
{
      x = newX;
}

Czyli powienienm zasotosować coś takigo?

Nie wiem jeszcze jak tego użyć w swoim przykładzie. Próbuje ale nic nie wychodzi.

A i jeszcze jedno: rozważyłbym varargs w konstruktorze, żeby nie pisać fafnastu wersji dla jednej, dwoch, trzech (...) szesnastu diod. Np. pierwszy argument to ilość diod, a potem piny

  • Pomogłeś! 1

@nebraska tak, coś w tym stylu. W setterze możesz np. dodatkowo sprawdzić, czy czas nie jest mniejszy od ileśtam, większy od ileśtam, podstawić tylko wtedy jeśli jest prawidłowy i zwrócić informacje, czy podstawienie się powiodło albo po prostu aktualną wartość zmiennej.

  • Pomogłeś! 1
43 minuty temu, ethanak napisał:

@nebraska tak, coś w tym stylu. W setterze możesz np. dodatkowo sprawdzić, czy czas nie jest mniejszy od ileśtam, większy od ileśtam, podstawić tylko wtedy jeśli jest prawidłowy i zwrócić informacje, czy podstawienie się powiodło albo po prostu aktualną wartość zmiennej.

Dzięki za pomoc. Narazie muszę podstawić zmienną  czas z poziomu programu że by móc dalej kombnować a i takiej rzeczy nie potrafie zrobić. 

Mój debiut jeśli chodzi o  pisanie biblioteki.  

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...