Я когда-то делал подобную штуку. Время от времени датчик может выдавать не совсем правильные данные, на них не нужно реагировать. Если датчик сообщает, что температура изменилась слишком быстро (скорее всего, это ошибка), то нужно сделать еще одно-два считывания. Если они подтверждают изменение температуры, то включать исполнительную цепь. В общем, я брал три замера, это 3 секунды при односекундном цикле. Еще, в такой системе нужен некоторый гистерезис, иначе нагрузка может постоянно включаться-выключаться. То есть порог температуры включения должен отличаться от порога температуры выключения. Хотя бы на пол-градуса.
Друзья, ни у кого схема LCD+Keypad и разводка для Sprint Layout не завалялась? Или любой шилд в спринте (чтобы использовать как базовый при проектировании новых)? Буду очень обязан.
А подсветку не лучше ли выключать по таймеру: 5 секунд ничего не нажимали — гасим...
Т.к. судя по коду, один цикл приблизительно около секунды, то можно так:
unsigned char timer;
if (!key_num) { timer =0;}
if (timer > 5){
if (timer < 6) {timer ++};
digitalWrite(BACKLIGHT_PIN, 0);
} else {
digitalWrite(BACKLIGHT_PIN, 1);
}
Тоже вариант, но ручное включение-выключение мне лично нравится больше. очень достает автоматическое отключение подсветки, только соберешься посмотреть — раз и погасло ;)))
И еще, в функции опроса клавиатуры условные операторы должны выглядеть так:
if (KeyValue2ButtonUp_LOW) {KeyNum=1;}//Up
if (KeyValue2ButtonDown_LOW) {KeyNum=2;}//Down
if (KeyValue2ButtonLeft_LOW) {KeyNum=3;}//Left
if (KeyValue2ButtonRight_LOW) {KeyNum=4;}//Right
if (KeyValue2ButtonSelect_LOW) {KeyNum=5;}//Select
Приношу свои извинения за допущенные опечатки...
ВНИМАНИЕ! Поправка. К сожалению, часть строк в листинге оказалась урезана. Цикл опроса клавиатуры в процедуре редактирования заданной температуры должен выглядеть так:
do {
keyCode=ReadKey(KEYPAD_PIN);
if (keyCode==1){setTmp++;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
if (keyCode==2){setTmp--;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
} while (keyCode!=5 && keyCode!=4);
Комментарии
позаимствую интересные моменты в коде для себя, хотя мне управление кнопками не нравится...я сейчас решил с энкодером поиграть
Т.к. судя по коду, один цикл приблизительно около секунды, то можно так:
unsigned char timer;
if (!key_num) { timer =0;}
if (timer > 5){
if (timer < 6) {timer ++};
digitalWrite(BACKLIGHT_PIN, 0);
} else {
digitalWrite(BACKLIGHT_PIN, 1);
}
if (KeyValue2ButtonUp_LOW) {KeyNum=1;}//Up
if (KeyValue2ButtonDown_LOW) {KeyNum=2;}//Down
if (KeyValue2ButtonLeft_LOW) {KeyNum=3;}//Left
if (KeyValue2ButtonRight_LOW) {KeyNum=4;}//Right
if (KeyValue2ButtonSelect_LOW) {KeyNum=5;}//Select
Приношу свои извинения за допущенные опечатки...
do {
keyCode=ReadKey(KEYPAD_PIN);
if (keyCode==1){setTmp++;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
if (keyCode==2){setTmp--;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
} while (keyCode!=5 && keyCode!=4);