PCA9685_Handler
drivers
drivers/PCA9685_Handler.h
driver
experimental
experimental
Driver PCA9685 Gestion du driver PCA9685 pour le contrôle des LED et des servomoteurs. Communication via I2C, 16 canaux PWM indépendants, résolution 12 bits (0-4095). Fonctionnalités : /
Méthodes publiques
| Méthode | Description | Paramètres | Retour |
|---|---|---|---|
|
PCA9685_Handler()
PCA9685_Handler(uint8_t i2cAddress = 0x40);
|
Constructeur Initialise l'objet handler pour le PCA9685 / | i2cAddress: : adresse I2C du composant (0x40 par défaut, plage 0x40-0x7F selon A0-A5) / | |
|
begin()
begin(float freqHz = 50.0f);
|
Méthode begin() Initialise le bus I2C, réinitialise le composant (reset logiciel) puis configure la fréquence PWM par défaut. / | freqHz: : fréquence PWM souhaitée en Hz (défaut 50 Hz, typique servomoteurs) | truetrue si l'initialisation réussit (composant détecté sur le bus), false sinon / |
|
reset()
reset();
|
Méthode reset() Effectue un reset logiciel du PCA9685 (registre MODE1). / | ||
|
setPWMFreq()
setPWMFreq(float freqHz);
|
Méthode setPWMFreq() Règle la fréquence PWM globale du composant (commune à tous les canaux). / | freqHz: : fréquence souhaitée en Hz (plage utile ~24Hz à 1526Hz) / | |
|
setPWM()
setPWM(uint8_t channel, uint16_t on, uint16_t off);
|
Méthode setPWM() Règle directement les compteurs ON/OFF (12 bits, 0-4095) d'un canal. / | channel: : numéro du canal (0 à 15) on: : instant de mise à 1 dans la période (0-4095) off: : instant de mise à 0 dans la période (0-4095) / |
|
|
write()
write(uint8_t channel, uint16_t value);
|
écriture d'un canal Ecrit un rapport cyclique dans un canal spécifique. / | channel: : numéro du canal à écrire (0 à 15) value: : valeur du rapport cyclique (0 à 4095, 12 bits) |
valeurvaleur effectivement écrite, ou -1 si le canal ou la valeur est invalide / |
Méthodes privées
readRegister(uint8_t reg);;
writeRegister(uint8_t reg, uint8_t value);;
begin(115200);;
while (!Serial) {;
delay(10);;
println("Erreur d'initialisation du PCA9685 !");;
while (1);;
write(PCA9685_CHANNEL, 2048);;
print("Canal ");;
print(PCA9685_CHANNEL);;
print(" : ");;
println(value);;
delay(500);;
Variables membres
uint8_t _i2cAddress;
float _oscillatorFreq;
Code source
#pragma once
#include <Arduino.h>
#include "../StatusDevice.h"
namespace crepp::drivers {
/*
* =========================
* Driver PCA9685
* -------------------------
* Gestion du driver PCA9685 pour le contrôle des LED et des servomoteurs.
* Communication via I2C, 16 canaux PWM indépendants, résolution 12 bits (0-4095).
*
* @badge driver
* @badge experimental
*
* Fonctionnalités :
* - Initialisation du driver (reset + configuration de la fréquence PWM)
* - Réglage de la fréquence PWM globale
* - Ecriture brute ON/OFF sur un canal
* - Ecriture d'un rapport cyclique (0-4095) sur un canal
* =========================
*/
class PCA9685_Handler {
public:
/*
* =========================
* Constructeur
* =========================
* Initialise l'objet handler pour le PCA9685
* @param i2cAddress : adresse I2C du composant (0x40 par défaut, plage 0x40-0x7F selon A0-A5)
*/
explicit PCA9685_Handler(uint8_t i2cAddress = 0x40);
/*
* =========================
* Méthode begin()
* =========================
* Initialise le bus I2C, réinitialise le composant (reset logiciel)
* puis configure la fréquence PWM par défaut.
* @param freqHz : fréquence PWM souhaitée en Hz (défaut 50 Hz, typique servomoteurs)
* @return true si l'initialisation réussit (composant détecté sur le bus), false sinon
*/
bool begin(float freqHz = 50.0f);
/*
* =========================
* Méthode reset()
* =========================
* Effectue un reset logiciel du PCA9685 (registre MODE1).
*/
void reset();
/*
* =========================
* Méthode setPWMFreq()
* =========================
* Règle la fréquence PWM globale du composant (commune à tous les canaux).
* @param freqHz : fréquence souhaitée en Hz (plage utile ~24Hz à 1526Hz)
*/
void setPWMFreq(float freqHz);
/*
* =========================
* Méthode setPWM()
* =========================
* Règle directement les compteurs ON/OFF (12 bits, 0-4095) d'un canal.
* @param channel : numéro du canal (0 à 15)
* @param on : instant de mise à 1 dans la période (0-4095)
* @param off : instant de mise à 0 dans la période (0-4095)
*/
void setPWM(uint8_t channel, uint16_t on, uint16_t off);
/*
* =========================
* écriture d'un canal
* =========================
* Ecrit un rapport cyclique dans un canal spécifique.
* @param channel : numéro du canal à écrire (0 à 15)
* @param value : valeur du rapport cyclique (0 à 4095, 12 bits)
* @return valeur effectivement écrite, ou -1 si le canal ou la valeur est invalide
*/
int16_t write(uint8_t channel, uint16_t value);
private:
uint8_t _i2cAddress;
float _oscillatorFreq;
uint8_t readRegister(uint8_t reg);
void writeRegister(uint8_t reg, uint8_t value);
};
/*
@example
@include
#include <crepp/drivers/PCA9685_Handler.h>
@end_include
@macro
#define PCA9685
#define PCA9685_CHANNEL 0
@end_macro
@instance
crepp::drivers::PCA9685_Handler driver;
@end_instance
@setup
Serial.begin(115200);
while (!Serial) {
delay(10); // Attente de la connexion série
}
if (!driver.begin()) {
Serial.println("Erreur d'initialisation du PCA9685 !");
while (1);
}
@end_setup
@loop
int16_t value = driver.write(PCA9685_CHANNEL, 2048); // ~50% de rapport cyclique
Serial.print("Canal ");
Serial.print(PCA9685_CHANNEL);
Serial.print(" : ");
Serial.println(value);
delay(500);
@end_loop
@end_example
*/
} // namespace crepp::drivers