Skocz do zawartości

Jak pisać biblioteki na Arduino?


macizet

Pomocna odpowiedź

@macizet dzięki za sugestię, a co właściwie dokładnie Cie interesuje? Z czym dokładnie masz tam problemy? Prawidłowe pisanie bibliotek w przemyślany sposób nie jest wcale takim łatwym zadaniem. Poznanie samej metodologii nie wystarcza, przydaje się tez ogólne doświadczenie programistyczne, aby stworzona biblioteka nie "psuła" całej reszty programu 😉

Link do komentarza
Share on other sites

38 minut temu, macizet napisał:

Chodzi konkretnie o pisanie prostej biblioteki np. zablyskaj dioda LED okreslona przez inicjalizacje ilosc, jaki czas blyskow.

Cześć,

jeśli znasz C++, to praktycznie powinieneś móc napisać własną bibliotekę do Arduino - jest to po prostu klasa w języku C++ (bez żadnych udziwnień w stosuknu do C++).

Na oryginalnej stronie Arduino jest tutorial:

https://www.arduino.cc/en/Hacking/libraryTutorial

Niestety po łacinie 😉

Pozdrawiam

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@macizet czy do czegoś takiego faktycznie trzeba bibliotekę pisać?

int led = 13;
unsigned long Start; 
unsigned long buttonTime=0;
int Power=1;
int onTime=150; 
int offTime=1500; 

void setup() 
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);   
  
}
void loop() {
  Start = millis();
  if (((Start-buttonTime)>=onTime) && (Power==1))
  {
  digitalWrite(led, LOW);
  Power=0;
  }
 // tutaj pisz kod
  if (((Start-buttonTime)>=offTime) && (Power==0))
  {
  digitalWrite(led, HIGH);
  Power=1;
  buttonTime=millis();
  }
}

 

Link do komentarza
Share on other sites

W zasadzie to się zgadzam a nawet zgadzam się z tym , że sama biblioteka czy klasa mogła by być przydatna w tym wypadku. Przy jednej diodzie to niby nie jest tak oczywiste ale tak sobie pomyślałem co gdyby tych diod było więcej? Więc napisałem funkcję dla jednej diody i prawie kopie tej funkcji dla drugiej diody. Czyli dwie diody mają różne czasy pracy i niby fajnie ale jak by było ich jeszcze więcej? Klasa czy biblioteka na pewno dała by większą przejrzystość i elastyczność. Więc sam pomysł na taką bibliotekę jak i na naukę 🙂 jest całkiem trafny.

  • Lubię! 2
Link do komentarza
Share on other sites

Dla wszystkich, którzy chcą korzystać bez delay z migania/pikania i nie tylko a niewiedzą jak do tego się zabrać wklejam funkcję 

void loop() {
  start(13,1000,1000); 
  start2(3,1,15);
  start3(10,250,500);  
}

void start2(int led, int onTime, int offTime)
{
  static int Power=1;
  static unsigned long buttonTime;
  unsigned long Start;
  Start = millis();
  if (((Start-buttonTime)>=onTime) && (Power==1))
  {
  digitalWrite(led, LOW);
  Power=0;
  }

  if (((Start-buttonTime)>=(offTime+=onTime)) && (Power==0))
  {
  digitalWrite(led, HIGH);
  Power=1;
  buttonTime=millis();
  }
}

Efekt działania taki jak niżej. Samo stosowanie funkcji jest bardzo proste

start2(3,1,15);

pierwsza cyfra to nr pinu do którego podpięta jest dioda, druga cyfra to czas na jaki dioda jest włączana tutaj 1ms  i ostatnia cyfra to czas na jaki dioda gaśnie czyli 15ms. Na tej animacji tak tego nie widać ale w rzeczywistości dioda na pinie 3 świeci o wiele słabiej a więc można nawet sterować jasnością. Jak by ktoś chciał to można by nawet podmienić millis() na micros().

Pozostałe dwie diody widać jak świecą. Funkcji start() i start3() nie wklejałem bo ciało tych funkcji wygląda tak samo jak start2() a wiec jeśli chcecie mieć więcej takich funkcji to wystarczy zrobić kopiuj wklej i zmienić nazwę. Oczywiście w setup() trzeba zadeklarować piny jako OUTPUT bo bez tego diody będą świecić jak by chciały a nie mogły:). W planie była biblioteka ale cóż... może następnym razem.

20190418_223712_1.thumb.gif.ebb807e5b06722e453d9726da6e7a1ee.gif

 

Link do komentarza
Share on other sites

9 godzin temu, slon napisał:

Funkcji start() i start3() nie wklejałem bo ciało tych funkcji wygląda tak samo jak start2() a wiec jeśli chcecie mieć więcej takich funkcji to wystarczy zrobić kopiuj wklej i zmienić nazwę

To jest straszne, używanie kopiuj-wklej powinno być zakazane, a zakaz wpisany do konstytucji. Mam taśmę 144 led-ów, czyli powinienem tyle razy skopiować funkcję start...

A może dałoby się ten kod poprawić i uniknąć kopiowania kodu? To takie małe zadanie domowe.

Link do komentarza
Share on other sites

@Elvis dla 144 led-ów to nie było by straszne. To był by horror 🙂 . Funkcję napisałem z myślą dla jednej diody natomiast zastosowanie pokazałem na trzech. Jak napiszę to tego klasę to będzie led.start() , led.start1(), led.start2() i faktycznie kopiowanie będzie zbędne. @ArduPiotr dzięki za doping 🙂.

Link do komentarza
Share on other sites

30 minut temu, slon napisał:

@Elvis dla 144 led-ów to nie było by straszne. To był by horror 🙂 . Funkcję napisałem z myślą dla jednej diody natomiast zastosowanie pokazałem na trzech. Jak napiszę to tego klasę to będzie led.start() , led.start1(), led.start2() i faktycznie kopiowanie będzie zbędne. @ArduPiotr dzięki za doping 🙂.

Cześć,

to raczej powinno wyglądać tak, że do metody led.start(int NrDiody, ...) przekazujesz parametr numer diody (oprócz reszty parametrów) i tak modyfikujesz kod tej funkcji, aby to działało poprawnie.

Pozdrawiam

 

Link do komentarza
Share on other sites

@FlyingDutch tak miałem to na myśli a inaczej zapisałem. Generalnie zamysł jet taki Obiekt jako led oraz medota start();. Czyli led1.start(); led2.start(); led3.start(); lub tablica obiektów. Czy taki sposób będzie poprawny?

Edytowano przez slon
  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.