Я работаю над программой Arduino, которая считывает данные с анемометра, и если ветер превышает определенный порог, он активирует реле. Порог может быть установлен двумя способами:Решение логической проблемы с использованием пользовательского ввода Arduino
1) пользователь может использовать две кнопки, чтобы увеличить или уменьшить порог
2) Если определенная кнопка удерживается в течение 2 секунд, порог будет синхронизировать с током скорость ветра.
Моя проблема заключается в том, что кнопки увеличения и уменьшения изменяют пороговое значение на +/- 0,5 км/ч. Но скорость ветра считывается с точностью 0,1 км/ч. Так что иногда может случиться, что если текущая скорость ветра, скажем, 12,2 км/ч, а кнопка синхронизации удерживается, порог теперь составляет 12,2 км/ч. Проблем еще нет ...
Но если пользователь нажимает одну из кнопок увеличения/уменьшения, порог все равно изменяется на +/- 0,5 км/ч, что означает, что значения будут увеличиваться как 12,2, 12,7, 13,2, 13,7 и т. д.
Что бы я хотел, чтобы кнопки увеличения/уменьшения добавляли пороговое значение до ближайшего 0,5 кратного. Поэтому, если была использована кнопка синхронизации, а порог был установлен на 12.2, нажатие кнопки увеличения изменилось бы на 12,5, а затем продолжилось с шагом 0,5 оттуда.
Я могу придумать несколько способов исправить эту проблему, но ни одна из них не очень элегантна. Я хочу использовать самое простое решение.
Примечание: я не включаю ни один из моих кодов, потому что это скорее вопрос логики/псевдокода. Кроме того, это мой первый форум, поэтому дайте мне знать, если мне нужно что-то изменить в моем посте!
EDIT: Pseudo, по запросу.
if increase button pressed
threshold+=0.5
if decrease button pressed
threshold-=0.5
if sync button held
threshold = current wind speed
Похоже, у вас есть 3 кнопки: "две кнопки для увеличения или уменьшения" и "кнопки синхронизации". Это верно? – chux
Даже псевдокод публикации может помочь объяснить проблему и использовать текущий подход. Пример: когда нажата кнопка «Синхронизация» и вызывает _пороговый == current_, затем последующие, но минутные изменения открывают и закрывают реле, возможно, много раз. Похоже на хорошее место для небольшого гистерезиса. – chux
Я добавил псевдо на свой пост. И да, есть 3 кнопки. – user7287356