#define LED_PIN 13
#define BTN_PIN 19
hw_timer_t *My_timer = NULL;
int timerState = 0;
volatile int btnState = 0;
volatile int ledState = 0;
volatile int i = 0;
int masState[] = {2, 2, 2, 2, 2, 2, 10, 2, 10, 2, 10, 2, 2, 2, 2, 2, 2, 2};
void IRAM_ATTR onTimer()
{
ledState ^= 1;
timerAlarmWrite(My_timer, masState[i]*100000, true);
i++;
if (i > 18)
{
timerAlarmWrite(My_timer, 1000000, true);
i = 0;
ledState = 0;
}
}
void IRAM_ATTR onBtn()
{
btnState = 1;
}
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
My_timer = timerBegin(0, 80, true);
timerAttachInterrupt(My_timer, &onTimer, true);
timerAlarmWrite(My_timer, 1000000, true);
attachInterrupt(BTN_PIN, onBtn, CHANGE);
}
void loop()
{
if (btnState == 1 && timerState == 0)
{
timerAlarmEnable(My_timer);
timerState = 1;
btnState = 0;
}
if (btnState == 1 && timerState == 1)
{
timerAlarmDisable(My_timer);
timerState = 0;
btnState = 0;
ledState = 0;
}
if (ledState == 1)
{
digitalWrite(LED_PIN, HIGH);
}
else
{
digitalWrite(LED_PIN, LOW);
}
}