Матрёшка Z, помогите пожалуйта с дополнительным заданием.

Тема в разделе "Arduino & Shields", создана пользователем Косичка, 7 ноя 2016.

Метки:
  1. Здравствуйте!
    Надеюсь, я правильно выбрала раздел форума, чтобы попросить помощи с "Матрёшкой".
    Третий день бьёмся с мужем над дополнительным заданием Эксперимента №3 "Светильник с управляемой яркостью".
    В дополнительном задании необходимо подключить второй диод к схеме с потенциометром и запрограммировать его гореть на 1\8 от яркости первого.

    #define LED_PIN 9
    #define POT_PIN A0
    #define LED_PIN5 5
    void setup()
    {
    // пин со светодиодом — выход, как и раньше...
    pinMode(LED_PIN, OUTPUT);
    pinMode(LED_PIN5 , OUTPUT);
    pinMode(POT_PIN, INPUT);
    }

    void loop()
    {
    int rotation;
    int brightness;
    int brightness2;

    rotation = analogRead(POT_PIN);

    brightness = rotation / 4;
    brightness2 = rotation / 32;

    analogWrite(LED_PIN, brightness);
    analogWrite(LED_PIN5, brightness2);

    Подскажите, где мы ошибаемся и как сделать правильно? Я во всём интернете не нашла ни единого ответа на дополнительные задания маперки о.О
    Большое спасибо всем, кто отзовётся и поможет!
     
  2. alp69

    alp69 Форумчанин

    Закрывающая скобка в конце скетча только здесь потерялась?
    Как подключили? Второй светодиод подключен физически к 5 или к А5? Через резистор?
    Какой конкретный результат? Что именно не работает?
     
  3. Только здесь, в скетче всё на месте.

    Второй диод подключен физически к 5 (без префикса "А") через резистор 220 Ом. Первый диод и POT подключали по схеме из конспекта.

    А вот результата, к сожалению, нет: схема на макетке работает так, будто бы второй диод вообще не подключен: он не горит ни при одном положении ручки потенциометра. Получается, что работает первый диод (LED_PIN) и потенциометр (POT_PIN), а второй диод (LED_PIN5) не горит :(
     
  4. rkit

    rkit Гуру

    Код выглядит правильно. Проверяйте подключение. Полярность светодиода соблюдена?
     
  5. alp69

    alp69 Форумчанин

    Попробуйте запустить схему с одинаковыми значениями яркости для обоих светодиодов.
     
  6. alp69

    alp69 Форумчанин

    Нечеткая фотография. Но по тому, что видно, ближний светодиод включен поперек монтажной платы. Сделайте фото покачественней. Возможно я ошибаюсь - плохо видно на фото.
     
  7. Прошу прощения. С телефона выглядела вроде ничего.
    [​IMG] Сейчас переключила всё на верхнюю часть макетной платы и сфотографировала с такого ракурса, чтобы было видно что откуда торчит. По-прежнему ничего.
     
  8. alp69

    alp69 Форумчанин

    Даже с одинаковыми значениями знаменателей brightness и brightness2 ?
    Или местами поменять провода, подключенные к 9 и 5 не меняя кода.
     
  9. По порядку:
    1 Если задать brightness = rotation /4
    brightness2 = rotation /4
    то просто горит только первый (тот, что левее) диод
    2 Если убрать вообще brightness2 и в оба диода подставить brightness - результат тот же, что в п.1
    3 Если поменять местами провода 5 и 9, то первый (тот, что левее) диод будет гореть как бы в полнакала, т.е. слабее, чем если бы был воткнут в "свой" девятый порт. Второй (правый) диод по прежнему не горит.
    4 Чтобы исключить нерабочий порт я переключила второй диод с 5 на 6 порт и изменила соответственно код - та же история, горит только первый диод в 9 порту. Может что-то надо ставить в код, чтобы они работали одновременно?
    5 Диод, провода и резисторы от второго диода меняла, чтобы исключить неисправность компонентов.
     
  10. Максим B

    Максим B Гуру

    Добпускаю плохой контакт на макетке- попробуйте все это перекинуть на другую сторону макетной платы.
     
  11. Перекинули. Положительного результата нет.
    Странная фишка - одна из функций работает: либо первый диод и потенциометр, либо второй диод вполнакала и потенциометр. А вот оба два ну никак не хотят одновременно светить.
    В связи с вышеописанным у меня возникает вопрос... если знатоки говорят, что код правильный, то можно сказать себе "ты молодец" и забить на это не получающееся задание? Но тогда получается, что дальше мы будем учиться на неисправной плате, которая выдаёт неадекватный результат при правильном коде. Либо... есть что-то такое очень элементарное, о чём (в силу элементарности вопроса) ни один из профи не упомянул, а мы и не догадываемся о существовании, например, какой-нибудь двухбуквенной команды, разрешающей одновременную работу двух портов на плате о.О
    Расстроилась.
     
  12. rkit

    rkit Гуру

    Код работает. Проверяйте оборудование и подключения.
     
  13. Limoney

    Limoney Гик

    Смотрите, как получается.
    Микроконтроллер имеет в строенный 10-битнный аналогово-цифровой преобразователь, который преобразовывает входное напряжение из диапазона 0 - 5 в целочисленные значения
    в пределах от 0 до 1023.
    Функция analogRead() возвращает целое число int от 0 до 1023 от АЦП в зависимости от измеренного напряжения на аналоговом выводе.
    Функция analogWrite() генерирует ШИМ-сигнал с заданным коэффициентом заполнения.
    Коэффициент заполнения – в пределах от 0 (всегда выключен) до 255 (всегда включен).
    Получается, что считанное значение с потенциометра будет больше чем допустимое значение коэффициента заполнения функции analogWrite.
    Что бы привести полученное значение с потенциометра к диапазону функции analogWrite, значение с потенциометра делиться на 4 и отбрасывается остаток от деления, потому что переменная целочисленная. При выкручивании ручки потенциометра в максимум (большую сторону) будет: 1023/4 = 255 это значение укладывается в максимальный диапазон коэффициент заполнения analogWrite().
    brightness = rotation / 4;
    brightness2 = brightness / 32;
     
    Денчик_45 и Максим B нравится это.
  14. Максим B

    Максим B Гуру

    Разобрать всю схему до "нуля", проверить сопротивления резисторов (в районе 220Ом), плюс проверить по отдельности светодиоды- может оно все работает, просто вы не видете из-за банального брака.
     
  15. Очень извиняюсь... я никак не могу понять, почему нужно яркость делить на 32? Т.е. для того, чтобы "привести к общему знаменателю" данные ручки потенциометра и яркости диода мы делим rotation на 4. А в условиях задачи нужно, чтобы яркость второго диода была равна 1/8 яркости первого. Исходя из этого можно либо написать
    brightness2 = brightness / 8
    либо
    brightness2 = rotation /32

    Или я что-то не понимаю?
     
  16. qwone

    qwone Гик

    яркость число 0 до 255 . резистор 0-1023 . то есть в 4 раза
    brightness= rotation /4;
    brightness2=brightness/8 // это по условию
    или
    brightness2=rotation /4/8;
    или
    brightness2=rotation /32;
     
  17. Limoney

    Limoney Гик

    Не извиняйтесь
    Извините за не внимательность.
    Правильно!
    brightness = rotation / 4;
    brightness2 = rotation / 32
    Скетч правильный, но не работал, скорее всего, из-за не правильно собранной электрической схемы. На фотке схемку не очень хорошо видно.
    А еще можно записать так:
    http://arduino.ru/Reference/Map
    brightness = map(rotation, 0, 1023, 0, 255);
    brightness2 = brightness / 8
     

    Вложения:

    • Image1.jpg
      Image1.jpg
      Размер файла:
      137,7 КБ
      Просмотров:
      394
    Последнее редактирование: 18 ноя 2016
    alp69 нравится это.
  18. Alero

    Alero Нерд

    Здравствуйте! Пожалуйста помогите! В эксперименте №4 у меня не получается задать паузы для процесса звучания сигнала. Пробовал регулировать параметр duration и использовал noTone(pin), но он все равно постоянно беспрерывно звучит. Подскажите пожалуйста что может быть не так?
     
  19. olegoriy

    olegoriy Гик

    А зачем вводить переменные в loop - е ?