Pages: [1]   Go Down
Author Topic: LED brightness control  (Read 896 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Have just got the arduino and trying some simple things on it, here one of them;
I want to increase the brightness of the LED 20 unit each time I press the push button, quite simple.
However, It doesn't work, the LED light tremble and when I push the button it stops trembling.

Here's the code;

Quote
int but = 8;
int led = 9;
int val = 0;

void setup()
{
  pinMode(but, INPUT);
  pinMode(led, OUTPUT);
}

void loop()
{
  if(digitalRead(but) == 1)
  {
    val = val + 20;
  }
  analogWrite(led,val);
}
Logged

Queens, New York
Offline Offline
Faraday Member
**
Karma: 86
Posts: 3487
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I dont think it is actually trembling, I think it is just cycling so fast that it is hard to see anything. Look at the state change example, and debounce example, then try the LED.
Logged

Created Libraries:
NPV2 (NewPasswordV2),  TFT_Extension, OneWireKeypad, SerialServo.
Will provide libraries if asked in PM or forum.

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

But at least at the beginning the led must not shine, right ?
However, it immediately starts trebling.
Logged

Queens, New York
Offline Offline
Faraday Member
**
Karma: 86
Posts: 3487
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
However, it immediately starts trebling.
Even without the button being pressed? Does your button have a pull down or up resistor?
Code:
if(digitalRead(but) == 1)
This is looking for the button to be HIGH when pressed, so if you have a floating input (no pulling resistor), that would cause the flicker.
Logged

Created Libraries:
NPV2 (NewPasswordV2),  TFT_Extension, OneWireKeypad, SerialServo.
Will provide libraries if asked in PM or forum.

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
However, it immediately starts trebling.
Even without the button being pressed? Does your button have a pull down or up resistor?
Code:
if(digitalRead(but) == 1)
This is looking for the button to be HIGH when pressed, so if you have a floating input (no pulling resistor), that would cause the flicker.

The button I have is that;
Logged

Lost Wages
Offline Offline
Full Member
***
Karma: 11
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here's my try:

Connect a SPST N.O. momentary from pin 8 to GND with no resistor.
Connect an LED from pin 9 to an LED in series with a current-limiting resistor (220 to 330 ohm) to GND.

My code:
Code:
int but = 8;
int led = 9;
int val = 0;

void setup()
{
  pinMode(but, INPUT_PULLUP);
  pinMode(led, OUTPUT);             // not needed, but I like to be explicit
}

void loop()
{
  if(digitalRead(but) == LOW)
  {
    //here: the button is pushed
     val += 20;                                 // increment the brightness of the LED by 1/24th
    val = min(val, 255);                     // maximum PWM value is 255
  }
  else
  {
    //here: the button has been released
    val = 0;                                  // turn the LED OFF
  }

  analogWrite(led,val);                 // adjust the PWM
  delay( 250 );                           // give yourself a chance to see the result
}

should take about 3 seconds from OFF to full brightness. If you need it to be quicker, adjust the delay time
the delay also tends to debounce the switch too
Logged

Queens, New York
Offline Offline
Faraday Member
**
Karma: 86
Posts: 3487
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok those need to be debounced to work properly. So even if you just press it once, being that it is not being debounce, it will put out a LOT of noise. Meaning even if YOU press it once, the arduino will see that it was pressed multiple times, because of that noise. Also did you include a pulling resistor?
Logged

Created Libraries:
NPV2 (NewPasswordV2),  TFT_Extension, OneWireKeypad, SerialServo.
Will provide libraries if asked in PM or forum.

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here's my try:

Connect a SPST N.O. momentary from pin 8 to GND with no resistor.
Connect an LED from pin 9 to an LED in series with a current-limiting resistor (220 to 330 ohm) to GND.

My code:
Code:
int but = 8;
int led = 9;
int val = 0;

void setup()
{
  pinMode(but, INPUT_PULLUP);
  pinMode(led, OUTPUT);             // not needed, but I like to be explicit
}

void loop()
{
  if(digitalRead(but) == LOW)
  {
    //here: the button is pushed
     val += 20;                                 // increment the brightness of the LED by 1/24th
    val = min(val, 255);                     // maximum PWM value is 255
  }
  else
  {
    //here: the button has been released
    val = 0;                                  // turn the LED OFF
  }

  analogWrite(led,val);                 // adjust the PWM
  delay( 250 );                           // give yourself a chance to see the result
}

should take about 3 seconds from OFF to full brightness. If you need it to be quicker, adjust the delay time
the delay also tends to debounce the switch too

Thank you, that one worked, but I didn't know input_pullup thing.

Ok those need to be debounced to work properly. So even if you just press it once, being that it is not being debounce, it will put out a LOT of noise. Meaning even if YOU press it once, the arduino will see that it was pressed multiple times, because of that noise. Also did you include a pulling resistor?

Don't know what pulling resistor is
What exactly is it ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Don't know what pulling resistor is
What exactly is it ?

http://en.wikipedia.org/wiki/Pull-up_resistor
Logged

Lost Wages
Offline Offline
Full Member
***
Karma: 11
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

look here:

http://arduino.cc/en/Tutorial/InputPullupSerial
Logged

Queens, New York
Offline Offline
Faraday Member
**
Karma: 86
Posts: 3487
"Of all the things I've ever lost, I miss my mind the most" -Ozzy Osbourne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A "pulling" resistor is my terminology of a resistor being either a pull down or pull up resistor. Now being that most of the time (if not all the time) we don't know what your setup is, so we assume it is being pulled down when it could be pulling up. So by saying "pulling" it means either or.
Logged

Created Libraries:
NPV2 (NewPasswordV2),  TFT_Extension, OneWireKeypad, SerialServo.
Will provide libraries if asked in PM or forum.

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here's my try:

Connect a SPST N.O. momentary from pin 8 to GND with no resistor.
Connect an LED from pin 9 to an LED in series with a current-limiting resistor (220 to 330 ohm) to GND.

My code:
Code:
int but = 8;
int led = 9;
int val = 0;

void setup()
{
  pinMode(but, INPUT_PULLUP);
  pinMode(led, OUTPUT);             // not needed, but I like to be explicit
}

void loop()
{
  if(digitalRead(but) == LOW)
  {
    //here: the button is pushed
     val += 20;                                 // increment the brightness of the LED by 1/24th
    val = min(val, 255);                     // maximum PWM value is 255
  }
  else
  {
    //here: the button has been released
    val = 0;                                  // turn the LED OFF
  }

  analogWrite(led,val);                 // adjust the PWM
  delay( 250 );                           // give yourself a chance to see the result
}

should take about 3 seconds from OFF to full brightness. If you need it to be quicker, adjust the delay time
the delay also tends to debounce the switch too

After inspected the code, I realised that you also used "LOW" for if statement with buttons. Why is it so ?
I think if the button is not pushed it should be act as "LOW" and the led starts shining, but it doesn't and the code works pretty well.
But didn't get the idea underlying.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here's my try:

Connect a SPST N.O. momentary from pin 8 to GND with no resistor.
Connect an LED from pin 9 to an LED in series with a current-limiting resistor (220 to 330 ohm) to GND.

My code:
Code:
int but = 8;
int led = 9;
int val = 0;

void setup()
{
  pinMode(but, INPUT_PULLUP);
  pinMode(led, OUTPUT);             // not needed, but I like to be explicit
}

void loop()
{
  if(digitalRead(but) == LOW)
  {
    //here: the button is pushed
     val += 20;                                 // increment the brightness of the LED by 1/24th
    val = min(val, 255);                     // maximum PWM value is 255
  }
  else
  {
    //here: the button has been released
    val = 0;                                  // turn the LED OFF
  }

  analogWrite(led,val);                 // adjust the PWM
  delay( 250 );                           // give yourself a chance to see the result
}

should take about 3 seconds from OFF to full brightness. If you need it to be quicker, adjust the delay time
the delay also tends to debounce the switch too

After inspected the code, I realised that you also used "LOW" for if statement with buttons. Why is it so ?
I think if the button is not pushed it should be act as "LOW" and the led starts shining, but it doesn't and the code works pretty well.
But didn't get the idea underlying.

Suppose found my answer;

"Because the internal pull-up on pin 2 is active and connected to 5V, we read HIGH when the button is open"
Logged

Lost Wages
Offline Offline
Full Member
***
Karma: 11
Posts: 103
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You got it!
Logged

Pages: [1]   Go Up
Jump to: