Hi, I am building intervalometer for my Canon EOS 70D. I need some code to work in background and some code to have delays, but delay function freezes the whole processor so I need to use millis() function. I don't understand how to make it work. I want to control the duration with a single button (I have programmed it works, but if the timer is active the button does not work because of the delay function) In code I have changed some things from delay to millis(). I think you got it what I mean. Help me.
int buttonPushCounter = 1;
int buttonState = 1;
int lastButtonState = 1;
const unsigned long eventInterval = 1000;
const unsigned long eventInterval1 = 5000;
const unsigned long eventInterval2 = 10000;
const unsigned long eventInterval3 = 30000;
const unsigned long eventInterval4 = 60000;
unsigned long previousTime = 0;
void setup() {
Serial.begin(9600);
pinMode(15, INPUT_PULLUP);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
unsigned long currentTime = millis();
buttonState = digitalRead(15);
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
buttonPushCounter++;
}
}
if (buttonPushCounter == 1 || buttonPushCounter == 2 || buttonPushCounter == 3 || buttonPushCounter == 4 || buttonPushCounter == 5){
digitalWrite(3, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("trigger active");
}
if (digitalRead (3 == HIGH));{
delay(500);
digitalWrite(3, LOW);
digitalWrite(LED_BUILTIN, LOW); //LED may be omitted if expedient (low light, etc)
Serial.println("trigger inactive");
}
//Timers
if (buttonPushCounter == 1);{
/* Event code */
digitalWrite(3, HIGH);
delay(100);
digitalWrite(3, LOW);
/* Update the timing for the next time around */
previousTime = currentTime;
}
if (buttonPushCounter == 2)eventInterval1;{
if (currentTime - previousTime >= eventInterval1)
/* Event code */
digitalWrite(3, HIGH);
/* Update the timing for the next time around */
previousTime = currentTime;
}
if (buttonPushCounter == 3)eventInterval2;{
if (currentTime - previousTime >= eventInterval2)
/* Event code */
digitalWrite(3, HIGH);
/* Update the timing for the next time around */
previousTime = currentTime;
}
if (buttonPushCounter == 4)eventInterval3;{
if (currentTime - previousTime >= eventInterval3)
/* Event code */
digitalWrite(3, HIGH);
/* Update the timing for the next time around */
previousTime = currentTime;
}
if (buttonPushCounter == 5)eventInterval4;{
if (currentTime - previousTime >= eventInterval4)
/* Event code */
digitalWrite(3, HIGH);
/* Update the timing for the next time around */
previousTime = currentTime;
}
//LED CONTROL
//LED 1
if (buttonPushCounter == 2) {
digitalWrite(6, HIGH);
}
if (buttonPushCounter == 6) {
digitalWrite(6, LOW);
}
//LED2
if (buttonPushCounter == 3) {
digitalWrite(7, HIGH);
}
if (buttonPushCounter == 6) {
digitalWrite(7, LOW);
}
//LED3
if (buttonPushCounter == 4) {
digitalWrite(8, HIGH);
}
if (buttonPushCounter == 6) {
digitalWrite(8, LOW);
}
//LED4
if (buttonPushCounter == 5) {
digitalWrite(9, HIGH);
}
if (buttonPushCounter == 6) {
digitalWrite(9, LOW);
}
//End LED control
//............................................................
//Reset Counter
if (buttonPushCounter == 6) buttonPushCounter = 1;
//End Reset Counter
//............................................................
lastButtonState = buttonState;
Serial.println(buttonPushCounter);
}
Demo.ino (3.3 KB)