А ставить конденсаторы и один и второй параллельно питанию подсветки, правильно?
А ставить конденсаторы и один и второй параллельно питанию подсветки, правильно?
Параллельно самой подсветке
Не помогла установка конденсаторов, писк ещё громче становится((
Я от писка их и не рекомендовал, он были предложены для устранения мерцания при высокой частоте ШИМ 32-64 кГц
Последний раз редактировалось Chip; 27.03.2016 в 12:04.
Скажите пожалуйста, а можно изменить скетч, чтобы он регулировал ШИМ, как в 72 посту, т.е. чтобы была задержка изменения сигнала управления(драйвером подсветки) хотя бы 2-3 секунды?
basurman971, чтобы яркость плавно менялась за 2-3 сек? или 2-3 секунды ждать изменения сигнала датчика и тогда менять яркость? по среднему значению?
Правильней сказать было бы, что хотелось бы аналога адаптивного регулирования. Наверное и то, и то)))
Сейчас подсветка изменяется резко, т.е. как только на датчик "упала тень", тут же меняется яркость подсветки.
Наверное можно дискретность значений датчика увеличить в скетче, но я не уверен что поможет.
Сейчас это выглядит так
Последний раз редактировалось basurman971; 27.10.2016 в 15:55.
вроде так:
PHP код:
int ledPin = 9;
int sens = 0;
unsigned char i=0;
unsigned long time;
unsigned long oldtime;
unsigned int sensvals[]={0,10,20,30,40,50,60,80,1023};
unsigned char lightvals[]={10,50,100,150,180,210,230,255};
unsigned char target=0;
unsigned char oldtarget=0;
void setup()
{
pinMode(ledPin, OUTPUT);
//Serial.begin(57600);
}
void loop()
{
time = millis();
sens = analogRead(0);
for(i=0;i<sizeof(sensvals)-2;i++)
{
if(sens>sensvals[i] && sens<=sensvals[i+1])
{
target=lightvals[i];
break;
}
}
if(target!=oldtarget)
{
if(time-oldtime>3000)
{
oldtime=time;
oldtarget=target;
analogWrite(ledPin,target);
}
}
else
{
oldtime=time;
}
/*
Serial.print(target, DEC);
Serial.print(" ");
delay(100);
*/
}
поменял, получилось вот что-unsigned int sensvals[]={0,290,360,430,500,570,640,710,855,1023};
unsigned char lightvals[]={10,40,70,100,130,160,220,230,255};
если бы еще сама яркость изменялась плавно, наверно было бы супер)))
PHP код:
int ledPin = 9;
int sens = 0;
unsigned char i=0;
unsigned long time;
unsigned long oldtime;
unsigned int sensvals[]={0,10,20,30,40,50,60,80,1023};
unsigned char lightvals[]={10,50,100,150,180,210,230,255};
unsigned char target=0;
unsigned char oldtarget=0;
unsigned char currval=0;
boolean flag=false;
void setup()
{
pinMode(ledPin, OUTPUT);
//Serial.begin(57600);
}
void loop()
{
time = millis();
sens = analogRead(0);
for(i=0;i<sizeof(sensvals)-2;i++)
{
if(sens>sensvals[i] && sens<=sensvals[i+1])
{
target=lightvals[i];
break;
}
}
if(flag)
{
if(currval!=target)
{
if(currval<=target)
{
currval=currval++;
analogWrite(ledPin,currval);
}
else
{
currval=currval--;
analogWrite(ledPin,currval);
}
delay(10);
}
else flag=false;
}
if(target!=oldtarget)
{
if(time-oldtime>3000)
{
oldtime=time;
oldtarget=target;
flag=true;
}
}
else
{
oldtime=time;
}
/*
Serial.print(target, DEC);
Serial.print(" ");
delay(100);
*/
}
Эту тему просматривают: 5 (пользователей: 0 , гостей: 5)