I am working on a program to control some led lights through a relay on an rc car. i can turn on and off the relay, and i can blink the relay, but when i combine the two to turn on and a blinking led, the button does not control the relay. The end result of this program will be 3 switch functions off, solid on, blink repeat. So any help is appreciated
//Analog output
//
int switchPin = 2;
int ledPin = 4;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
void setup() {
// put your setup code here, to run once:
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}
void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
delay(625);
digitalWrite(ledPin, !ledOn);
delay(625);
]
/* Blink without Delay
Turns on and off a light emitting diode (LED) connected to a digital
pin, without using the delay() function. This means that other code
can run at the same time without being interrupted by the LED code.
The circuit:
* LED attached from pin 13 to ground.
* Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number :
const int ledPin = 13; // the number of the LED pin
// Variables will change :
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop()
{
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
if (lastButton == LOW && currentButton == HIGH)
{
//do this once
}
lastButton = currentButton;
//they will both equal the same here so next loop
//the if will fail
this is the same code using a flag
const int switchPin = 2;
const int ledRelay4 = 4;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
int ledState = LOW;
byte flag = 0;
unsigned long previousMills = 0;
unsigned long interval = 625;
void setup() {
// put your setup code here, to run once:
pinMode(switchPin, INPUT);
pinMode(ledRelay4, OUTPUT);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
delay(5);
current = digitalRead(switchPin);
}
return current;
}
void loop()
{
unsigned long currentMills = millis();
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
flag = !flag;//name flag anything that makes sense
}
lastButton = currentButton;
if (flag == 1) {
if (currentMills - previousMills >= interval) {
previousMills = currentMills;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledRelay4, ledState);
}
}
}