hi there
i have a code that runs when an input is high which obviously runs over and over continously as long as the button is high but the first half of the code i only want to run once but obviously if the button goes low then high again it will reset and will obviously do the first half again once?
hi yes i would have put it in setup but i need it to do it the first revolution everytime when the heat button goes high. obviously it resets when it goes low
Then it sounds like you need to keep the previous result of digitalRead(heatbutton) in a variable and run your "run once" code when you see a transition from low to high.
int ledPin = 13; // LED connected to digital pin 13
int button = 2; // button pin
int count = 0; // Our blink counter
// The setup() method runs once, when the sketch starts
void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
pinMode(button, INPUT);
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
if (digitalRead(button)== HIGH) // buttin when high
{
if (count < 1) {
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
count++; // add one (1) to our count
}
}
else {
if(count == 1) count =0; // resetting the count
}
}
one more thing, (just to make it a bit simpler, base this on button examle) when the button pin goes low there would be a delay of upto 30seconds before the LED goes low, but if the button is only on for a period of 10seconds then the LED will only stay on after the button goes low for 10seconds. hope you understand what i mean there
also the delay time needs to be without a delay like the example blink without delay.
Joes:
one more thing, (just to make it a bit simpler, base this on button examle) when the button pin goes low there would be a delay of upto 30seconds before the LED goes low, but if the button is only on for a period of 10seconds then the LED will only stay on after the button goes low for 10seconds. hope you understand what i mean there
also the delay time needs to be without a delay like the example blink without delay.
Why check count? You can unconditionally set it zero (either it was already zero, or it's one and you want it to be zero)
Also, given that count can only take two values, shouldn't it be a boolean?
honestly i havent got a clue show me what you mean
I don't understand, was there a question?
yes sorry finding it hard to explain basically when the switch is turned off theres to be a delay before the LED goes off but the delay depends on how long the input was high for so if the button was on for 10s the light will stop on after the button goes low for 10s
but the delay rime can only go upto 30s
i hope ive worded that a bit better
int ledPin = 13; // LED connected to digital pin 13
int button = 2; // button pin
bool DoneInitialization = false; // Our blink indicator
void setup()
{
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
pinMode(button, INPUT);
}
void loop()
{
if (digitalRead(button)== HIGH) // buttin when high
{
delay(10); //debounce
if (!DoneInitialization)
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(ledPin, LOW); // set the LED off
delay(1000); // wait for a second
DoneInitialization=true; // Initialization is done, don't run it again until button has been low
}
}
else
{
DoneInitialization=false; // button was low. Permit Initialization (or whatever it is) to run again
}
}