Таймер Arduino с кнопкой увеличения времени
У меня есть проект Arduino, для которого требуется таймер обратного отсчета (который я уже сделал). Я подключил кнопку, и когда я нажимаю эту кнопку, мне нужно увеличить таймер обратного отсчета на +10 секунд.
Кто-нибудь может помочь мне добавить код для этой кнопки?
Вот код на данный момент (я объявил кнопку, но не знаю, годится ли она):
#include <LiquidCrystal.h>
int buttonPin = 7;
int buttonState = 0;
int seconds = 30; // считать секунды
int minutes = 0; // считать минуты
int hours = 0; // считать часы
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//инициализируем библиотеку номерами выводов интерфейса
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // контакты, подключенные к ЖК-дисплею
void setup()
{
lcd.begin(16, 2); //задаем количество столбцов и строк ЖК-дисплея
pinMode(buttonPin, INPUT);
}
void loop()
{
buttonState = digitalRead(buttonPin);
lcd.setCursor(1, 0);
lcd.print ("Sosire in:");
lcd.setCursor(6, 1);
lcd.print(":");
lcd.setCursor(9, 1);
lcd.print(":");
seconds--;
delay(1000);
if (seconds < 0)
{
minutes--;
seconds = 59;
}
if (minutes < 0)
{
hours--;
minutes = 59;
}
if (hours < 0)
{
hours = 0;
minutes = 0;
seconds = 30;
}
if (minutes > 9)
{
lcd.setCursor(7, 1);
lcd.print(minutes);
}
else
{
lcd.setCursor(7, 1);
lcd.print("0");
lcd.setCursor(8, 1);
lcd.print(minutes);
lcd.setCursor(9, 1);
lcd.print(":");
}
if (seconds > 9)
{
lcd.setCursor(10, 1);
lcd.print(seconds);
}
else
{
lcd.setCursor(10, 1);
lcd.print("0");
lcd.setCursor(11, 1);
lcd.print(seconds);
lcd.setCursor(12, 1);
lcd.print(" ");
}
if (hours > 9)
{
lcd.setCursor(4, 1);
lcd.print(hours);
}
else
{
lcd.setCursor(4, 1);
lcd.print("0");
lcd.setCursor(5, 1);
lcd.print(hours);
lcd.setCursor(6, 1);
lcd.print(":");
}
if (seconds == 0)
{
lcd.clear();
lcd.print("Este in statie");
delay(5000);
lcd.clear();
}
}
@Radu Lucian, 👍2
Обсуждение1 ответ
▲ 4
Я не совсем понимаю вашу программу, но надеюсь дать некоторые рекомендации/советы:
- Вместо того, чтобы использовать всевозможные переменные с часами, минутами и секундами, используя только одну переменную, которая хранит время. Например, длинное целое значение, которое содержит 24 * 60 * часов + 60 * минут + секунд как одно значение. Например, 12:34:56 будет 24 * 60 * 12 + 60 * 34 + 56 = 19 376.
- Вычесть одну или 10 секунд так же просто, как вычесть значение 1 или 10.
- Для обратного расчета в секундах, минутах и часах используйте 3 формулы (при условии, что время является значением времени):
int hours = (int) time / 60 / 24; int minutes = (int) (time - hours * 60 * 24) / 60; int seconds = time % 60;
- Держите код для отображения на ЖК-дисплее отдельно, возможно, будет проще обновлять каждую цифру каждую секунду. Вероятно, вы меняете его каждую секунду или при нажатии кнопки, что очень медленно для MCU.
- При использовании кнопки (вы уже поместили ее в переменную) просто удалите 10 секунд и обновите время.
- Тем не менее, проверьте также пример Blink Without Delay на веб-сайте Arduino, так как при нажатии кнопки высока вероятность того, что кнопка отскочит, и одно нажатие может привести к тому, что несколько раз будет вычтено 10 секунд.
- И, как было сказано выше, используйте правильные английские имена переменных и английские комментарии (кроме отображаемого текста графического интерфейса... O zi buna).
,
@Michel Keijzers
Смотрите также:
- Как прочитать значение таймера после остановки?
- DS3231 + кнопка для включения подсветки
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»
- Получение BPM из данного кода
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Хорошая кнопка debouncing/Библиотека StateChange
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Ваш код очень трудно читать, пожалуйста, выровняйте его (круглые скобки друг под другом и код внутри с правильным отступом)., @Michel Keijzers
Вы всегда должны называть свои переменные для удобства чтения. Вместо «H», «M» и «S» используйте английские названия, такие как «часы», «минуты» и «секунды». Это значительно облегчит другим людям помощь вам, а также поможет вам читать собственный код!, @HavocRC
Моя программа работает правильно, но я не знаю, как сделать, чтобы при нажатии кнопки время увеличивалось на 10+ секунд., @Radu Lucian
Увеличивать какое время? Вам нужно будет быть более конкретным, у вас есть 3 разные переменные «время»: часы, минуты и секунды., @HavocRC
Секунды, увеличивайте S на 10 секунд, когда я нажимаю кнопку., @Radu Lucian
ваш код излишне сложен .... ЖК-дисплей отслеживает следующую позицию печати .... например, код секунд дисплея может быть сокращен до этих четырех строк ....
lcd.setCursor(10, 1);
если (секунды < 10) lcd.print("0");
lcd.print(секунды);
ЖК-принт(" ");
, @jsotolaИтак, посмотрите на пример кнопки и пример изменения состояния, которые поставляются с IDE. первый объясняет, как использовать оператор if, чтобы сделать что-то при нажатии кнопки, а второй объясняет, как сделать так, чтобы это происходило только один раз при каждом нажатии кнопки., @Delta_G