Инфракрасная отправка не работает. Неправильное конфигурирование?

Edit: Принял некоторые советы снизу, но это все еще не работает. Я думаю, что это, вероятно, блокирующий код, но, пожалуйста, скажите мне, как я мог бы исправить его, чтобы отправить действительный инфракрасный сигнал, ПРИМЕЧАНИЕ: На самом деле я бы не стал кодировать его так, как это я просто пытаюсь узнать и понять, как это сделать, а затем сделать его лучше после:

uint8_t Status;
uint8_t Counter;
const uint32_t Code[] = {4507,4507,573,1694,573,1694,573,1694,573,573,573,573,573,573,573,573,573,573,573,1694,573,1694,573,1694,573,573,573,573,573,573,573,573,573,573,573,573,573,1694,573,573,573,573,573,573,573,573,573,573,573,573,573,1694,573,573,573,1694,573,1694,573,1694,573,1694,573,1694,573,1694,573,46560};

void setup() {
  pinMode(4, OUTPUT);
}

void loop() {
  while(Counter<70) {
    if (Status=1) {
        digitalWrite(4, HIGH);
        Status=3;
        while(Status=3) {
          delayMicroseconds(26);
          digitalWrite(4, HIGH);
          delayMicroseconds(26);
          digitalWrite(4, LOW);
        }
        delayMicroseconds(Code[Counter]);
        Status=2;
        Counter++;
    } else {
      if (Status=2) {
        digitalWrite(4, LOW);
        Status=0;
        while(Status=0) {
          delayMicroseconds(26);
          digitalWrite(4, HIGH);
          delayMicroseconds(26);
          digitalWrite(4, LOW);
        }
        delayMicroseconds(Code[Counter]);
        Status=1;
        Counter++;
      }
    }
  }
}

, 👍-1

Обсуждение

Непонятно, в чем именно заключается проблема. Возможно, у вас есть некоторые основные заблуждения. Например, что инфракрасные пульты (а также большинство библиотек) используют фиксированную модуляцию для импульсов (например, на 38 кГц), чтобы получить лучшую помехоустойчивость. Как вы получаете ИК-сигнал? Вам нужно послать ИК-сигнал, который приемник поймет., @chrisl

Необработанные инфракрасные тайминги, по-моему, не нуждаются в указании Гц. если вы постоянно мигаете светодиодом с частотой 1 Гц, то он будет мигать 1 раз в секунду. 2 Гц 2 раза в секунду. Фактические инфракрасные таймеры в переменной Buf не нужно указывать частоту, так как они являются необработанными. Таким образом, код выше начинается с первого 4507, и это будет задержка. (время). Я считаю, что это так работает после того, как прочитал много об инфракрасном. Но проблема в том, что я не знаю, как это реализовать. делаю ли я задержку flash для 4507, а затем отключаю ее для 4507? Я знаю, как это работает, но мне нужна помощь в отладке этого, @Macaroni

Нет, я очень уверен, что вы не просто посылаете необработанные циклы включения и выключения со светодиодом, хотя это зависит от того, что вы используете для приема сигнала. Ты не ответил на этот вопрос. Так как же вы принимаете сигнал?, @chrisl

Я не смотрю на принимающую сторону., @Macaroni

оооо, как ты проверяешь, работает он или нет? Звучит как проверка выключателя, но не глядя на фактический свет, если он действительно загорается., @chrisl

Если телевизор включен, он работает :/, @Macaroni

если (статус=1) " является назначением, это не будет работать так, как вы думаете. Это должно быть сравнение: если (статус==1)". Аналогично для операторов 'while (Status=2) и других операторов' if() и while() в вашем коде. Кроме того, ваши циклы "while () {}" никогда не выйдут, потому что значение "Status" никогда не меняется внутри цикла., @StarCat

`Если телевизор включен, то он работает"... не все они одинаковы ... что такое бренд и модель телевизора?, @jsotola


1 ответ


0

Здесь есть две основные ошибки - одна из них связана с вашим пониманием времени, а другая-с вашим пониманием того, как работает ИК-связь.

Во - первых, тайминги-это как ВКЛЮЧЕННЫЕ, так и ВЫКЛЮЧЕННЫЕ тайминги. Вы не просто включаетесь на определенный промежуток времени - вы включаетесь на определенный промежуток времени, а затем выключаетесь на другой определенный промежуток времени.

Таким образом, для таймингов в вашем коде 4507,4507,573,1694,573,...и т. Д.... вы должны:

  • Включите
  • Подождите 4507us
  • Выключите
  • Подождите 4507us
  • Включите
  • Подожди 573us
  • Выключите
  • Подожди 1694us
  • Включите
  • Подожди 573us
  • ... и т.д...

В вашем коде нет времени "выкл", только время от времени.

Во-вторых, это ваше понимание ИК-коммуникаций. Это не требует включения или выключения светодиода в течение определенного времени. Все не так просто. Вместо этого вы управляете модуляцией светодиода. Когда светодиод ИК - пульта дистанционного управления "горит", он не просто включается-он быстро включается и выключается. Приемник проверяет наличие или отсутствие этого быстрого включения и выключения света. Это "несущая частота" сигнала, и она должна соответствовать тому, что ищет приемник.

Обычно это составляет от 30 кГц до 50 кГц, в зависимости от приемника.

Поэтому вам нужен какой-то способ генерирования этого быстрого сигнала включения-выключения. Обычно это делается с помощью ШИМ ИК-библиотек и переключения между 0% и 50% рабочим циклом для периодов выключения и включения сигнала, который вы хотите отправить.

Так что гораздо проще просто использовать библиотеку, которая выполняет всю эту основную работу за вас.

,

Спасибо, я попробую это и посмотрю, сработает ли это <3, @Macaroni

Я отредактировал свой вопрос, потому что ваш должен работать, но это не так., @Macaroni

Вы рассмотрели первую проблему, но ничего не сделали со второй проблемой., @Majenko

Задержка в микросекундах(26) составляет 38 кГц :/, @Macaroni

Это я могу на 100% проверить, я знаю, так как это упоминалось во всех материалах, которые я читал, @Macaroni

За исключением некоторых проблем: 1. "Цифровая запись" и "в то время как" требуют времени, поэтому ваши 38 кГц будут больше похожи на 10 кГц, если вам повезет. 2. У вас нет возможности когда-либо покинуть свой цикл " пока`. 3. Вы выполняете задание, а не сравнение, которое всегда будет верным., @Majenko

можете ли вы предоставить мне какой-нибудь базовый упрощенный код для того, что мне нужно сделать? :>, @Macaroni

`если (Статус==2) "- это сравнение, "если (статус=2)" - это назначение., @hcheung

Да: используйте библиотеку. Вы пытаетесь выполнить что-то очень сложное и даже не понимаете базового синтаксиса библиотеки., @Majenko

Я имею в виду, что могу пользоваться библиотекой. Я просто хочу понять, как это работает, и я хочу сделать свою собственную упрощенную версию. Удовлетворение от того, что вы делаете это самостоятельно и просто более гибко, так как он маленький, и я могу читать его лучше, и не только это улучшает его производительность, даже если она незначительна., @Macaroni

Начните с чего-то более простого. ИК требует точного времени и глубокого знания внутренних компонентов микроконтроллеров., @Majenko

оки :~ спасибо :>, @Macaroni