включение света с ПИР, ИК и фоторезистором
- Войдите на сайт для отправки комментариев
Пт, 06/05/2016 - 15:13

в общем: скетч должен включать свет: в темноте - от ПИР (при поступлении сигнала с ИК напрежение должно повышаться, при повторном - выключаться + авто выключение при свете), на свету - от ИК(плавно)
вот начальный скетч, но что-то работает не так, как надо. Помогите пожалуйста
#define but 8 //Button Pin
#define led 11 //LED Pin
#define foto 3
#define PIR 7
#define speedON 40
#define speedOFF 30
int vol=0;
int old_vol=0;
int state=0;
int old_state=0;
int y=0; //LED Level
int s=8; //speed of the LED Level change (mS)
int t=0;
void setup()
{
pinMode (but,INPUT);
pinMode (led,OUTPUT);
pinMode (foto,INPUT);
pinMode (PIR,INPUT);
}
void loop()
{
{
vol=digitalRead (but);
if((vol==HIGH)&&(old_vol==0))// расстояние 1006
{
state=!state; //Button's Trigger
delay(200); //задержка вкл 200 было
}
old_vol=vol;
if((state==0)&&(old_state==0)) //Condition when LED OFF
{
analogWrite(led,0);
}
if((state==1)&&(old_state==1)) //Condition when LED ON
{
analogWrite(led,255);
}
if((state==1)&&(old_state==0)) //Condition when LED increase LED Level
for(y=0;y<255;y++)
{
analogWrite (led,y);
delay(s); //Speed of the increasing LED Level
old_state=state;
delay(1);
}
if((state==0)&&(old_state==1)) //Condition when LED decrease LED Level
for(y=255;y>0;y--)
{
analogWrite (led,y);
delay(1.5); //Speed of the decreasing LED Level
old_state=state;
}
}
t=digitalRead(foto);
if(t == HIGH)
{
{
if(digitalRead(PIR))
{
for(int i = 0; i <= 30; i++)
{
analogWrite(led, i);
delay(speedON);
}
{
if(digitalRead(foto) == LOW)
{
digitalWrite(led, LOW);
}
}
while(digitalRead(PIR));
for(int i = 30; i >= 0; i--)
{
analogWrite(led, i);
delay(speedOFF);
}
}
}
}
}
пожалуйста, если можно, как сжать скетчь (что удалить, переделать)?
Может Вам както с http://arduino.ru/forum/programmirovanie/kod-mozhno-li-proshche скооперироватся, уж больно все похоже. Зачем сжимать скетч? Куда он не влазит? Если просто от любви к искуству - так это только самому надо делать, а не других просить.
спасибо
пожалуйста, если можно, как сжать скетчь (что удалить, переделать)?
Какова цель, которой нужно достичь? Другими словами, целевой размер скетча каков?
да это даже не главное... понять бы что не так со скетчем и написать правильно...
Понятно, т.е. "ради искусства" :)
пожалуйста, если можно, как сжать скетчь (что удалить, переделать)?
Итак, если уж нужно искусство, то в первую очередь посмотрите на переменные, у вас они все int, хотя используются в тексте как byte или даже как bool. можно в первую очередь это исправить. затем, переменная s у Вас задается как int но в программе никак не меняется, ее соответственно можно перенести в define. Так как у нас все флаги сталь булевые то можно в условиях не писать state == HIGH или state == 0, а просто state и !state. Потом мы приравиниваем vol = digitalRead(but), и затем сразу ставим условие if(vol)... можно сразу записать if(digitalRead(but)... ну это то с чего можно начать, а далее искусные эквилибристы подскажут)