Можно ли программно выровнять яркость светодиодов, используя ШИМ???

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

Это простейшая программка для двухцветного светодиода, которая по идее должна создавать эффект "перетекания" света  (цвет плавно меняется из зеленого в красный и наоборот)

int GREENpin = 10; //  вывод подключения зеленого светодиода
int REDpin = 11; //  вывод подключения красногосветодиода
int MAX_value = 150; // максимальное значение яркости

void setup(){}


void loop(){
  for(int value = 0 ; value <= MAX_value; value +=1) { 
    
    analogWrite(REDpin, value); //яркость красного увеличивается
analogWrite(GREENpin, MAX_value-value); //яркость зеленого уменьшается
      delay(5);
  }


  for(int value = 0 ; value <= MAX_value; value +=1) { 
    
    analogWrite(REDpin, MAX_value-value); //яркость красного уменьшается
analogWrite(GREENpin,value); //яркость зеленого увеличивается
      delay(5);
  }

}

Однако на самом деле получается так, что красный светодиод почему-то светит намного сильнее зеленого! Подскажите пожалуйста, как программно исправить это, чтобы визуально яркость и время свечения светодиодов были одинаковыми?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Дык убавляй красный быстрее чем зеленый

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

Для этого наверно нужно вводить две переменные

1) шаг яркости для красного светодиода

2) -//- для зеленого

...и написать для каждого из светодиодов свою функцию изменения яркости? Или можно как-то попроще? 

Попробовал вот так изменить код, но яркость красного почему-то все равно больше зеленого!!! Непонятно... почему?

int GREENpin = 10;
int REDpin = 11;
int MAX_valueRED = 10;
int MAX_valueGREEN = 150;

void setup(){}


void loop(){
 for(int valueRED = 0 ; valueRED <= MAX_valueRED; valueRED +=2) { 
    
    analogWrite(REDpin, valueRED);}//яркость красного увеличивается
   for(int valueGREEN = 0 ; valueGREEN <= MAX_valueGREEN; valueGREEN +=2){ 
   
analogWrite(GREENpin,MAX_valueGREEN-valueGREEN); //яркость зеленого уменьшается
      delay(1);}

  for(int valueRED = 0 ; valueRED <= MAX_valueRED; valueRED +=2) { 
    
    analogWrite(REDpin, MAX_valueRED-valueRED);}//яркость красного уменьшается
   for(int valueGREEN = 0 ; MAX_valueGREEN <= MAX_valueGREEN; valueGREEN +=2){ 
   
analogWrite(GREENpin,valueGREEN); //яркость зеленого увеличивается
      delay(1);
  }

}

Может кто-то из опытных форумчан подскажет? Заранее спасибо!

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Гыыы. Наверное если красный +2 то зеленый +1. Не? А то чет никакой разницы.

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

Переписал код так, чтобы он выглядел проще:

int GREENpin = 10;
int REDpin = 11;
int MAX_valueRED = 50;
int MAX_valueGREEN = 150;

void setup(){}


void loop(){
 for(int valueRED = 0 ; valueRED <= MAX_valueRED; valueRED +=2) { 
    
    analogWrite(REDpin, valueRED);}//яркость красного увеличивается
    
   for(int valueGREEN = MAX_valueGREEN ; valueGREEN <= MAX_valueGREEN; valueGREEN -=2){ 
   
    analogWrite(GREENpin, valueGREEN); //яркость зеленого уменьшается
      delay(3);}

  for(int valueRED = MAX_valueRED; valueRED <= MAX_valueRED; valueRED -=2) { 
    
    analogWrite(REDpin, valueRED);}//яркость красного уменьшается
    
   for(int valueGREEN = 0 ; MAX_valueGREEN <= MAX_valueGREEN; valueGREEN +=2){ 
   
     analogWrite(GREENpin,valueGREEN); //яркость зеленого увеличивается
      delay(3);
  }

}

Arduino IDE вроде ошибок не находит, однако я заметил странный глюк: программа словно игнорирует значения переменных

int MAX_valueRED = 50;
int MAX_valueGREEN = 150;

Разве при таких значениях скважность может быть такой https://www.youtube.com/watch?v=driuBMxXYg4  ???  

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Может сначала вообще убрать циклы и принимать значения пинов через ком порт с компа и научным тыком выяснить как они светят при разных значениях? А потом уже огород городить.

Leshiy
Offline
Зарегистрирован: 19.07.2014

А где вапче инициализация пинов INPUT\OUTPUT? Они у вас работают входами щас, а вы по им ШИМом стреляете.

