Hi im trying to write a code that will output a variable PWM to one pin if a switch is on. and to another pin if another switch is on.
when neither switches are on it should light a standby led.
int TriggerPinFWD = 9;// MOSFETS on pin 9
int TriggerPinRVS = 10; // MOSFETS on pin 10
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0;// variable to store the read value
int buttonPinFWD= 1; //button in for fwd motion
int buttonPinRVS= 2; // button in for backwards motion
int val2 = 0; //variable for FWD switch
int val3 = 0; //variable for RVS switch
int LEDPin = 0; //Output for led pin
void setup()
{
pinMode(TriggerPinFWD, OUTPUT); // Setting the IO
pinMode(TriggerPinRVS, OUTPUT);
pinMode(LEDPin, OUTPUT);
pinMode(buttonPinFWD, INPUT);
pinMode(buttonPinRVS, INPUT);
TCCR2B = (TCCR2B & 0xF8) | 2;
}
void loop()
{
val = analogRead(analogPin); // read the input pin for PWM
val2 = digitalRead(buttonPinFWD); //read button switch 1 state
val3 = digitalRead(buttonPinRVS); //read button switch 2 state
if (val2 == HIGH)
{
analogWrite(TriggerPinFWD, val / 4); //write a value to Pin 9 if the switch 1 is on
}
else
{
digitalWrite(LEDPin, HIGH); //Light standby led
}
if (val3 == HIGH)
{
analogWrite(TriggerPinRVS, val / 4); //write a value to Pin 10 if the switch 2 is on
}
else
{
digitalWrite(LEDPin, HIGH); //Light standby led
}
}
The code seems fine to me but i wanted a second set of eyes and since im the only person doing this using arduino and not pic at my uni i thought i'd ask here.
Can you hit modify on that post please, highlight the code and press the "#" button on the toolbar?
My only comments would be that val, val2 and val3 should not be globals, pin numbers should probably be constants, but apart from that and the eccentric indentation, it look OK.
You realise you're not switching off the standby LEDs?
ahh i have removed the led bit for now just till i can get her working.
its just the fact the circuit does whatever it wants ! it doesnt respond to the switch at all and i have tested it as a working switch so no idea whats going on.
when you say dont set the values as globals what do you mean?
If it's not working, then I suggest you cut down your sketch to the bare minimum you need to read the switches and output the readings to the serial port.
val, val2, and val3 are not used outside of "loop" - there's no reason they should have global scope, so declare them inside "loop".
It may save a lot of head-scratching later when your program grows.
int TriggerPinFWD = 9;// MOSFETS on pin 9
int TriggerPinRVS = 10; // MOSFETS on pin 10
int analogPin = 3; // potentiometer connected to analog pin 3
const int buttonPinFWD= 1; //button in for fwd motion
const int buttonPinRVS= 2; // button in for backwards motion
int LEDPin = 0; //Output for led pin
void setup()
{
pinMode(TriggerPinFWD, OUTPUT); // Setting the IO
pinMode(TriggerPinRVS, OUTPUT);
pinMode(LEDPin, OUTPUT);
pinMode(buttonPinFWD, INPUT);
pinMode(buttonPinRVS, INPUT);
pinMode(analogPin, INPUT);
TCCR2B = (TCCR2B & 0xF8) | 2;
}
void loop()
{
int val = analogRead(analogPin); // read the input pin for PWM
int val2 = digitalRead(buttonPinFWD); //read button switch 1 state
int val3 = digitalRead(buttonPinRVS); //read button switch 2 state
if (val2 == LOW)
{
analogWrite(TriggerPinFWD, val / 4); //write a value to Pin 9 if the switch 1 is on
}
else
{
analogWrite(TriggerPinRVS, val / 4);
}
}
It does not seem to be looping whatever state the switch is in at the start is what it does. It doesnt respond to the flicking of the switch. Im really not sure why.