/// Project: https://forum.arduino.cc/t/making-an-output-go-high-while-another-sequence-is-running/1315483/1$0
///
/// Includes
///
#include <Button_SL.hpp> // Description: https://github.com/DoImant/Button_SL
#define PA_PREFER_C
#include "proto_activities.h" // Description: https://github.com/frameworklabs/proto_activities$0
using namespace Btn;
///
/// Global variables / objects
///
ButtonSL startBtn {8};
ButtonSL resetBtn {9};
ButtonSL extraBtn {10};
///
/// Activities
///
pa_activity (Illuminator, pa_ctx_tm()) {
digitalWrite(2, HIGH);
pa_delay_s (1);
digitalWrite(3, HIGH);
pa_delay_s (1);
digitalWrite(4, HIGH);
pa_delay_s (1);
digitalWrite(5, HIGH);
} pa_end
pa_activity (ExtraBtnHandler, pa_ctx()) {
pa_await (extraBtn.tick() != ButtonState::notPressed);
digitalWrite(11, HIGH);
} pa_end
pa_activity (Main, pa_ctx(pa_co_res(2); pa_use(Illuminator); pa_use(ExtraBtnHandler))) {
pa_repeat {
// Wait for start button
pa_await (startBtn.tick() != ButtonState::notPressed);
// Illuminate and handle extra button concurrently
pa_co(2) {
pa_with (Illuminator);
pa_with_weak (ExtraBtnHandler);
} pa_co_end
// Wait for reset button to clear illumination
pa_await (resetBtn.tick() != ButtonState::notPressed);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(11, LOW);
}
} pa_end
///
/// Setup and Loop
///
pa_use(Main);
void setup() {
// Init Buttons
startBtn.begin();
resetBtn.begin();
extraBtn.begin();
startBtn.setDebounceTime_ms(40);
resetBtn.setDebounceTime_ms(40);
extraBtn.setDebounceTime_ms(40);
// Init Leds
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
pa_tick(Main);
}
start
reset
extra