Как вывести в консоль, сколько секунд нажата кнопка?

1 - на т.з действительно пох))
2 - ты не прав.
3 - ты опять не прав))

1 лайк

Ну, если вот так пробовать

то можно и двести.

1 лайк

малавата будет малавата )))

1 лайк

Спасибо большое! Вы знаете, похоже на то, что мне нужно, но, к сожалению, этот код показывает не сколько времени была зажата кнопка, а сколько времени прошло между предыдущим нажатием кнопки и текущим (причем длительность нажатия вообще без разницы).

Вот нажал кнопку примерно через секунду работы, еще через 8 секунд, + через 3 сек.
И еще понажимал три раза для теста.

Кнопка нажата 733 mc.
Кнопка нажата 8942 mc.
Кнопка нажата 3022 mc.
Кнопка нажата 541 mc.
Кнопка нажата 94 mc.
Кнопка нажата 108 mc.

А мне нужно показывать

Кнопка была нажата 1 сек
Кнопка была нажата 2 сек
Кнопка была нажата 3 сек
и т.п.

Я не придираюсь, но Вы сами начали.

Заголовок - “Как вывести в консоль, сколько секунд нажата кнопка?” а не “Как вывести в консоль, сколько секунд прошло между нажатиями кнопки”.

Сама суть в заголовок не влезла, поэтому она указана в первых строках моего первого поста.
Нажали кнопку - в порт ежесекундно начинаются мессаги типа “Кнопка нажата 1 секунду, 2,3,5…” и так до отпускания.

Вот матом ругаться хочется. Программа считает сколько нажата кнопка, если кнопка замыкает ногу на массу.

Спойлер
uint32_t btnTimer = 0;
uint32_t temp_time, sec = 0;

void setup() {
  Serial.begin(115200);
  pinMode(10, INPUT_PULLUP);
}

void loop() {
  while (digitalRead(10) == HIGH)
    ;
  temp_time = sec = millis();
  delay(50);  //Ждем дребезг, всё равно быстрее палец нажать не способен
  Serial.print("Кнопка нажата после ");
  Serial.print(temp_time / 1000);
  Serial.println(" c.");
  while (digitalRead(10) == LOW) {
    if (millis() - sec > 1000) {
      sec = millis();
      Serial.print("Кнопка нажата уже ");
      Serial.print((sec - temp_time) / 1000);
      Serial.println(" c.");

    };
  };
  btnTimer = millis() - temp_time;
  delay(50);  //Ждем дребезг, всё равно быстрее палец нажать не способен
  Serial.print("Кнопка была нажата ");
  Serial.print(btnTimer);
  Serial.println(" mc.");
}

Вывод

Спойлер

16:41:54.756 → Кнопка нажата после 0 c.
16:41:54.856 → Кнопка нажата 80 mc.
16:41:54.909 → Кнопка нажата после 0 c.
16:41:55.859 → Кнопка нажата уже 1 c.
16:41:56.862 → Кнопка нажата уже 2 c.
16:41:57.880 → Кнопка нажата уже 3 c.
16:41:58.869 → Кнопка нажата уже 4 c.
16:41:59.870 → Кнопка нажата уже 5 c.
16:42:00.808 → Кнопка нажата 5911 mc.
16:42:02.971 → Кнопка нажата после 8 c.
16:42:03.234 → Кнопка нажата 249 mc.
16:42:06.744 → Кнопка нажата после 12 c.
16:42:06.944 → Кнопка нажата 166 mc.
16:42:06.991 → Кнопка нажата после 12 c.
16:42:07.246 → Кнопка нажата 265 mc.
16:42:08.898 → Кнопка нажата после 14 c.
16:42:09.855 → Кнопка нажата уже 1 c.
16:42:10.836 → Кнопка нажата уже 2 c.
16:42:11.842 → Кнопка нажата уже 3 c.
16:42:12.878 → Кнопка нажата уже 4 c.
16:42:13.848 → Кнопка нажата уже 5 c.
16:42:14.870 → Кнопка нажата уже 6 c.
16:42:15.871 → Кнопка нажата уже 7 c.
16:42:16.272 → Кнопка нажата 7375 mc.