Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
PCA9685.h
00001 /** 00002 * @brief PCA9685.h 00003 * @details 16-channel, 12-bit PWM Fm+ I2C-bus LED controller. 00004 * Header file. 00005 * 00006 * 00007 * @return NA 00008 * 00009 * @author Manuel Caballero 00010 * @date 31/October/2017 00011 * @version 31/October/2017 The ORIGIN 00012 * @pre NaN. 00013 * @warning NaN 00014 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). 00015 */ 00016 #ifndef PCA9685_H 00017 #define PCA9685_H 00018 00019 #include "mbed.h" 00020 00021 00022 /** 00023 Example: 00024 00025 #include "mbed.h" 00026 #include "PCA9685.h" 00027 00028 PCA9685 myPWMSensor ( I2C_SDA, I2C_SCL, PCA9685::PCA9685_ADDRESS_0, 400000 ); 00029 00030 00031 Ticker newPWMOutput; 00032 DigitalOut myled(LED1); 00033 00034 PCA9685::PCA9685_status_t aux; 00035 uint8_t myState = 0; 00036 00037 00038 void changeDATA ( void ) 00039 { 00040 myState++; 00041 } 00042 00043 00044 int main() 00045 { 00046 // Reset the device 00047 aux = myPWMSensor.PCA9685_SoftReset (); 00048 wait_us ( 5 ); 00049 00050 // Configure the PWM frequency and wake up the device 00051 aux = myPWMSensor.PCA9685_SetPWM_Freq ( 1000 ); // PWM frequency: 1kHz 00052 aux = myPWMSensor.PCA9685_SetMode ( PCA9685::MODE1_SLEEP_DISABLED ); 00053 00054 00055 newPWMOutput.attach( &changeDATA, 1 ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s ) 00056 00057 // Let the callbacks take care of everything 00058 while(1) { 00059 sleep(); 00060 00061 myled = 1; 00062 00063 switch ( myState ) { 00064 default: 00065 case 0: 00066 // All LEDs: Delay Time = 1% | PWM duty cycle = 99% 00067 aux = myPWMSensor.PCA9685_SetPWM_DutyCycle_AllLEDs ( 0, 99 ); 00068 00069 myState = 1; 00070 break; 00071 00072 case 1: 00073 // All LEDs: Delay Time = 100% | PWM duty cycle = 1% 00074 aux = myPWMSensor.PCA9685_SetPWM_DutyCycle_AllLEDs ( 100, 1 ); 00075 00076 myState = 2; 00077 break; 00078 00079 case 2: 00080 // LED1: Delay Time = 10% | PWM duty cycle = 30% 00081 aux = myPWMSensor.PCA9685_SetPWM_DutyCycle ( PCA9685::PCA9685_LED1, 10, 30 ); 00082 00083 myState = 0; 00084 break; 00085 } 00086 00087 myled = 0; 00088 } 00089 } 00090 */ 00091 00092 00093 /*! 00094 Library for the PCA9685 16-channel, 12-bit PWM Fm+ I2C-bus LED controller. 00095 */ 00096 class PCA9685 00097 { 00098 public: 00099 /** 00100 * @brief DEFAULT ADDRESSES. NOTE: There are a maximum of 64 possible programmable addresses using the 6 hardware 00101 * address pins. Two of these addresses, Software Reset and LED All Call, cannot be used 00102 * because their default power-up state is ON, leaving a maximum of 62 addresses. Using 00103 * other reserved addresses, as well as any other subcall address, will reduce the total 00104 * number of possible addresses even further. 00105 * 00106 * To access to a certain address just use the following method: PCA9685_ADDRESS_0 + Counter_Address 00107 * Ex: 00108 * PCA9685_ADDRESS_0 + 1 = 0x40 + 1 = 0x41 ( 0b1000001 ) 00109 * PCA9685_ADDRESS_0 + 10 = 0x40 + 10 = 0x4A ( 0b1001010 ) 00110 * and so on... 00111 */ 00112 typedef enum { 00113 PCA9685_ADDRESS_0 = ( 0x40 << 1 ) /*!< A5 A4 A3 A2 A1 A0: 000 000 */ 00114 } PCA9685_address_t; 00115 00116 00117 // REGISTERS 00118 /** 00119 * @brief REGISTER DEFINITIONS 00120 */ 00121 typedef enum { 00122 MODE1 = 0x00, /*!< Mode register 1 */ 00123 MODE2 = 0x01, /*!< Mode register 2 */ 00124 SUBADR1 = 0x02, /*!< I2C-bus subaddress 1 */ 00125 SUBADR2 = 0x03, /*!< I2C-bus subaddress 2 */ 00126 SUBADR3 = 0x04, /*!< I2C-bus subaddress 3 */ 00127 ALLCALLADR = 0x05, /*!< LED All Call I2C-bus address */ 00128 LED0_ON_L = 0x06, /*!< LED0 output and brightness control byte 0 */ 00129 LED0_ON_H = 0x07, /*!< LED0 output and brightness control byte 1 */ 00130 LED0_OFF_L = 0x08, /*!< LED0 output and brightness control byte 2 */ 00131 LED0_OFF_H = 0x09, /*!< LED0 output and brightness control byte 3 */ 00132 LED1_ON_L = 0x0A, /*!< LED1 output and brightness control byte 0 */ 00133 LED1_ON_H = 0x0B, /*!< LED1 output and brightness control byte 1 */ 00134 LED1_OFF_L = 0x0C, /*!< LED1 output and brightness control byte 2 */ 00135 LED1_OFF_H = 0x0D, /*!< LED1 output and brightness control byte 3 */ 00136 LED2_ON_L = 0x0E, /*!< LED2 output and brightness control byte 0 */ 00137 LED2_ON_H = 0x0F, /*!< LED2 output and brightness control byte 1 */ 00138 LED2_OFF_L = 0x10, /*!< LED2 output and brightness control byte 2 */ 00139 LED2_OFF_H = 0x11, /*!< LED2 output and brightness control byte 3 */ 00140 LED3_ON_L = 0x12, /*!< LED3 output and brightness control byte 0 */ 00141 LED3_ON_H = 0x13, /*!< LED3 output and brightness control byte 1 */ 00142 LED3_OFF_L = 0x14, /*!< LED3 output and brightness control byte 2 */ 00143 LED3_OFF_H = 0x15, /*!< LED3 output and brightness control byte 3 */ 00144 LED4_ON_L = 0x16, /*!< LED4 output and brightness control byte 0 */ 00145 LED4_ON_H = 0x17, /*!< LED4 output and brightness control byte 1 */ 00146 LED4_OFF_L = 0x18, /*!< LED4 output and brightness control byte 2 */ 00147 LED4_OFF_H = 0x19, /*!< LED4 output and brightness control byte 3 */ 00148 LED5_ON_L = 0x1A, /*!< LED5 output and brightness control byte 0 */ 00149 LED5_ON_H = 0x1B, /*!< LED5 output and brightness control byte 1 */ 00150 LED5_OFF_L = 0x1C, /*!< LED5 output and brightness control byte 2 */ 00151 LED5_OFF_H = 0x1D, /*!< LED5 output and brightness control byte 3 */ 00152 LED6_ON_L = 0x1E, /*!< LED6 output and brightness control byte 0 */ 00153 LED6_ON_H = 0x1F, /*!< LED6 output and brightness control byte 1 */ 00154 LED6_OFF_L = 0x20, /*!< LED6 output and brightness control byte 2 */ 00155 LED6_OFF_H = 0x21, /*!< LED6 output and brightness control byte 3 */ 00156 LED7_ON_L = 0x22, /*!< LED7 output and brightness control byte 0 */ 00157 LED7_ON_H = 0x23, /*!< LED7 output and brightness control byte 1 */ 00158 LED7_OFF_L = 0x24, /*!< LED7 output and brightness control byte 2 */ 00159 LED7_OFF_H = 0x25, /*!< LED7 output and brightness control byte 3 */ 00160 LED8_ON_L = 0x26, /*!< LED8 output and brightness control byte 0 */ 00161 LED8_ON_H = 0x27, /*!< LED8 output and brightness control byte 1 */ 00162 LED8_OFF_L = 0x28, /*!< LED8 output and brightness control byte 2 */ 00163 LED8_OFF_H = 0x29, /*!< LED8 output and brightness control byte 3 */ 00164 LED9_ON_L = 0x2A, /*!< LED9 output and brightness control byte 0 */ 00165 LED9_ON_H = 0x2B, /*!< LED9 output and brightness control byte 1 */ 00166 LED9_OFF_L = 0x2C, /*!< LED9 output and brightness control byte 2 */ 00167 LED9_OFF_H = 0x2D, /*!< LED9 output and brightness control byte 3 */ 00168 LED10_ON_L = 0x2E, /*!< LED10 output and brightness control byte 0 */ 00169 LED10_ON_H = 0x2F, /*!< LED10 output and brightness control byte 1 */ 00170 LED10_OFF_L = 0x30, /*!< LED10 output and brightness control byte 2 */ 00171 LED10_OFF_H = 0x31, /*!< LED10 output and brightness control byte 3 */ 00172 LED11_ON_L = 0x32, /*!< LED11 output and brightness control byte 0 */ 00173 LED11_ON_H = 0x33, /*!< LED11 output and brightness control byte 1 */ 00174 LED11_OFF_L = 0x34, /*!< LED11 output and brightness control byte 2 */ 00175 LED11_OFF_H = 0x35, /*!< LED11 output and brightness control byte 3 */ 00176 LED12_ON_L = 0x36, /*!< LED12 output and brightness control byte 0 */ 00177 LED12_ON_H = 0x37, /*!< LED12 output and brightness control byte 1 */ 00178 LED12_OFF_L = 0x38, /*!< LED12 output and brightness control byte 2 */ 00179 LED12_OFF_H = 0x39, /*!< LED12 output and brightness control byte 3 */ 00180 LED13_ON_L = 0x3A, /*!< LED13 output and brightness control byte 0 */ 00181 LED13_ON_H = 0x3B, /*!< LED13 output and brightness control byte 1 */ 00182 LED13_OFF_L = 0x3C, /*!< LED13 output and brightness control byte 2 */ 00183 LED13_OFF_H = 0x3D, /*!< LED13 output and brightness control byte 3 */ 00184 LED14_ON_L = 0x3E, /*!< LED14 output and brightness control byte 0 */ 00185 LED14_ON_H = 0x3F, /*!< LED14 output and brightness control byte 1 */ 00186 LED14_OFF_L = 0x40, /*!< LED14 output and brightness control byte 2 */ 00187 LED14_OFF_H = 0x41, /*!< LED14 output and brightness control byte 3 */ 00188 LED15_ON_L = 0x42, /*!< LED15 output and brightness control byte 0 */ 00189 LED15_ON_H = 0x43, /*!< LED15 output and brightness control byte 1 */ 00190 LED15_OFF_L = 0x44, /*!< LED15 output and brightness control byte 2 */ 00191 LED15_OFF_H = 0x45, /*!< LED15 output and brightness control byte 3 */ 00192 ALL_LED_ON_L = 0xFA, /*!< load all the LEDn_ON registers, byte 0 */ 00193 ALL_LED_ON_H = 0xFB, /*!< load all the LEDn_ON registers, byte 1 */ 00194 ALL_LED_OFF_L = 0xFC, /*!< load all the LEDn_OFF registers, byte 0 */ 00195 ALL_LED_OFF_H = 0xFD, /*!< load all the LEDn_OFF registers, byte 1 */ 00196 PRE_SCALE = 0xFE, /*!< prescaler for PWM output frequency */ 00197 TESTMODE = 0xFF /*!< defines the test mode to be entered */ 00198 } PCA9685_registers_t; 00199 00200 00201 00202 // LED Sub Call I2C-bus addresses 00203 /** 00204 * @brief SUBADDRESS. NOTE: At power-up, Sub Call I2C-bus addresses are disabled. PCA9685 does not send an 00205 * ACK when E2h (R/W = 0) or E3h (R/W = 1), E4h (R/W = 0) or E5h (R/W = 1), or 00206 * E8h (R/W = 0) or E9h (R/W = 1) is sent by the master. 00207 */ 00208 typedef enum { 00209 SUBADR1_REG = ( 0xE2 << 1 ), /*!< Subaddress 1 */ 00210 SUBADR2_REG = ( 0xE4 << 1 ), /*!< Subaddress 2 */ 00211 SUBADR3_REG = ( 0xE8 << 1 ) /*!< Subaddress 3 */ 00212 } PCA9685_subaddresses_t; 00213 00214 00215 00216 00217 // Software Reset I2C-bus address 00218 /** 00219 * @brief SWRST. NOTE: The Software Reset address (SWRST Call) must be used with 00220 * R/#W = logic 0. If R/#W = logic 1, the PCA9685 does not acknowledge the SWRST. 00221 */ 00222 typedef enum { 00223 GENERAL_CALL_ADDRESS = ( 0x00 << 1 ), /*!< Software reset */ 00224 SWRST = 0x06 /*!< Software reset */ 00225 } PCA9685_software_reset_t; 00226 00227 00228 00229 00230 // MODE REGISTER 1, MODE1 00231 /** 00232 * @brief RESTART 00233 */ 00234 typedef enum { 00235 MODE1_RESTART_MASK = ( 1 << 7 ), /*!< RESTART bit mask */ 00236 MODE1_RESTART_ENABLED = ( 1 << 7 ), /*!< Restart enabled */ 00237 MODE1_RESTART_DISABLED = ( 0 << 7 ) /*!< Restart disabled ( default ) */ 00238 } PCA9685_mode1_restart_t; 00239 00240 00241 /** 00242 * @brief EXTCLK 00243 */ 00244 typedef enum { 00245 MODE1_EXTCLK_MASK = ( 1 << 6 ), /*!< EXTCLK bit mask */ 00246 MODE1_EXTCLK_ENABLED = ( 1 << 6 ), /*!< Use EXTERNAL clock */ 00247 MODE1_EXTCLK_DISABLED = ( 0 << 6 ) /*!< Use INTERNAL clock ( default ) */ 00248 } PCA9685_mode1_extclk_t; 00249 00250 00251 /** 00252 * @brief AI 00253 */ 00254 typedef enum { 00255 MODE1_AI_MASK = ( 1 << 5 ), /*!< AI bit mask */ 00256 MODE1_AI_ENABLED = ( 1 << 5 ), /*!< Auto-Increment enabled */ 00257 MODE1_AI_DISABLED = ( 0 << 5 ) /*!< Auto-Increment disabled ( default ) */ 00258 } PCA9685_mode1_ai_t; 00259 00260 00261 /** 00262 * @brief SLEEP 00263 */ 00264 typedef enum { 00265 MODE1_SLEEP_MASK = ( 1 << 4 ), /*!< SLEEP bit mask */ 00266 MODE1_SLEEP_ENABLED = ( 1 << 4 ), /*!< Low power mode. Oscillator off ( default ) */ 00267 MODE1_SLEEP_DISABLED = ( 0 << 4 ) /*!< Normal mode */ 00268 } PCA9685_mode1_sleep_t; 00269 00270 00271 /** 00272 * @brief SUB1 00273 */ 00274 typedef enum { 00275 MODE1_SUB1_MASK = ( 1 << 3 ), /*!< SUB1 bit mask */ 00276 MODE1_SUB1_ENABLED = ( 1 << 3 ), /*!< PCA9685 responds to I2C-bus subaddress 1 */ 00277 MODE1_SUB1_DISABLED = ( 0 << 3 ) /*!< PCA9685 does not respond to I2C-bus subaddress 1 ( default ) */ 00278 } PCA9685_mode1_sub1_t; 00279 00280 00281 /** 00282 * @brief SUB2 00283 */ 00284 typedef enum { 00285 MODE1_SUB2_MASK = ( 1 << 2 ), /*!< SUB2 bit mask */ 00286 MODE1_SUB2_ENABLED = ( 1 << 2 ), /*!< PCA9685 responds to I2C-bus subaddress 2 */ 00287 MODE1_SUB2_DISABLED = ( 0 << 2 ) /*!< PCA9685 does not respond to I2C-bus subaddress 2 ( default ) */ 00288 } PCA9685_mode1_sub2_t; 00289 00290 00291 /** 00292 * @brief SUB3 00293 */ 00294 typedef enum { 00295 MODE1_SUB3_MASK = ( 1 << 1 ), /*!< SUB1 bit mask */ 00296 MODE1_SUB3_ENABLED = ( 1 << 1 ), /*!< PCA9685 responds to I2C-bus subaddress 3 */ 00297 MODE1_SUB3_DISABLED = ( 0 << 1 ) /*!< PCA9685 does not respond to I2C-bus subaddress 3 ( default ) */ 00298 } PCA9685_mode1_sub3_t; 00299 00300 00301 /** 00302 * @brief ALLCALL 00303 */ 00304 typedef enum { 00305 MODE1_ALLCALL_MASK = ( 1 << 0 ), /*!< ALLCALL bit mask */ 00306 MODE1_ALLCALL_ENABLED = ( 1 << 0 ), /*!< PCA9685 responds to LED All Call I2C-bus address ( default ) */ 00307 MODE1_ALLCALL_DISABLED = ( 0 << 0 ) /*!< PCA9685 does not respond to LED All Call I2C-bus address */ 00308 } PCA9685_mode1_allcall_t; 00309 00310 00311 00312 // MODE REGISTER 2, MODE2 00313 /** 00314 * @brief INVRT 00315 */ 00316 typedef enum { 00317 MODE2_INVRT_MASK = ( 1 << 4 ), /*!< INVRT bit mask */ 00318 MODE2_INVRT_ENABLED = ( 1 << 4 ), /*!< Output logic state inverted. Value to use when no external driver used. Applicable when OE = 0 */ 00319 MODE2_INVRT_DISABLED = ( 0 << 4 ) /*!< Output logic state not inverted. Value to use when external driver used. Applicable when OE = 0. ( default ) */ 00320 } PCA9685_mode2_invrt_t; 00321 00322 00323 /** 00324 * @brief OCH 00325 */ 00326 typedef enum { 00327 MODE2_OCH_MASK = ( 1 << 3 ), /*!< ALLCALL bit mask */ 00328 MODE2_OCH_OUTPUT_CHANGE_STOP_CMD = ( 0 << 3 ), /*!< Outputs change on STOP command ( default ) */ 00329 MODE2_OCH_OUTPUT_CHANGE_ACK_CMD = ( 1 << 3 ) /*!< Outputs change on ACK */ 00330 } PCA9685_mode2_och_t; 00331 00332 00333 /** 00334 * @brief OUTDRV 00335 */ 00336 typedef enum { 00337 MODE2_OUTDRV_MASK = ( 1 << 2 ), /*!< OUTDRV bit mask */ 00338 MODE2_OUTDRV_TOTEM_POLE_STRUCTURE = ( 1 << 2 ), /*!< The 16 LEDn outputs are configured with a totem pole structure ( default ) */ 00339 MODE2_OUTDRV_OPEN_DRAIN_STRUCTURE = ( 0 << 2 ) /*!< The 16 LEDn outputs are configured with an open-drain structure */ 00340 } PCA9685_mode2_outdrv_t; 00341 00342 00343 /** 00344 * @brief OUTNE 00345 */ 00346 typedef enum { 00347 MODE2_OUTNE_MASK = ( 3 << 0 ), /*!< OUTNE bit mask */ 00348 MODE2_OUTNE_LEDn_LOW = ( 0 << 0 ), /*!< When #OE = 1 (output drivers not enabled), LEDn = 0 ( default ) */ 00349 MODE2_OUTNE_LEDn_HIGH = ( 1 << 0 ), /*!< When #OE = 1 (output drivers not enabled): LEDn = 1 when OUTDRV = 1 00350 LEDn = high-impedance when OUTDRV = 0 (same as OUTNE[1:0] = 10) */ 00351 MODE2_OUTNE_LEDn_HIGH_IMPEDANCE = ( 2 << 0 ) /*!< When #OE = 1 (output drivers not enabled), LEDn = high-impedance */ 00352 } PCA9685_mode2_outne_t; 00353 00354 00355 00356 00357 /** 00358 * @brief INTERNAL CONSTANTS 00359 */ 00360 typedef enum { 00361 PCA9685_INTERNAL_CLOCK = 25000000, /*!< Internal clock frequency */ 00362 PCA9685_ADC_STEPS = 4096 /*!< ADC 12-bits */ 00363 } PCA9685_internal_parameters_t; 00364 00365 00366 typedef enum { 00367 PCA9685_LED0 = 0x00, /*!< LED0 channel */ 00368 PCA9685_LED1 = 0x01, /*!< LED1 channel */ 00369 PCA9685_LED2 = 0x02, /*!< LED2 channel */ 00370 PCA9685_LED3 = 0x03, /*!< LED3 channel */ 00371 PCA9685_LED4 = 0x04, /*!< LED4 channel */ 00372 PCA9685_LED5 = 0x05, /*!< LED5 channel */ 00373 PCA9685_LED6 = 0x06, /*!< LED6 channel */ 00374 PCA9685_LED7 = 0x07, /*!< LED7 channel */ 00375 PCA9685_LED8 = 0x08, /*!< LED8 channel */ 00376 PCA9685_LED9 = 0x09, /*!< LED9 channel */ 00377 PCA9685_LED10 = 0x0A, /*!< LED10 channel */ 00378 PCA9685_LED11 = 0x0B, /*!< LED11 channel */ 00379 PCA9685_LED12 = 0x0C, /*!< LED12 channel */ 00380 PCA9685_LED13 = 0x0D, /*!< LED13 channel */ 00381 PCA9685_LED14 = 0x0E, /*!< LED14 channel */ 00382 PCA9685_LED15 = 0x0F /*!< LED15 channel */ 00383 } PCA9685_led_channel_t ; 00384 00385 00386 00387 00388 00389 /** 00390 * @brief INTERNAL CONSTANTS 00391 */ 00392 typedef enum { 00393 PCA9685_SUCCESS = 0, 00394 PCA9685_FAILURE = 1, 00395 I2C_SUCCESS = 0 /*!< I2C communication was fine */ 00396 } PCA9685_status_t; 00397 00398 00399 // MACRO: round function 00400 #define _MYROUND( x ) ({ \ 00401 uint32_t aux_pre; \ 00402 float aux_x; \ 00403 \ 00404 aux_x = (x); \ 00405 aux_pre = (x); \ 00406 aux_x -= aux_pre; \ 00407 aux_x *= 10; \ 00408 \ 00409 if ( aux_x >= 5 ) \ 00410 aux_pre++; \ 00411 \ 00412 aux_pre; \ 00413 }) 00414 00415 00416 00417 00418 00419 /** Create an PCA9685 object connected to the specified I2C pins. 00420 * 00421 * @param sda I2C data pin 00422 * @param scl I2C clock pin 00423 * @param addr I2C slave address 00424 * @param freq I2C frequency in Hz. 00425 */ 00426 PCA9685 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); 00427 00428 /** Delete PCA9685 object. 00429 */ 00430 ~PCA9685(); 00431 00432 /** It resets the device by software. 00433 */ 00434 PCA9685_status_t PCA9685_SoftReset ( void ); 00435 00436 /** It configures the mode of the device: Sleep or Normal operation mode. 00437 */ 00438 PCA9685_status_t PCA9685_SetMode ( PCA9685_mode1_sleep_t myMode ); 00439 00440 /** It configures a new PWM frequency. 00441 */ 00442 PCA9685_status_t PCA9685_SetPWM_Freq ( float myNewFrequency ); 00443 00444 /** It configures a new PWM duty cycle on a given LED. 00445 */ 00446 PCA9685_status_t PCA9685_SetPWM_DutyCycle ( PCA9685_led_channel_t myLEDchannel, uint8_t myDelay, uint8_t myPWM_DutyCycle ); 00447 00448 /** It configures a new PWM duty cycle on all LEDs. 00449 */ 00450 PCA9685_status_t PCA9685_SetPWM_DutyCycle_AllLEDs ( uint8_t myDelay, uint8_t myPWM_DutyCycle ); 00451 00452 /** It sets the LEDn ON. 00453 */ 00454 PCA9685_status_t PCA9685_SetLED_ON ( PCA9685_led_channel_t myLEDchannel ); 00455 00456 /** It sets the LEDn OFF. 00457 */ 00458 PCA9685_status_t PCA9685_SetLED_OFF ( PCA9685_led_channel_t myLEDchannel ); 00459 00460 /** It sets All LEDs ON. 00461 */ 00462 PCA9685_status_t PCA9685_SetAllLED_ON ( void ); 00463 00464 /** It sets All LEDs OFF. 00465 */ 00466 PCA9685_status_t PCA9685_SetAllLED_OFF ( void ); 00467 00468 /** It sets SUB1 mode. 00469 */ 00470 PCA9685_status_t PCA9685_SetSUB1 ( PCA9685_mode1_sub1_t mySUB1_mode ); 00471 00472 /** It sets SUB2 mode. 00473 */ 00474 PCA9685_status_t PCA9685_SetSUB2 ( PCA9685_mode1_sub2_t mySUB2_mode ); 00475 00476 /** It sets SUB3 mode. 00477 */ 00478 PCA9685_status_t PCA9685_SetSUB3 ( PCA9685_mode1_sub3_t mySUB3_mode ); 00479 00480 /** It sets ALLCALL mode. 00481 */ 00482 PCA9685_status_t PCA9685_SetALLCALL ( PCA9685_mode1_allcall_t myALLCALL_mode ); 00483 00484 /** It sets INVERT mode. 00485 */ 00486 PCA9685_status_t PCA9685_SetINVERT ( PCA9685_mode2_invrt_t myINVERT_mode ); 00487 00488 /** It sets OCH mode. 00489 */ 00490 PCA9685_status_t PCA9685_SetOCH ( PCA9685_mode2_och_t myOCH_mode ); 00491 00492 /** It sets OUTDRV mode. 00493 */ 00494 PCA9685_status_t PCA9685_SetOUTDRV ( PCA9685_mode2_outdrv_t myOUTDRV_mode ); 00495 00496 00497 00498 private: 00499 I2C i2c; 00500 uint32_t PCA9685_Addr; 00501 }; 00502 00503 #endif
Generated on Wed Jul 13 2022 01:54:44 by
