Estoy tratando de cambiar entre 4 brillos diferentes de un LED usando un Arduino Uno. He usado analogWrite y no digitalWrite con PWM. El problema al que me enfrento es que el brillo no cambia en absoluto cuando se presiona el botón. Aquí está mi código:
#define led 11 //assign pin 11 to LED
#define BUTTON 7 //assign pin 7 to pushbutton
int val=0; //val used to check current status of pushbutton later in the program
int old_val=0; //old_val to check previous status
int state=0; //state to check button presses
void setup()
{
pinMode(led,OUTPUT);
pinMode(BUTTON,INPUT);
}
void loop()
{
val=digitalRead(BUTTON); //check status of pushbutton
if((val==HIGH)&&(old_val==LOW)) //button pressed
{
state++; //increment state
delay(10); //debounce consideration
if(state>4) //want only 4 brightness options
{
state=1;
delay(10);
}
}
old_val=val;
if(state==1)
{
analogWrite(led,0); //0 brightness
}
else if(state==2)
{
analogWrite(led,75);
}
else if(state==3)
{
analogWrite(led,150);
}
else if(state==4)
{
analogWrite(led,255);
}
}
¿Como puedo resolver este problema?
Aunque su código tiene algunas debilidades, no debería generar el comportamiento que describe. No ha proporcionado ningún esquema de la configuración, por lo que mi respuesta es realmente solo una suposición, pero la falta de una resistencia desplegable probablemente causaría exactamente lo que está diciendo: la lectura digital del pin del botón cambia esporádicamente entre ALTO y BAJO, y el led parece parpadear al azar en lugar de cambiar el brillo como se esperaba.
INPUT_PULLUP
en lugar deINPUT
#define led 11 //assign pin 11 to LED
#define BUTTON 7 //assign pin 7 to pushbutton
#define SAMPLING 250 //250milliSecond per press, used for debouncing
static unsigned long TIMER = 0; //record current millis()
byte state = 0; //val used to check current status of pushbutton later in the program
byte brightness[] = {0, 75, 150, 255}; //comment this out if not picky
void setup()
{
pinMode(led,OUTPUT);
pinMode(BUTTON,INPUT);
digitalWrite(BUTTON, HIGH); //use internal pull up resistor, no need for external resistor
}
void loop()
{
if(millis() - TIMER >= SAMPLING) //sampling ~= 250mS
{
TIMER = millis();
if(!digitalRead(BUTTON)) //button pressed, pulled low
{
state++; //increment state
if(state > 3) //want only 4 brightness options, 0, 1, 2, 3
state = 0;
analogWrite(led, brightness[state]); //if you aren't picky, use analogWrite(led, state*85);
//no byte array;
//0*85 = 0
//1*85 = 85
//2*85 = 170
//3*85 = 255
}
}
}
usuario17592
usuario22934
Yahya Tawil
usuario22934
Yahya Tawil
felipe cuerno