-1

I was wondering whether anyone could help me... I am using an Arduino Uno and I am writing my code in the Arduino IDE. I am trying to implement the code so that the output voltage can be varied from 0 - 5 volts using 2 pushbuttons. I want to be able to increment the voltage by +0.5 volts from 0-5 volts every time I push Button A. Also I want to decrement the voltage by -0.5 volts from 5-0V every time I push Button B.

Example: (push Button A): output voltage 0.5: (push Button A): output voltage 1.0 etc.

So far when I upload my code the LED as my test for output just flickers between 2 - 4 volts. Can anyone tell me what I am doing wrong? I am not that good at coding so any help would be awesome.

Here is my code.

int PWMPin = 6; // output pin supporting PWM
int buttonApin = 8; // buttonA to pin 9 PWM
int buttonBpin = 10; // buttonB to pin 10 PWM
float value = 0; // read the value at 0
float fadeValue = value;
float counter = 0;

void setup() {
  pinMode(buttonApin, INPUT);
  pinMode(buttonBpin, INPUT);
  pinMode(PWMPin, OUTPUT);
} 
void loop() {
  int port = analogRead(0);
  port = map(port, 0, 10, 0, 255);
  analogWrite(6, port);
  if (digitalRead(buttonApin) == LOW, fadeValue) {
    if (counter >= 10) {
      counter = 10;
    }
    // fade from min to max in increments of 25.5 points: basically (0.5 volts)
    for(fadeValue = 0 ; fadeValue <= 255; fadeValue +=25.5) {
      counter = fadeValue;
      // sets the value (range from 0 to 255):
      analogWrite(PWMPin, fadeValue);
      delay(100);
    }
  }
  if (digitalRead(buttonBpin) == LOW, fadeValue) {
    if (counter <= 0) {
      counter = 0;
    }
    // fade from max to min in increments of 25.5 points: basically (0.5 volts)
    for(fadeValue = 255 ; fadeValue >= 0; fadeValue -=25.5) {
      counter = fadeValue;
      // sets the value (range from 0 to 255):
      analogWrite(PWMPin, fadeValue);
      delay(100);
    }
  }
}
11
  • Why would you use a LED to test your output instead of, say, a DMM? Commented Jun 10, 2015 at 16:50
  • Because it would be the same thing when I connect it to a different source I will still be able to vary voltage IF i can get this running. Commented Jun 10, 2015 at 17:06
  • 1
    Varying the voltage on a LED does almost nothing. Commented Jun 10, 2015 at 17:07
  • okay so what would use for an output? Commented Jun 10, 2015 at 17:15
  • Something that gives you an actual number. Commented Jun 10, 2015 at 17:16

1 Answer 1

0

There's a number of very basic things wrong with your code - things that aren't doing what you think, or you just telling it completely the wrong things.

Start by formatting your code properly (INDENTS!) and match up all your brackets. You'll soon see what I see as far as what is wrong.

I'll give you some clues:


{  
if (digitalRead(buttonApin) == LOW, counter)   

Where to I start with that one...?


for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=25.5)    
  counter = fadeValue;   
  digitalWrite(PWMPin, fadeValue);

C is not Python!


digitalWrite(PWMPin, fadeValue);

Writing an analog value to a digital pin?!


Serial.println(PWMPin);

Printing the pin number - now what is the point of that?


... fadeValue += 25.5 ...

Adding a float to an integer - bad practice (and ultimately pointless) - pick one, float or integer, and stick to it.


And then there is the whole logic of your program. I can't work out what it's supposed to be achieving. It looks like you've tried to get it to do all sorts of parts of different things and not got it to do anything at all. Strip it right out and get it to do ONE thing - provide a specific, STATIC, voltage. Then add in some way of changing that voltage afterwards.

9
  • I dont get it? what brackets should I take out Commented Jun 10, 2015 at 17:22
  • 1
    You have brackets where you shouldn't have, and you're lacking brackets where you should have them.
    – Majenko
    Commented Jun 10, 2015 at 17:23
  • And that's just a start...
    – Majenko
    Commented Jun 10, 2015 at 17:37
  • That's no help at all. Please edit the code in your original question so I can see it in context
    – Majenko
    Commented Jun 10, 2015 at 17:39
  • 1
    You forgot to add. It's useless to scale an analog output by a loop without delays!
    – xyz
    Commented Jun 12, 2015 at 19:03

Not the answer you're looking for? Browse other questions tagged or ask your own question.