Created
January 16, 2018 21:42
-
-
Save HectorTorres/6e0c1290ac01b7f71bfa5f0acdebaba6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Wire.h> | |
#include <Adafruit_PWMServoDriver.h> | |
// called this way, it uses the default address 0x40 | |
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); | |
int analog_value=0; | |
void setup() { | |
pwm.begin(); | |
pwm.setPWMFreq(1600); // This is the maximum PWM frequency | |
Wire.setClock(400000); //Incrementar la velocidad del I2C | |
} | |
void loop() { | |
number_led(analogRead(A0)); | |
} | |
void number_led(uint16_t number){ | |
uint8_t finalLED = 0; | |
uint8_t numberLED = map(number, 0, 1023, 0, 15); //remapea o reajusta el valor del ADC para solo un rango de 0 a 15 | |
// de esta manera sabemos que LED es el que se va a encender. Sin embargo, para el valor del PWM necesitamos saber | |
// por cuanto se excede de la unidad del LED para que ese "extra" se module con un PWM. Para que el incremento se vea | |
// mas organico. | |
uint16_t numberPWM = number-(numberLED*68); | |
numberPWM = map(numberPWM, 0, 68, 0, 500); | |
for (uint8_t pwmnum=0; pwmnum < numberLED; pwmnum++) {//Incremento para los niveles, en este caso estamos usando 16 canales | |
pwm.setPWM(pwmnum, 4096, 0); //Activa todos los LEDs que corresponden a el valor activo | |
finalLED=pwmnum; //Guarda el valor del último LED para este ciclo. | |
} | |
pwm.setPWM(finalLED+1,0,numberPWM); // El valor del remanente entre un LED y otro se emite con un % de PWM. | |
finalLED=0; | |
delay(100); | |
for (uint8_t pwmnum=0; pwmnum < 16; pwmnum++) { //Ciclo para borrar los LEDs | |
pwm.setPWM(16-pwmnum, 0, 4096 ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment