Тонкости работы функции analogWrite()

Тема в разделе "Arduino & Shields", создана пользователем Meathme, 6 янв 2017.

  1. Meathme

    Meathme Нуб

    Здравствуйте. Вопрос касается работы функции analogWrite() Она принимает на вход в качестве второго аргумента число от 0 до 255 и преобразует его в напряжение от 0 до 5 В. Однако, если передать на вход число большее 255 происходит следующий эффект: напряжение изменяется таким образом, как если бы мы из числа в аргументе вычитали числа кратные 255 до тех пор, пока не получим число <= 255.
    Например, analogWrite(9, 260), делает то же самое, что и analogWrite(9, 5)
    260 - 255 = 5.
    Может ли кто-нибудь объяснить, почему логика именно такая?
    Спасибо.
     
  2. rkit

    rkit Гуру

    В шим сигнал, а не напряжение.
    Она принимает unsigned word. У этого типа максимальное значения 255. Если вы пишете больше, то какое-то поведение не гарантировано, всё зависит от компилятора. В данном случае. я предполагаю, что он взял тип побольше. например unsigned int, а в функцию пошел только младший байт.
     
  3. Jedi

    Jedi Гик

    Или просто берется только младший байт, остальное откидывается
     
  4. Meathme

    Meathme Нуб

    Благодарю за ответы!
     
  5. const_fadeev

    const_fadeev Нуб

    Пожалуй напишу здесь, чтобы не плодить лишние темы.

    Пытаюсь сделать задание Эксперимент 2. Маячок с нарастающей яркостью . Собрал все, скетч загрузил без ошибок. Но проблема в том, что при функции analogWrite(LED_PIN, 0) светодиод горит на максимум, а при analogWrite(LED_PIN, 255) гаснет. То есть инвентируется значение. В чем может быть проблема?
    Arduino UNO
     
  6. rkit

    rkit Гуру

    В полярности подключения светодиода.
     
  7. const_fadeev

    const_fadeev Нуб

    Если бы я перепутал полярность, то он бы вообще не горел, не так ли?

    Перезагрузил ардуину и заработало) не знаю как так)
     
  8. rkit

    rkit Гуру

    Не так