Ви не увійшли.
Это да. Хочу сделать чтобы она включалась при вставлении ключа ? Как?
Вариант на разрыв.
/* *** места где произвел изменения
#1 геркон -> A2 (gercon_pin) 1 дверь открыта / 0 закрыта ***
тепловая завеса -> 13 (platten_pin) 1 тепловая завеса вкл/ 0 откл
*/
const int gercon_pin = A2;
uint8_t gercon, gercon_old; // новое и старое состояние геркона 0 откр/ 1закр
const int platten_pin = 13;
uint8_t platten; // состояние тепловой завесы 1 вкл/ 0 откр
uint8_t platten_ON = 0; //
uint8_t platten_OFF = 0; //
void setup() {
//#1
pinMode(gercon_pin, INPUT_PULLUP);
gercon = ! digitalRead(gercon_pin); // ***
pinMode(platten_pin, OUTPUT); //инициализировать
digitalWrite(platten_pin, platten = 0); // отключить тепловую занавесь
}
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
//#1
static uint32_t fut1 = 0 ;
static uint32_t future1 = 0 ;
if (platten_ON && MILLIS >= fut1) {
digitalWrite(platten_pin, platten = 1);; // включить тепловую занавесь
platten_ON=0;
}
if (platten_OFF && MILLIS >= fut1) {
digitalWrite(platten_pin, platten = 0);; // отключить тепловую занавесь
platten_OFF=0;
}
if (MILLIS >= future1) {
future1 = MILLIS + 200 ;
gercon_old = gercon;
gercon = ! digitalRead(gercon_pin); // ***
if (gercon_old && !gercon && !platten) {
fut1 = MILLIS + 15000; // 15000 милисекунд
platten_ON = 1;
platten_OFF=0;
}
if (!gercon_old && gercon && platten) {
fut1 = MILLIS + 30000; // 30000 милисекунд
platten_OFF = 1;
platten_ON=0;
}
}
}
Спасибо за "пиво".
Проверил только что на СД все работает так как хотел. Еще раз огромное спасибо. Готов проставиться немецким пенным.
Большое человеческое спасибо, сегодня залью, попробую погонять.
Объяснять как работает код долго. Залейте и погоняйте его.
/*
#1 геркон -> A2 (gercon_pin) 0 дверь открыта / 1 закрыта
тепловая завеса -> 13 (platten_pin) 1 тепловая завеса вкл/ 0 откл
*/
const int gercon_pin = A2;
uint8_t gercon, gercon_old; // новое и старое состояние геркона 0 откр/ 1закр
const int platten_pin = 13;
uint8_t platten; // состояние тепловой завесы 1 вкл/ 0 откр
uint8_t platten_ON = 0; //
uint8_t platten_OFF = 0; //
void setup() {
//#1
pinMode(gercon_pin, INPUT_PULLUP);
gercon = digitalRead(gercon_pin);
pinMode(platten_pin, OUTPUT); //инициализировать
digitalWrite(platten_pin, platten = 0); // отключить тепловую занавесь
}
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
//#1
static uint32_t fut1 = 0 ;
static uint32_t future1 = 0 ;
if (platten_ON && MILLIS >= fut1) {
digitalWrite(platten_pin, platten = 1);; // включить тепловую занавесь
platten_ON=0;
}
if (platten_OFF && MILLIS >= fut1) {
digitalWrite(platten_pin, platten = 0);; // отключить тепловую занавесь
platten_OFF=0;
}
if (MILLIS >= future1) {
future1 = MILLIS + 200 ;
gercon_old = gercon;
gercon = digitalRead(gercon_pin);
if (gercon_old && !gercon && !platten) {
fut1 = MILLIS + 15000; // 15000 милисекунд
platten_ON = 1;
platten_OFF=0;
}
if (!gercon_old && gercon && platten) {
fut1 = MILLIS + 30000; // 30000 милисекунд
platten_OFF = 1;
platten_ON=0;
}
}
}
Отсчет таймера millis(); Отсчет времени по срабатыванию геркона на открытие двери, и отсчет по срабатыванию геркона при закрытии двери.
Задача такова, что по утрам приезжают грузиться курьеры и дверь постоянно открыта, зимой это не сильно комильфо, а так завеса будет включаться автоматически только тогда когда дверь долго открыта. Это бывает не так часто, утром 2-4 раза, и в течении дня, если товар приезжает.
Я так понял мне нужно 2 таймера.
1й например timer_vkl запускается при открытии двери (геркон=0 разомкнут) и начинает отсчет. Дальше дуня смотрит, если значение таймера более 15сек, включается реле с нагрузкой.
Когда геркон=1 (замкнут) таймер останавливается, дуня смотрит на реле, если реле включено, запускается второй таймер (timer_otkl) при достижении 30 сек, реле отключается.
Как то так.
Осталось понять, как засунуть это в скетч
Здеся нужно смотреть, что за тепловая завеса? Как часто проскальзывают через дверь?
Вдруг тепловую завесу нельзя часто включать.
Спасибо, попробую.
В принципе задачка не сложная. Можно воспользоваться таймером описано тут http://arduino.ru/Tutorial/Arduino_Interrupts
А еще есть вот такая штука: FLProg там программа практически рисуется из блоков.
Добрый день.
Помогите пожалуйста решить задачу:
Есть входная дверь, над дверью висит тепловая завеса.
Нужно чтобы завеса включалась если дверь открыта более 15 сек и автоматически отключалась через 30 сек после закрытия двери.
Из того что в наличии:
Геркон
Плата реле
Ардуино уно
Прямые руки
Чего не хватает: мозгов и опыта для написания скетча.
Мигать светодиодами и показывать время я научился, а как прикрутить таймеры с отсчетом к сожаленью не соображу.