Инвертирование уровня шим

Maka
Offline
Зарегистрирован: 24.10.2015

Есть такой пример

#include <Curve.h>

#include <LEDFader.h>

/*
  Fades a single LED up and down using LED Fader.
  Connect an LED to pin 3
*/

#define LED_PIN 3

#define FADE_TIME 2000

#define DIR_UP 1
#define DIR_DOWN -1

LEDFader led;
int direction = DIR_UP;

void setup() {
  led = LEDFader(LED_PIN);
  led.fade(255, FADE_TIME);
}

void loop() {
  led.update();

  // LED no longer fading, switch direction
  if (!led.is_fading()) {

    // Fade down
    if (direction == DIR_UP) {
      led.fade(0, FADE_TIME);
      direction = DIR_DOWN;
    }
    // Fade up
    else {
      led.fade(255, FADE_TIME);
      direction = DIR_UP;
    }
  }
}

Все вроде работает, но мой китайский шим-контроллер понимает значение шим 0 как 100% яркости и, соответственно 255 как 0%. Прошу прощения за глупый вопрос - я не волшебник, я только учусь. Пример из библиотеки

https://github.com/jgillick/arduino-LEDFader

там еще есть curve.h, которую я не понимаю как использовать, но очень хочется...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что за ШИМ контроллер?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Maka пишет:

....

Все вроде работает, но мой китайский шим-контроллер понимает значение шим 0 как 100% яркости и, соответственно 255 как 0%.......

Эти значения означают скважность, то-есть время отсутствия сигнала.

Если скважность 255 соответственно все время пауза на выходе 0%

Если скважность 0 соответственно все время заплнение на выходе 100%

Maka
Offline
Зарегистрирован: 24.10.2015
Maka
Offline
Зарегистрирован: 24.10.2015

bodriy2014 пишет:

Maka пишет:

....

Все вроде работает, но мой китайский шим-контроллер понимает значение шим 0 как 100% яркости и, соответственно 255 как 0%.......

Эти значения означают скважность, то-есть время отсутствия сигнала.

Если скважность 255 соответственно все время пауза на выходе 0%

Если скважность 0 соответственно все время заплнение на выходе 100%

Мой девайс по ссылке выше работает, видимо, наоборот, ведь в скетче диод пульсирует 0 -> 100 -> 0 , а я вижу 100 -> 0 -> 100.

Помогите переписать код, что бы шим по умолчанию был 255 а не 0. 

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

Для начала заменить все 255 на 0, а все 0 на 255.
Переопределить:
DIR_UP -1
DIR_DOWN 1
В первом приближении достаточно

Maka
Offline
Зарегистрирован: 24.10.2015

kisoft пишет:
Для начала заменить все 255 на 0, а все 0 на 255. Переопределить: DIR_UP -1 DIR_DOWN 1 В первом приближении достаточно

Это я попробовал сразу - на глаз ничего не меняется.

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

Судя по скетча (либу не смотрел), начинается все с 255, а не с нуля. См. setup().
"А был ли мальчик"?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Элементарно, Ватсон:

MyValue = 255 - MyValue;

keefa
Offline
Зарегистрирован: 19.06.2015

А так не пойдет:

val = map(значение, 0, 255, 255, 0);

Отсюда.

 

Maka
Offline
Зарегистрирован: 24.10.2015

Разбираюсь в библиотеке - там все есть.

#include <LEDFader.h>
 
// Create new LED Fader on pin 3
LEDFader led = LEDFader(3);
 
void setup() {
  // Fade from 0 - 255 in 3 seconds
  led.set_value(0);
  led.fade(255, 3000);
}
 
void loop() {
  led.update();
}


Можно сделать так:

#include <LEDFader.h>
 
// Create new LED Fader on pin 3
LEDFader led = LEDFader(3);
 
void setup() {
  // Fade from 255 - 0 in 3 seconds
  led.set_value(255);
  led.fade(0, 3000);
}
 
void loop() {
  led.update();
}

 

В моем случае это правильно.
nevkon
Offline
Зарегистрирован: 20.01.2015

Поставьте на выход элемент "не" - вот и вся инверсия.