ahi esta el codigo completo
como ya mencione en el post intente hacerlo con delay pero solo lee el 1er valor y recien cambiar cuando se resetea
![]()
const int ShiftPWM_latchPin=8;
// ** elimine el comentario de esta parte para NO usar el puerto SPI y cambie los números de pin. Esto es 2.5 veces más lento **
// #define SHIFTPWM_NOSPI
const int ShiftPWM_dataPin = 11;
const int ShiftPWM_clockPin = 13;
// Si los LED se encienden si el pin es bajo, configúrelo en verdadero; de lo contrario, configúrelo en falso.
const bool ShiftPWM_invertOutputs = true;
const bool ShiftPWM_balanceLoad = false;
#define SHIFTPWM_USE_TIMER2
#include <ShiftPWM.h>
//pulsadores
const int puls1 = 2;
const int puls2 = 3;
// Prototipos de funciones (diciéndole al compilador que estas funciones existen).
void oneByOne(void);
void inOutTwoLeds(void);
void inOutAll(void);
// Aquí establece el número de niveles de brillo, la frecuencia de actualización y el número de registros de desplazamiento.
unsigned char maxBrightness = 255;
unsigned char pwmFrequency = 75;
unsigned int numRegisters = 3;
unsigned int numOutputs = numRegisters*8;
unsigned int numRGBLeds = numRegisters*8/3;
unsigned int fadingMode = 1; //start with all LED's off.
unsigned long startTime = 0; // start time for the chosen fading mode
void setup(){
while(!Serial){
delay(100);
}
Serial.begin(9600);
pinMode(puls1, INPUT);
pinMode(puls2, INPUT);
// Establece el número de registros de 8 bits que se utilizan.
ShiftPWM.SetAmountOfRegisters(numRegisters);
// SetPinGrouping permite flexibilidad en la configuración del LED.
// Si sus LED están conectados así: RRRRGGGGBBBBRRRRGGGGBBBB, use SetPinGrouping (4).
ShiftPWM.SetPinGrouping(1); //This is the default, but I added here to demonstrate how to use the funtion
ShiftPWM.Start(pwmFrequency,maxBrightness);
printInstructions();
}
void loop()
{
valor = analogRead(A0);
if (digitalRead(puls1) == HIGH) {
delay(500);
fadingMode=fadingMode+1;
}
if (digitalRead(puls2) == HIGH) {
delay(500);
fadingMode=fadingMode-1;
}
if(fadingMode>4){
fadingMode=1;
}
if(fadingMode<1){
fadingMode=3;
}
Serial.println(fadingMode);
switch(fadingMode){
case 0:
// Turn all LED's off.
ShiftPWM.SetAll(0);
break;
case 1:
oneByOne();
break;
case 2:
inOutAll();
break;
case 3:
inOutTwoLeds();
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
default:
Serial.println("Unknown Mode!");
delay(1000);
break;
}
}
void oneByOne(void){ // Funde y desvaneze todas las salidas de a una por vez
unsigned char brightness;
unsigned long fadeTime = 500;
unsigned long loopTime = numOutputs*fadeTime*2;
unsigned long time = millis()-startTime;
unsigned long timer = time%loopTime;
unsigned long currentStep = timer%(fadeTime*2);
int activeLED = timer/(fadeTime*2);
if(currentStep <= fadeTime ){
brightness = currentStep*maxBrightness/fadeTime; ///fading in
}
else{
brightness = maxBrightness-(currentStep-fadeTime)*maxBrightness/fadeTime; ///fading out;
}
ShiftPWM.SetAll(0);
ShiftPWM.SetOne(activeLED, brightness);
}
void inOutTwoLeds(void){ // Fundido de entrada y salida de 2 salidas a la vez
unsigned long fadeTime = 500;
unsigned long loopTime = numOutputs*fadeTime;
unsigned long time = millis()-startTime;
unsigned long timer = time%loopTime;
unsigned long currentStep = timer%fadeTime;
int activeLED = timer/fadeTime;
unsigned char brightness = currentStep*maxBrightness/fadeTime;
ShiftPWM.SetAll(0);
ShiftPWM.SetOne((activeLED+1)%numOutputs,brightness);
ShiftPWM.SetOne(activeLED,maxBrightness-brightness);
}
void inOutAll(void){ // Fundido en todas las salidas a la vez
unsigned char brightness;
unsigned long fadeTime = 2000;
unsigned long time = millis()-startTime;
unsigned long currentStep = time%(fadeTime*2);
if(currentStep <= fadeTime ){
brightness = currentStep*maxBrightness/fadeTime; ///fading in
}
else{
brightness = maxBrightness-(currentStep-fadeTime)*maxBrightness/fadeTime; ///fading out;
}
ShiftPWM.SetAll(brightness);
}