analogWrite (всю голову сломал)

Код компилируется и заливается, но светодиодная лента не светит.
При этом на этом же макете с теми же параметрами по выводу - работает.
это не работает:

void setup() {
  //  pinMode(OutPin, OUTPUT);
  Serial.begin(9600);
  Serial.println(F("файл: dimmer_LED_IR-Pult"));
  Serial.println(F("ШИМ на выводе D3"));
  Serial.println(F("IR датчик на выводе D6"));
  Serial.println(F("диапазон ШИМ 0...255"));
  IR.begin();                      // Инициируем работу с ИК-приёмником
}
void loop() {
  //смотрим, что пришло по ИК каналу
  if (IR.check())                        // Если в буфере имеются данные, принятые с пульта (была нажата кнопка)
  {
    Serial.print(F(" Код кнопки:   "));  // Выводим код нажатой кнопки
    Serial.println(IR.data);
    IR_Code = IR.data;
    if (IR_Code == 551486205) {          //стрелка вверх
      brightnesR = brightnesR + Step;
    }
    if (IR_Code == 551518845) {        //стрелка вниз
      brightnesR = brightnesR - Step;
    }
  }
  Serial.println(brightnesR);
  analogWrite(OutPin, brightnesR);
}

а так работает:

#define OutPin 3                    
byte brightnesR;                  
int Step = 10; 
void setup() {
  Serial.begin(9600);
  brightnesR = 10;
}
void loop() {
  analogWrite(OutPin, brightnesR);
  delay (150);
  if (brightnesR < 50) {
    brightnesR = brightnesR + 1;
  }
  if (brightnesR > 45) {
   brightnesR = 10; 
 }
  Serial.print("  Яркость: "); Serial.println(brightnesR);
  analogWrite(OutPin, brightnesR);
  delay (150);
}

Первый код не полный

IR.data это что?

Код кнопки в хексе поди надо?

ну вывод в порт показывает, что brightnesR меняется

А IR_Code что?) И зачем?

Вот полный текст нерабочего кода:

#define OutPin 3                    // D3 назначаем выходным для ШИМа
// int Bright[] = {10, 20, 30, 40, 70, 100, 150, 170, 200, 220, 250};
// int i = 5;                        // начальное значение ШИМ из массива выше
byte brightnesR = 5;
byte Step = 10 ;
#include <iarduino_IR_RX.h>         // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(6);               // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
unsigned long IR_Code = 0;

void setup() {
  //  pinMode(OutPin, OUTPUT);
  Serial.begin(9600);
  IR.begin();                      // Инициируем работу с ИК-приёмником
}
void loop() {
  //смотрим, что пришло по ИК каналу
  if (IR.check())                        // Если в буфере имеются данные, принятые с пульта (была нажата кнопка)
  {
    Serial.print(F(" Код кнопки:   "));  // Выводим код нажатой кнопки
    Serial.println(IR.data);
    IR_Code = IR.data;
    if (IR_Code == 551486205) {          //стрелка вверх
      brightnesR = brightnesR + Step;
    }
    if (IR_Code == 551518845) {        //стрелка вниз
      brightnesR = brightnesR - Step;
    }
  }
  Serial.println(brightnesR);
  analogWrite(OutPin, brightnesR);
}

Рабочий код без IR приемника, а не рабочий - с приемником? И почём вы решили, что у вас проблема в analogWrite()?
Как бы логичнее думать, что у вас приемник не работает.
В коде есть вывод данных в Сериал. Он что-нибудь печатает в Мониторе?

да, именно в мониторе значения для вывода в ШИМ исправно перебираются. То есть код с пульта считывается и не в НЕХ
Первоначально схема работала с реостатом, и сейчас если залить тот код - всё работает (переменник не выпаивал). То есть схема (подключения) те же, переменные те же и объявлены так же.

Можете показать вывод данных в Мониторе?

смешно :slight_smile:

Завтра попробую в работающий код прописать библиотеку для ИК, читать коды, но не использовать их при выводе.
Чёт мне кажется тут какой то конфликт

Так и есть. Цитата из описания

Библиотека использует второй аппаратный таймер, как для раскодирования данных с ИК-приёмника «в фоновом режиме», так и для формирования несущей частоты ИК-передатчика. Не выводите сигнал ШИМ на 3 или 11 вывод, это помешает корректной работе библиотеки.

Просто перенесите ленту на любой другой ШИМ выход, кроме 3 и 11 - должно заработать.

1 лайк

(с) учите матчасть
Спасибо - вечером дойдут руки - перепаяю, отпишусь

перепаял, переписал на D5 (у него еще и частота ШИМ выше) - всё работает.
Всем спасибо.