Здравствуйте, я пытаюсь сделать функцию обработчика кнопок (btn),но она корректно работает только когда к ней обращается не больше чем одна переменная(при двух переменных флаги не выставляются) подскажите почему так и как это исправить пожалуйста
тут работает верно:
int teach_Btn = 12;
int inp = 13;
int nb;
bool flag;
uint32_t btnTimer = 0;
void setup()
{
pinMode(teach_Btn, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(2, OUTPUT);
Serial.begin(9600);
}
bool btn(int nb_btn)
{
if (!digitalRead(nb_btn) && !flag && millis() - btnTimer > 100)
{
flag = true;
btnTimer = millis();
return true;
}
if (digitalRead(nb_btn) && flag && millis() - btnTimer > 100)
{
flag = false;
btnTimer = millis();
}
return false;
}
void loop()
{
/*
if(btn(teach_Btn) == true){
nb = 0;
}
*/
digitalWrite(2,LOW);
if (btn(inp) == true)
{
nb++;
Serial.println(nb);
digitalWrite(2,HIGH);
}
}
а тут нет:
int teach_Btn = 12;
int inp = 13;
int nb;
bool flag;
uint32_t btnTimer = 0;
void setup()
{
pinMode(teach_Btn, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(2, OUTPUT);
Serial.begin(9600);
}
bool btn(int nb_btn)
{
if (!digitalRead(nb_btn) && !flag && millis() - btnTimer > 100)
{
flag = true;
btnTimer = millis();
return true;
}
if (digitalRead(nb_btn) && flag && millis() - btnTimer > 100)
{
flag = false;
btnTimer = millis();
}
return false;
}
void loop()
{
if(btn(teach_Btn) == true){
nb = 0;
}
digitalWrite(2,LOW);
if (btn(inp) == true)
{
nb++;
Serial.println(nb);
digitalWrite(2,HIGH);
}
}