Как ПЕРЕКЛЮЧИТЬ 4 светодиода с 0 на полную яркость с помощью двухосевого резистивного джойстика?
- Я пытаюсь использовать функцию Arduino MAP, чтобы позволить мне управлять 4 светодиодами в диапазоне от 0 до полной яркости. Я предполагаю, что сложность заключается в том, что нейтральное положение джойстика находится на пределе диапазона потенциометров, поэтому аналоговое напряжение на входах составляет + 2,5 В, когда джойстик находится в нейтральном положении). В идеале я хочу, чтобы красный светодиод, связанный с осью Y, переходил от 0 к полному, когда джойстик отодвигается. Аналогично, я хочу, чтобы синий светодиод, связанный с осью Y, горел от 0 до полного, когда джойстик тянут ко мне. Я хочу продублировать это действие для оси X с помощью зеленых и желтых светодиодов, но, похоже, я не могу понять, как компенсировать смещение 2,5 В* Я надеялся, что смогу просто использовать сопоставление значений.
@Tokthebloke, 👍1
Обсуждение1 ответ
▲ 2
Есть несколько шагов, которые вам нужно пройти:
- Считайте АЦП, чтобы узнать положение джойстика
- Вычтите 50% от полного диапазона (512), чтобы получить значение ± 512
- Обратите внимание на знак, чтобы узнать направление
- Возьмите абсолютное значение, чтобы получить расстояние
- Вычтите небольшое количество, чтобы создать "мертвую зону" в центре джойстика.
- Сопоставьте результат с 0-255 для ШИМ.
Код может выглядеть следующим образом (примечание: непроверенный):
int y = analogRead(0); // Получаем текущее значение
y -= 512; // Вычесть 512
int pin = 2; // Если не указано иное, используйте контакт 2
if (y < 0) { // Если он отрицательный...
pin = 3; // тогда вместо этого мы будем использовать pin 3
}
y = abs(y); // Берем абсолютное значение (отбрасываем знак)
y -= 20; // вычтите 20 для мертвой зоны
If (y < 0) y = 0; // обнуление любого отрицательного
y = map(0, 492, 0, 255); // сопоставьте новый полный диапазон от 0-492 до 0-255
analogWrite(pin, y); // зажгите светодиод на выводе, который мы выбрали выше.
И сделайте то же самое для X с разными выводами.
,
@Majenko
Если вы вычтете 20 из y перед отображением, не приведет ли это к некоторым отрицательным значениям y? (Диапазон будет от -20 до 492 вместо 0-512.) Что делает map со значениями, выходящими за пределы диапазона?, @Duncan C
Я бы предложил вместо этого изменить y -= 20;
на if y <= 20 y = 0;
., @Duncan C
Хороший вопрос. Вы должны сделать это в 0., @Majenko
Смотрите также:
- Как убедиться, что импульсы ШИМ Arduino сдвинуты по фазе?
- Светодиод Arduino PWM с замиранием в сборке
- AnalogWrite никогда не выводит ненулевое напряжение
- «Вручную» генерация ШИМ-сигнала
- Светодиодная панель ESP32 с регулируемой яркостью и MOSFET
- Затемнение этого светодиода ~ 30 В с помощью ШИМ, что мне нужно?
- ШИМ-управление, как остановить мерцание светодиода?
- Чтение аналогового значения при генерации сигнала ШИМ
Да, просто сопоставьте 2,5-5 с 0-255 и проанализируйте это значение, @Sim Son
int x=analogRead(A0);если (x >=512) red=(x-512)/2;
и т.д., @DataFiddlerСпасибо всем, кто откликнулся. Я пробовал подход Симсона и так же безуспешно. Мне нужно будет протестировать другие методы.Я доложу о прогрессе., @Tokthebloke