Вы, своим кодом, по портам то включаете подтягивающий резистор, то отключаете его.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Leshiy пишет:

А где вапче инициализация пинов INPUT\OUTPUT? Они у вас работают входами щас, а вы по им ШИМом стреляете.

Вы, своим кодом, по портам то включаете подтягивающий резистор, то отключаете его.


Ну так работает же. :)

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

Leshiy, большое спасибо Вам за подсказку! Включение пинов на выход добавил! И ещё изменил несколько строчек в коде - значение яркости с выхода ШИМ красного светодиода разделил на 5 (строчки в которых это сделано выделены)

В итоге получился такой код:

int GREENpin = 10; //  вывод подключения зеленого светодиода
int REDpin = 11; //  вывод подключения красногосветодиода
int MAX_value = 150; // максимальное значение яркости

void setup(){
pinMode(GREENpin, OUTPUT);
pinMode(REDpin, OUTPUT);
}


void loop(){
  for(int value = 0 ; value <= MAX_value; value +=5) { 
    
    analogWrite(REDpin, value/5); //яркость красного увеличивается
    
analogWrite(GREENpin, MAX_value-value); //яркость зеленого уменьшается
      delay(20);
  }


  for(int value = 0 ; value <= MAX_value; value +=5) { 
    
    analogWrite(REDpin, (MAX_value-value)/5); //яркость красного уменьшается
    
analogWrite(GREENpin,value); //яркость зеленого увеличивается
      delay(20);
  }

}

Вроде заработало нормально: http://youtu.be/L1KemIEMf7w , но интересно можно ли сделать так, чтобы переходы между изменением цвета были ещё плавнее?

Или для этого нужны специальные светодиоды типа таких???

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Делей увеличь. Будет плавнее.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Посмотрел на ваше видео. И захотел себе цифровой осциллограф, в придачу к моим двум ЭЛТшным.

Чего бы такого купить тыр за 15?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Я в Москве ригол 1052 заказал и привезли на следующий день, правда он был последний.

Leshiy
Offline
Зарегистрирован: 19.07.2014

А что, хорош? А то в этих цифровых ничо не поймёшь, так как там характеристик могут быть ого-го, а математика уууу. И в результате осцилл аппаратно может многое, но программисты его убили кодом.

А то надо мине, хочется. 112А чот подглючивать развёрткой стал, а 475 тектроникс дюже здоровый.

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Меня устраивает. Почитайте в инете, видео можно посмотреть. Двух лучевой, прошивается до 100MHz.

Вот, например, здесь http://www.partsdirect.ru/goods/83070/

Leshiy
Offline
Зарегистрирован: 19.07.2014

Спасибо.

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

Leshiy пишет:

Посмотрел на ваше видео. И захотел себе цифровой осциллограф, в придачу к моим двум ЭЛТшным.

Чего бы такого купить тыр за 15?

Даже не знаю, что Вам посоветовать - для меня главным критерием при выборе осциллографа была компактность, поэтому я решил купить JDS2022A (заказывал здесь).

Прибор очень понравился (огорчило только то, что в комплекте не было батареек), но я покупал его со скидкой $10, поэтому не стал открывать диспут и доказывать, что на фото в описании товара было две батареи типа "18650".

Во всем остальном прибор полностью оправдал мои ожиданиия (и даже превзошел их). Правда пришлось потратить около четырех часов (!) чтобы разобраться во всех пунктах его меню, подменю и т.д. И это с учетом того, что я заранее скачал к нему PDF файл-инструкцию на русском (нашел её на этой странице ).

А вот несколько фоток:

1, Сравнение размеров.

2. Режим высокой контрасности

3. Яркость экрана на минимуме (в обычном цветовой режиме)

 

Память у этого осциллографа всего 4 КБайта (по 2 КБайта на канал).  А на его FLASH можно записать 6 снимков экрана (формат BMP). При подключении к ПК опознается как обычная флешка!

А в списке устройств появляется "STM32 netradio DISK1 Device" - непонятно почему такое странное название?  Тем не менее, драйвера стали сами - я ничего не устанавливал!  Вот несколько осциллограм из FLASH памяти осциллографа:

PS: Есть ещё похожая модель  со встроенным мультиметром! Но она - одноканальтная, кнопка "CH2" в ней для мультиметра! И на кнопках управления вроде иероглифы! Так что не знаю удобно ли будет ею пользоваться (разве что наклейки такого типа как для клавиатуры налепить сверху надписей).