Попробуйте вообще датчик отключить. Все равно глючит?seval писал(а):Пытаюсь.
Попробую. Напишу потом.Gisteresis писал(а):Попробуйте вообще датчик отключить. Все равно глючит?
Попробую. Напишу потом.Gisteresis писал(а):Попробуйте вообще датчик отключить. Все равно глючит?
Отключил. Не глючит. Как быть?Gisteresis писал(а):Попробуйте вообще датчик отключить. Все равно глючит?
Надо почитать как длинные провода подключать.seval писал(а):Отключил. Не глючит. Как быть?
Код: Выделить всё
int leak0 = 0;//датчики протечки
int leak1 = 1;
int leak2 = 2;
int leak3 = 3;
int leak4 = 4;
int lalrm = 5;//лампа аварии
int lcls = 6;//лампа закрыто
int lopn = 7;//лампа открыто
int brst = 8;//кнопка сброс
int bcls = 9;//кнопка закрыть
int bopn = 10;//кнопка открыть
int in1 = 11;//команда закрыть
int in2 = 12;//команда открыть
bool alrm = 0;
//bool cls = 0;
//bool opn = 0;
void setup ()
{
pinMode (leak0 , INPUT);
pinMode (leak1 , INPUT);
pinMode (leak2 , INPUT);
pinMode (leak3 , INPUT);
pinMode (leak4 , INPUT);
pinMode (lalrm , OUTPUT);
pinMode (lcls , OUTPUT);
pinMode (lopn , OUTPUT);
pinMode (brst , INPUT);
pinMode (bcls , INPUT);
pinMode (bopn , INPUT);
pinMode (in1 , OUTPUT);
pinMode (in2 , OUTPUT);
int in1 = HIGH;
int in2 = HIGH;
clse();
alarm();
opne();
}
void loop()
{
if (digitalRead (leak0) == HIGH)
{
alrm = 1;
//cls = 1;
clse();
}
if (alrm == 1)
{
alarm();
}
if (digitalRead (bcls) == HIGH)
{
//cls = 1;
clse();
}
if (digitalRead (brst) == HIGH)
{
alrm = 0;
}
if ((digitalRead (bopn) == HIGH) && (alrm == 0))
{
opne();
//opn = 1;
}
}
void clse()
{
digitalWrite (in1, LOW);
digitalWrite (lopn, LOW);
digitalWrite (lcls, HIGH);
//opn = 0;
delay (4000);
digitalWrite (in1, HIGH);
}
void opne()
{
digitalWrite (in1, HIGH);
//cls = 0;
digitalWrite (in2, LOW);
digitalWrite (lcls, LOW);
digitalWrite (lopn, HIGH);
delay (4000);
digitalWrite (in2, HIGH);
}
void alarm()
{
digitalWrite (lalrm, HIGH);
delay (500);
digitalWrite (lalrm, LOW);
if (alrm == 1)
{
alarm();
}
}
Походу надо провод экранированный?Gisteresis писал(а):Возможно это наводки какие то.
Надо прошить и попробовать. Если будет что то не так, будем разбираться. В начале я бы не подключал мощные нагрузки, протестил бы из заменив светодиодом с резистором последовательно. Если все гуд, пробуем уже на реальных устройствах.seval писал(а):Будет ли так работать?
Тут тоже сложно сказать, нужно пробовать.seval писал(а):Походу надо провод экранированный?
Я сегодня попробовал. Галиматья какая то. При запуске через 4 секунды срабатывает Авария.Gisteresis писал(а):Надо прошить и попробовать.
На днях куплю провод экранированный и попробую.Gisteresis писал(а):Тут тоже сложно сказать, нужно пробовать.
Надо почитать на досуге что это такое.Gisteresis писал(а):Возможно промежуточный усилитель надо поставить.
Нет еще. Усиленно изготавливал вторую версию печатной платы. Сегодня запустил ее. Теперь ничего не греется.Gisteresis писал(а):Вы уже читали про длинные провода, как там делают?
Код: Выделить всё
bool _bounse1S = 0;
bool _bounse1O = 0;
unsigned long _bounse1P = 0;
bool _k1 = 0;
bool _k2 = 0;
bool _k3 = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0;
bool _ktim1 = 0;
bool _k4 = 0;
bool _k5 = 0;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0;
bool _ktim2 = 0;
bool _k6 = 0;
bool _bounseInput7S = 0;
bool _bounseInput7O = 0;
unsigned long _bounseInput7P = 0;
void setup()
{
pinMode(7, INPUT);
pinMode(1, OUTPUT);
pinMode(6, OUTPUT);
pinMode(4, INPUT);
pinMode(2, INPUT);
pinMode(0, OUTPUT);
pinMode(5, OUTPUT);
pinMode(3, INPUT);
_bounseInput7O = digitalRead(7);
}
void loop()
{
bool _bounceTmp7 = (digitalRead (7));
if (_bounseInput7S)
{
if (millis() >= (_bounseInput7P + 40))
{_bounseInput7O= _bounceTmp7; _bounseInput7S=0;}
}
else
{
if (_bounceTmp7 != _bounseInput7O )
{_bounseInput7S=1; _bounseInput7P = millis();}
}
bool _bounceTmp1 = _bounseInput7O;
if (_bounse1S)
{
if (millis() >= (_bounse1P + 40))
{_bounse1O= _bounceTmp1; _bounse1S=0;}
}
else
{
if (_bounceTmp1 != _bounse1O )
{_bounse1S=1; _bounse1P = millis();}
}
_k1 = _bounse1O;
_k2 = ((((_k1) || (_k2))) &&((!_k4)));
digitalWrite (1, ((_k2) || (_ktim1)));
_k3 = ((_k2) || ((digitalRead (3))));
if (_k3)
{
_tim1O = 1;
_tim1I = 1;
}
else
{
if (_tim1I)
{
_tim1I = 0;
_tim1P = millis();
}
else
{
if (_tim1O)
{if ( _isTimer(_tim1P, 4000)) _tim1O = 0;
}
}
}
if(_tim1O)
{_ktim1 = 1;}
else
{_ktim1 = 0;}
digitalWrite (6, (!_ktim1));
_k4 = (digitalRead (4));
_k5 = (((digitalRead (2))) &&((!_k2)));
_k6 = ((((_k6) || (_k5))) &&((!_k2)));
if (_k5)
{
_tim2O = 1;
_tim2I = 1;
}
else
{
if (_tim2I)
{
_tim2I = 0;
_tim2P = millis();
}
else
{
if (_tim2O)
{if ( _isTimer(_tim2P, 4000)) _tim2O = 0;
}
}
}
if(_tim2O)
{_ktim2 = 1;}
else
{_ktim2 = 0;}
digitalWrite (0, _ktim2);
digitalWrite (5, (!_ktim2));
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long endTime;
endTime = startTime+period;
return (millis() >= endTime);
}Два дня полет нормальный. Завтра буду подключать еще пару датчиков.seval писал(а):Посмотрим как будет.
Код: Выделить всё
bool _k1 = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0;
bool _ktim1 = 0;
bool _k2 = 0;
bool _k3 = 0;
bool _k4 = 0;
bool _k5 = 0;
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0;
bool _ktim2 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0;
bool _kgen1 = 0;
bool _k6 = 0;
bool _bounseInput8S = 0;
bool _bounseInput8O = 0;
unsigned long _bounseInput8P = 0;
bool _bounseInput7S = 0;
bool _bounseInput7O = 0;
unsigned long _bounseInput7P = 0;
void setup()
{
pinMode(7, INPUT);
pinMode(1, OUTPUT);
pinMode(3, INPUT);
pinMode(6, OUTPUT);
pinMode(4, INPUT);
pinMode(2, INPUT);
pinMode(5, OUTPUT);
pinMode(0, OUTPUT);
pinMode(8, INPUT);
_bounseInput8O = digitalRead(8);
_bounseInput7O = digitalRead(7);
}
void loop()
{
bool _bounceTmp8 = (digitalRead (8));
if (_bounseInput8S)
{
if (millis() >= (_bounseInput8P + 40))
{_bounseInput8O= _bounceTmp8; _bounseInput8S=0;}
}
else
{
if (_bounceTmp8 != _bounseInput8O )
{_bounseInput8S=1; _bounseInput8P = millis();}
}
bool _bounceTmp7 = (digitalRead (7));
if (_bounseInput7S)
{
if (millis() >= (_bounseInput7P + 40))
{_bounseInput7O= _bounceTmp7; _bounseInput7S=0;}
}
else
{
if (_bounceTmp7 != _bounseInput7O )
{_bounseInput7S=1; _bounseInput7P = millis();}
}
_k1 = ((_bounseInput7O) || (_bounseInput8O));
_k2 = ((((_k1) || (_k2))) &&((!_k4)));
digitalWrite (1, ((_ktim1) || (_k6)));
_k3 = ((_k1) || ((digitalRead (3))));
if (_k3)
{
_tim1O = 1;
_tim1I = 1;
}
else
{
if (_tim1I)
{
_tim1I = 0;
_tim1P = millis();
}
else
{
if (_tim1O)
{if ( _isTimer(_tim1P, 4000)) _tim1O = 0;
}
}
}
if(_tim1O)
{_ktim1 = 1;}
else
{_ktim1 = 0;}
digitalWrite (6, (!_ktim1));
_k4 = (digitalRead (4));
_k5 = (((digitalRead (2))) &&((!_k2)));
if (_k5)
{
_tim2O = 1;
_tim2I = 1;
}
else
{
if (_tim2I)
{
_tim2I = 0;
_tim2P = millis();
}
else
{
if (_tim2O)
{if ( _isTimer(_tim2P, 4000)) _tim2O = 0;
}
}
}
if(_tim2O)
{_ktim2 = 1;}
else
{_ktim2 = 0;}
digitalWrite (0, _ktim2);
digitalWrite (5, (!_ktim2));
if (((_k2) &&((!_k4))))
{
if (! _gen1I)
{
_gen1I = 1;
_gen1O = 1;
_gen1P = millis();
}
}
else
{
_gen1I = 0 ;
_gen1O= 0;
}
if (_gen1I )
{
if ( _isTimer ( _gen1P , 500 ))
{
_gen1P = millis();
_gen1O = ! _gen1O;
}
}
if(_gen1O)
{_kgen1 = 1;}
else
{_kgen1 = 0;}
_k6 = _kgen1;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long endTime;
endTime = startTime+period;
return (millis() >= endTime);
}Надо подумать.seval писал(а):Родилась у меня мысль - Как заставить Ардуино реагировать на оторванный датчик протечки?
То есть защита от дребезга решила проблему? Усиливать сигнал не пришлось.seval писал(а):С длинными проводами вроде разобрался. Защиту от дребезга внедрил в программу.
Да. Схема мне нравится. Осталось только простой МК поставить вместо ардуиныseval писал(а):Решил все это дело сделать по красивее.
Вроде решила. Посмотрим как дальше будет. Добавил еще один датчик. Пока работает как надо.Gisteresis писал(а):То есть защита от дребезга решила проблему?
Хочу. Только вот надо сначала написать программу аналогичную в Arduino IDE. Что бы понять как вообще писать код.Gisteresis писал(а):Осталось только простой МК поставить вместо ардуины
Завидую.Gisteresis писал(а):Отведал местные блюда
Попробуйте CodeVisionAVR, там есть генератор начального кода, останется только функцию main заполнить по аналогии с вашей программой.seval писал(а):Что бы понять как вообще писать код.
Обязательно попробую. Тем боле что теща скоро переедет в новую квартиру, и у меня теперь грант на исследования своей системы.Gisteresis писал(а):Попробуйте CodeVisionAVR,
Код: Выделить всё
int leak1 = 3;//датчик протечки
int lopn = 7;//LED Открыто
int lcls = 8;//LED Закрыто
int lalrm = 9;//LED Авария
int bopn = 12;//кнопка Открыть
int bcls = 11;//кнопка Закрыть
int brst = 10;//кнопка Сброс
int in1 = 2;//Выход Закрыть
int in2 = 13;//Выход Открыть
bool l1 = 0;//Переменная Протечка
bool a2 = 0;//Переменная Авария
bool c3 = 0;//Переменная Закрыть
bool r4 = 0;//Переменная Сброс
bool o5 = 0;//Переменная Открыть
bool f6 = 0;//Переменная Моргать
void setup()
{
pinMode (leak1 , INPUT);
pinMode (bopn , INPUT);
pinMode (bcls , INPUT);
pinMode (brst , INPUT);
pinMode (lopn , OUTPUT);
pinMode (lcls , OUTPUT);
pinMode (lalrm , OUTPUT);
pinMode (in1 , OUTPUT);
pinMode (in2 , OUTPUT);
alrme ();
//blnk ();
cls ();
//opn ();
//rst ();
}
void loop()
{
l1 = (digitalRead (leak1));//Присваиваем переменной l1 значение входов датчиков протечки
r4 = (digitalRead (brst));//Присваиваем переменной r4 значение входа 10
if (l1)//Если протечка
{
alrme ();//то идем в блок Авария alrme
}
}
void alrme ()
{
a2 = ((((l1) || (a2))) &&((!r4)));//Присваиваем переменной a2 значение l1, делаем самоподхват и блокировку сбросом r4
digitalWrite (lalrm, ((a2) || (f6)));//Включаем индикатор Аварии и заставляем его моргать от f6
if (a2)//Если Авария
{
cls ();//то идем в блок cls
}
}
void cls ()
{
c3 = ((((digitalRead (bcls))) || (a2)));//Присваиваем переменной c3 значение кнопки Закрыть или значение переменной Авария a2
if (c3)//Если есть команда закрыть
{
digitalWrite (in1, c3);// то закрываем задвижку
digitalWrite (lcls, HIGH);// зажигаем диод Закрыто
delay (4000);//Ждем 4 секунды
digitalWrite (in1, LOW);//убираем напряжение с задвижки
digitalWrite (lcls, LOW);// гасим диод Закрыто
}
}
Код: Выделить всё
r4 = (digitalRead (brst));Имена переменных соответствуют пинам ардуины?seval писал(а):Чего у меня Сброс не срабатывает?
Схему забыл перерисовать. Пины подгонял под корпуса которые еще не пришли.Gisteresis писал(а): Имена переменных соответствуют пинам ардуины?
По схеме 3,4,5 кнопки, а в программе 12,11,10?
Как таковых чертежей нет. Сейчас все живет вот в такомproDream писал(а): если можно увидеть финальные "чертежи" устройства.