Lab_interaccio/2019/Jardi_Mecanic/Jardi_Mecanic_final/PCA9634.cpp

81 lines
2.4 KiB
C++
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
/* See the file "LICENSE" for the full license governing this code. */
#include "PCA9634.h"
static const uint8_t HydroSense_led_map[] = {2, // signal strength green
6, // gps green
7}; // error
PCA9634::PCA9634(uint8_t address){
_address = address;
_on_value = 50;
}
void PCA9634::begin(){
// initalize all leds to default PWM control
int i;
write_reg( PCA9634_REG_MODE1, 0 );
write_reg( PCA9634_REG_MODE2, 0x16 ); // INVRT | OUTDRV | OUTNE1
write_reg( PCA9634_REG_LEDOUT0, PCA9634_ALL_LED_TO_PWM );
write_reg( PCA9634_REG_LEDOUT1, PCA9634_ALL_LED_TO_PWM );
for (i=0; i < 8; i++){
set_brightness(i, 0);
}
}
void PCA9634::set_on_value(uint8_t on){
_on_value = on;
}
uint8_t PCA9634::set_mode1(uint8_t mode1){
return write_reg( PCA9634_REG_MODE1, mode1 );
}
uint8_t PCA9634::set_mode2(uint8_t mode2){
return write_reg (PCA9634_REG_MODE2, mode2);
}
uint8_t PCA9634::set_brightness(uint8_t led, uint8_t duty_cycle){
// limit led to a 3-bit unsigned value.
return write_reg( PCA9634_REG_PWM0 + ( (uint8_t) (led & 0x7) ),
duty_cycle );
}
uint8_t PCA9634::set_all_brightness(uint8_t color0, uint8_t color1, uint8_t color2, uint8_t color3, uint8_t color4, uint8_t color5, uint8_t color6, uint8_t color7){
Wire.beginTransmission( _address );
Wire.write( PCA9634_REG_PWM0 + 0xA0 );
Wire.write( color0 );
Wire.write( color1 );
Wire.write( color2 );
Wire.write( color3 );
Wire.write( color4 );
Wire.write( color5 );
Wire.write( color6 );
Wire.write( color7 );
return Wire.endTransmission( );
}
uint8_t PCA9634::write_reg(uint8_t reg, uint8_t value){
Wire.beginTransmission( _address );
Wire.write( reg );
Wire.write( value );
return Wire.endTransmission( );
}
void PCA9634::read_brightness (uint8_t led){
Wire.beginTransmission(_address); //Comienza la transmisión
Wire.write(PCA9634_REG_PWM0 + 0X80);
Wire.endTransmission(); // Finaliza la transmisión
Wire.requestFrom(_address, 8); //solicita un numero de bytes al esclavo en la dirección address
byte buff[8];
delay(100);
Wire.readBytes(buff, 8);
for (int i = 0; i < 8; i++) {
Serial.print(" ");
Serial.print(buff[i], HEX);
}
Serial.println();
}