Как прочитать значение таймера после остановки?
Я скачал библиотеку Timer1, но, к сожалению, похоже, из нее удален метод read(). Я также попробовал библиотеку SimpleTimer с веб-сайта Arduino, но программа не скомпилировалась из-за неопределенной ссылки на ошибку SimpleTimer::SimpleTimer(). Кто-нибудь знает, как решить эту ошибку или просто другую библиотеку таймера, имеющую функцию чтения?
Чтобы быть более конкретным, мне нужно запускать таймер при нажатии кнопки и останавливать его при отпускании.
@user3161261, 👍2
Обсуждение2 ответа
Чтобы использовать этот скетч, вам нужно будет загрузить и установить библиотеку Debounce отсюда: https://playground.arduino.cc/Code/Debounce. Подключите один конец кнопочного переключателя NO к GND, а другой конец — к контакту 4 Arduino. ПРИМЕЧАНИЕ: если кнопка удерживается нажатой меньше времени задержки debounce, прошедшее время будет временем задержки debounce. ПРИМЕЧАНИЕ 2: Функция millis() переполняется примерно через 49 дней.
#include <Debounce.h>
const byte SWITCH = 4;
unsigned long startTime = 0;
unsigned long endTime = 0;
unsigned long elapsedTime = 0;
const byte debounceDelayTime = 50;
Debounce debouncer = Debounce(debounceDelayTime, SWITCH);
void setup(){
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
if(debouncer.update()){
if(debouncer.read() == 0){
startTime = millis();
}
else if(debouncer.read() == 1){
endTime = millis();
elapsedTime = endTime - startTime;
Serial.print("Button Held Down For ");
Serial.print(elapsedTime);
Serial.println(" ms.");
}
}
}
Вот, ниже код, который вы ищете. Когда вы нажимаете кнопку, запускается таймер, а когда вы ее отпускаете, таймер останавливается. И вы также можете видеть, что время также означает, как долго кнопка нажата.
const uint8_t button_pin = 2;
void setup()
{
pinMode(button_pin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop()
{
static int last_button_state = HIGH;
static unsigned int push_count;
static unsigned long last_press_time;
int button_state = digitalRead(button_pin);
unsigned long now = millis();
// Запись момента нажатия кнопки.
if (last_button_state == HIGH && button_state == LOW) {
push_count++;
last_press_time = now;
}
// Сообщаем об отпускании кнопки.
if (last_button_state == LOW && button_state == HIGH) {
unsigned long push_duration = now - last_press_time;
if (push_duration < 10) { // отбросить отскок
push_count--;
}
else {
Serial.print(F("pushes: "));
Serial.print(push_count);
Serial.print(F(", duration: "));
Serial.print(push_duration);
Serial.println(F(" ms"));
}
}
last_button_state = button_state;
}
- Таймер Arduino с кнопкой увеличения времени
- DS3231 + кнопка для включения подсветки
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»
- Получение BPM из данного кода
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Хорошая кнопка debouncing/Библиотека StateChange
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Рассматривали ли вы вместо этого поиск библиотеки захвата ввода?, @Ignacio Vazquez-Abrams
Чтобы запустить таймер, задайте ему тактовую частоту, установив биты CSn2..0. Один набор этих битов останавливает часы и, следовательно, таймер. Прочтите технический паспорт, чтобы быть уверенным., @dannyf