Servo skeniranje
Što ovaj primjer prikazuje
Pogon hobističkog serva po kutu umjesto po sirovim impulsima, te njegovo skeniranje naprijed-natrag unutar konfiguriranog raspona. Ovo je primarna oglašena namjena ploče.
Primjerni kod
#include "PCA9685-SOLDERED.h"
PCA9685 pwm;
void setup()
{
pwm.begin(); // sets 50Hz PWM frequency by default, suitable for hobby servos
// Adjust to match your servo's datasheet if it doesn't reach full range
pwm.setServoPulseRange(500, 2500); // microseconds
pwm.setServoAngleRange(0, 180); // degrees
}
void loop()
{
for (int angle = 0; angle <= 180; angle += 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}
for (int angle = 180; angle >= 0; angle -= 1)
{
pwm.setServoAngle(0, angle);
delay(15);
}
}
Očekivani rezultat:
Nema serijskog izlaza. Hobi servo spojen na kanal 0 pomiče se od 0 do 180 stupnjeva i natrag, pri čemu svaki smjer traje nešto manje od 3 sekunde, a zatim se postupak ponavlja.
Koristene funkcije
PCA9685(uint8_t _address = PCA9685_DEFAULT_ADDRESS)returns NoneNativni konstruktor. I2C adresa ploče je fiksirana pomoću kratkospojnika JP1–JP6, stoga navedite adresu koja odgovara postavkama vaše ploče ili je ostavite na zadanoj vrijednosti.
ReturnsKonstruktor; nema povratnu vrijednost.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | _address | I2C adresa ploče. Zadano je PCA9685_DEFAULT_ADDRESS (0x40). |
begin()returns voidInicijalizira PCA9685 preko I2C-a i postavlja zadanu PWM frekvenciju od 50 Hz, kakvu očekuju hobi servoi. Pozovite ga jednom u setup().
ReturnsNišta.
Parametri
Ova funkcija ne prima parametre.
setServoPulseRange(uint16_t minPulseUs, uint16_t maxPulseUs)returns voidKonfigurira širinu pulsa u mikrosekundama koju setServoAngle() mapira na minimalni i maksimalni kut. Uskladite to s tehničkim podacima vašeg serva ako pri zadanim postavkama biblioteke ne dosegne svoj puni mehanički raspon.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint16_t | minPulseUs | Širina impulsa u mikrosekundama mapirana na minimalni kut. Zadano u biblioteci: 500 us. |
uint16_t | maxPulseUs | Širina impulsa u mikrosekundama mapirana na maksimalni kut. Zadano u biblioteci: 2500 µs. |
setServoAngleRange(float minAngle, float maxAngle)returns voidKonfigurira raspon kutova, u stupnjevima, koji prihvaća setServoAngle().
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
float | minAngle | Kut u stupnjevima mapiran na minPulseUs. Zadano u biblioteci: 0. |
float | maxAngle | Kut u stupnjevima mapiran na maxPulseUs. Zadano u biblioteci: 180. |
setServoAngle(uint8_t channel, float angle)returns voidPokreće hobi servo na zadanoj frekvenciji kanala do kuta, ograničenog na konfigurirani raspon kutova. Unutar sebe pretvara kut u širinu impulsa i poziva setPWM(), uz pretpostavku da je frekvencija od 50 Hz zadana pozivom begin() po zadanom.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | channel | Broj kanala, od 0 do 15. |
float | angle | Kut u stupnjevima, ograničen na raspon postavljen pomoću setServoAngleRange(). |
Sklapanje
setServoPulseRange() i setServoAngleRange() su pozivi za jednokratno postavljanje: pokrenite ih jednom, prije prvog poziva setServoAngle(). Nakon toga, setServoAngle()
obavlja matematiku pretvaranja kuta u širinu impulsa i poziva setPWM() umjesto vas, tako da nikada
ne morate ručno izračunavati broj tikova za servo.
U dokumentaciji za setServoAngle() navodi se da se podrazumijeva setPWMFreq(50), vrijednost koju postavlja zadani poziv begin(). Ako je nešto drugo na istoj ploči u međuvremenu pozvalo setPWMFreq() na drugu vrijednost, na primjer za LED na drugom
kanalu, držite servo kanale na 50 Hz umjesto da se oslanjate na setServoAngle() na drugoj frekvenciji.