-
C21 июл 15Я когда-то делал подобную штуку. Время от времени датчик может выдавать не совсем правильные данные, на них не нужно реагировать. Если датчик сообщает, что температура изменилась слишком быстро (скорее всего, это ошибка), то нужно сделать еще одно-два считывания. Если они подтверждают изменение температуры, то включать исполнительную цепь. В общем, я брал три замера, это 3 секунды при односекундном цикле. Еще, в такой системе нужен некоторый гистерезис, иначе нагрузка может постоянно включаться-выключаться. То есть порог температуры включения должен отличаться от порога температуры выключения. Хотя бы на пол-градуса.
-
V24 май 13А подсветку не лучше ли выключать по таймеру: 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);
} -
pencraft АВТОР20 май 13И еще, в функции опроса клавиатуры условные операторы должны выглядеть так:
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
Приношу свои извинения за допущенные опечатки... -
pencraft АВТОР20 май 13ВНИМАНИЕ! Поправка. К сожалению, часть строк в листинге оказалась урезана. Цикл опроса клавиатуры в процедуре редактирования заданной температуры должен выглядеть так:
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);
Сделано с
NoNaMe