Помогите с прерыванием

h0nepa

✩✩✩✩✩✩✩
18 Ноя 2018
14
0
Написал программу, пока кнопка на втором пине не нажата он должен ехать прямо, при нажатии должно уйти в rasvorot и повернуть но сие действие не выполняется. Не могу понять в чём причина
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 3
#define enA 10
#define enB 9

volatile uint32_t atime;

void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);

pinMode(2, INPUT_PULLUP);
attachInterrupt(0, rasvorot, FALLING);

}

void loop()
{
analogWrite(enA, 70);
analogWrite(enB, 73);
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 1);
digitalWrite(IN4, 0);
}
void rasvorot()
{
if (millis() - atime > 230)
{
atime = millis();
analogWrite(enA, 70);
analogWrite(enB, 73);
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);

}
if (millis() - atime > 360)
{
atime = millis();
analogWrite(enA, 70);
analogWrite(enB, 73);
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);
}

}
 

SergeySAS

✩✩✩✩✩✩✩
20 Дек 2018
41
9
Москва
sustavov.org
На самом деле это даже замечательно. Так писать не хорошо. Обработка прерываний должна быть короткая - только выставление флагов и переменных. Весь функционал в теле loop.
Введите переменную BtnIsPress и присваивайте ей 1 при нажатии в обработчике. А в loop проверяйте ее значение и делайте разворот.