ARDUINO Система смены режима

sampkube

✩✩✩✩✩✩✩
21 Июл 2021
14
1
Добрый день! Делаю доработку Игра "Повтори последовательность" и мне нужна смена режима по кнопке. То есть нажал когда А == 1, и А = 2. Но потом нажал еще раз и когда А == 2, и она сменилась на А = 1. Написал код , но он сменяет А только на 2-5 секунд. А потом обратно

ARDUINO:
  int butCli = !digitalRead(butPin);//переменная для нажатий кнопки
  uint32_t btnTim = 0; //debag время(чтобы не было проблем с долгим нажатием кнопки)
 
  if(game == 1){
    if(butCli){
      delay(500);
      game = 2;
    }
    if (debug) Serial.println("game 1");
    delay(1000);
  }
 
  if(game == 2){
     if(butCli){
      btnTim = millis();
      delay(500);
      game = 1;
    }
    if (debug) Serial.println("game 2");
    delay(1000);
  }
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Что-то Вы перемудрили с логикой. В том виде, который есть, обнуляйте butCli в блоке if(butCli) и будет Вам счастье. Но отлавливать длительное нажатие с помощью delay - грубо и ненадёжно.
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Эммм.... Вы занимаетесь доработкой?
C++:
  if(game == 1){
    if(butCli){
      butCli = 0;
      delay(500);
      game = 2;
    }
    if (debug) Serial.println("game 1");
    delay(1000);
  }
 
  if(game == 2){
     if(butCli){
      butCli = 0;
      btnTim = millis();
      delay(500);
      game = 1;
    }
    if (debug) Serial.println("game 2");
    delay(1000);
  }
Но, повторяю, код изначально написан так, что будет работать с множеством оговорок, и уж совсем не подходит для игры. Вам бы посмотреть на, хотя бы, библиотеку GyverButton, там множество вопросов уже решены.
 
  • Красота! +2
Реакции: sampkube