Here is my sketch, it ignores readings if it were running now, so we avoid the situation of rolling all tape in a few minutes if the sensor gets stuck
#define sensor_pin 6
#define button_pin 5
#define motor_pin 3
unsigned long interval_t = 0;
void setup() {
Serial.begin(115200);
pinMode(sensor_pin, INPUT_PULLUP);
pinMode(button_pin, INPUT_PULLUP);
pinMode(motor_pin, OUTPUT);
}
void loop() {
if(millis() > interval_t && digitalRead(sensor_pin) == LOW)
{
interval_t = millis() + 60000*3;
Serial.print("is sensor on? "); Serial.println(interval_t);
if (digitalRead(sensor_pin) == LOW)
{
interval_t = millis() + 60000*15; // was 10s
Serial.print("Run ");Serial.println(interval_t);
digitalWrite(motor_pin, HIGH);
delay(1000 * 15);
digitalWrite(motor_pin, LOW);
Serial.print("Stop ");Serial.println(interval_t);
}
}
else if (millis() < interval_t && digitalRead(sensor_pin) == LOW)
{
Serial.println("not time yet");
}
}