VGA подсветка
- Войдите на сайт для отправки комментариев
Пт, 23/10/2020 - 17:14
[code]
#include <Adafruit_NeoPixel.h>
float R,G,B,H,V = 0;
#define PIN 6
#define NUMPIXELS 79
Adafruit_NeoPixel strip(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
// Serial.begin(9600);
strip.begin();
strip.show();
}
void loop() {
R = map( analogRead(A0), 0, 1023, 0, 255);
G = map( analogRead(A1), 0, 1023, 0, 255);
B = map( analogRead(A2), 0, 1023, 0, 255);
H = digitalRead(3);
V = digitalRead(2);
for (int i = 0; i < 79 ; i++) {
int Matrix[79] = {27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
26, 52,
25, 53,
24, 54,
23, 55,
22, 56,
21, 57,
20, 58,
19, 59,
18, 60,
17, 61,
16, 62,
15, 63,
14, 64,
13, 65,
12, 66,
11,10,9,8,7,6,5,4,3,2, 1, 0, 78,77,76,75,74,73,72,71,70,69,68,67} ;
strip.setPixelColor( i, R,G,B);
}
strip.show();
}
Прошу помочь с данным кодом
Нужно синхронизировать выполнение кода с сигналами H и V
Сигнал H импульсы с частотой 45 кГц должен менять положение пикселя на ленте
Сигнал V импульсы с частотой 60 Гц должен возвращать в начало

Если отвечать на Ваш вопрос: как синхронизировать изменение переменных со строчным и кадровым импульсами, то - при помощи аппаратных прерываний.
Но как эта информация может Вам помочь, не знаю. Опишите подробно, как, по Вашему мнению, должна работать Ваша программа. Не зная этого, трудно что-то посоветовать конкретное.
у меня дежавю....?
Я этот вопрос с этими картинками за месяц третий раз вижу... и каждый раз в новой теме
Алекс, у вас же есть тема в проектах... зачем еще одна?
Первый импульс H дает разрешение на 1 светодиод яркость и цвет которого зависит от сигналов RGB
Второй импульс H - второй светодиод и так далее
Импульс V возвращает в начало
Как то так я это вижу
А это видео как работает сейчас
https://youtu.be/yKl8Rbw47z8
А вот чего в комментариях к Вашей программе это не описать? Программа - плюнь, так 90% в подпрограмму попадешь. Поэтому и неправильно работает, что Вы не знаете как она должна ПРАВИЛЬНО работать. Напишите комментарии и все поймете.
Первый импульс H дает разрешение на 1 светодиод яркость и цвет которого зависит от сигналов RGB
Вставьте код правильно и укажите, в какой строчке кода упоминается первый светодиод.
И что значит "дает разрешение"?
При 45 кГц период составит 22 мкс. А время выполнения analogRead - 112 мкс. А вместе с map, которая здесь абсолютно неуместна, - все 200. 3 цвета будут готовы через 600 мкс. За это время успеет придти 27 разрешений. И что с этим всем делать?
Как работает ЭЛТ монитор представляете ? кадровая и строчная развертки через отклоняющую систему
управляют направлением потока электронов в нужное место а сигналы RGB аналоговые содержащие яркостную
составляющую так вот и я хотел попытаться их с имитировать (отклоняющую систему)
Начало с верхнего левого угла построчно
Наверно как то так если грубо.
Код криво отображается по номерам строк
ну вы хоть явные-то косяки в коде поправьте...
Про map() вам уже сказали, вы что, не знаете другого способа привести диапазон 0-1024 к 0-255? - просто поделить на 4 в голову не пришло?
Во вторых, этим своим map вы приводите величины R G B к диапазону 0-255 - тогла зачем они описаны как int?
И в третьих - вы после каждого чтения цветов R G B присваиваете эти цвета всем пикселям ленты (строчки 55-59) Зачем? Она у вас всегда будет одним цветом светится? Вы пишете, что пытались симитировать работу развертки ЭЛТ - но в коде нет никаких следов имитации развертки. Ну вообще никаких, нечего даже обсуждать... вся лента тупо заливается одним и тем же цветом да и все
Это не считая того, что этот код явно не успеет за синхросигналом, о чем уже сказали выше.
В общем, абсолютно непонятно, зачем вы создали новую ветку, в прошлой и код и вопросы были такими же и обсуждение окончилось ничем и в этой будет так же. Эта задачка явно не для начинающего, который собирает код из обрывков чужих скетчей...
Как работает ЭЛТ монитор представляете ? кадровая и строчная развертки через отклоняющую систему
управляют направлением потока электронов в нужное место а сигналы RGB аналоговые содержащие яркостную
составляющую так вот и я хотел попытаться их с имитировать (отклоняющую систему)
Далее: с набором сигналов: HS, VS, R, G, B - в принципе понятно, непонятно, откуда Вы их собираетесь брать.
Начало с верхнего левого угла построчно
Наверно как то так если грубо.
Сигналы Hs, Vs ,R,G,B я беру с переходника HDMI-VGA далее R,G,B сигналы с уровнем 0.7V приходят на схему пиковых детекторов где получается
меняющийся уровень постоянного сигнала от 0 до 3.3 V . 3.3V должна быть максимальная яркость .
Первый светодиод да 27 потому что они расположены за телевизором как в первом коде и используются для других программ
Первая строка начинается с 27 светодиода. Потом вторая строка 26-52 и так далее
Сигнал Hs на 3 пин сигнал Vs на 2 пит уровень TTL 0-5V импульсы горизонтальной и вертикальной синхронизации
я пытался их вписать через прерывания но опыта и понимания как точно это сделать нет. Пробовал счетчик -прерывание срабатывает
но от этого не чего не меняется
А нужен сдвиг - Первый импульс Hs-HIGH сигналы RGB зажигается 27 светодиод Hs- LOW -27 светодиод гаснет
второй импульс Hs-HIGH сигналы RGB-28 и так далее
Импульс Vs-HIGH возврат в начало на 27 светодиод
Не вижу, где ловится "Hs-HIGH".
Поправил в коде выше. Я и так пробовал и как кнопка использовал сигнал Hs и Vs
До сих пор не вижу, где ловится "Hs-HIGH".
AlexBAN - ну вот добавили вы прерывание, увеличиваете в нем counter - а зачем? Все равно вы этот counter нигде не используете и заполняете сплошь всю матрицу одним цветом. Конечно у вас "ничего не срабатывает"...
И еще - я вам в сообщении #8 указал кучу ошибок. Не вижу, чтобы вы хоть что-то пытались поправить... Нафига тогда писать что-то в форум. если вы ответы игнорируете?
Во первых форум создан для того чтобы задавать вопросы не все так все понимают как вы мы бестолковые
идем методом тыка поэтому и спрашиваю как можно реализовать данную идею и лента светится не одним цветом а меняющимся в зависимости от уровня сигналов RGB вот так
Во первых форум создан для того...
В Правилах форума однозначно сказано, что новичкам не следует учить старожилов, для чего создан форум.
Так что рекомендую почитать Правила - форум предназначен совершенно для другого.
идем методом тыка поэтому и спрашиваю как можно реализовать данную идею и лента светится не одним цветом а меняющимся в зависимости от уровня сигналов RGB вот так
Организация подсветки никаким боком не относится к Ардуино.
Вот если бы у Вас действительно была идея, как реализовать нужную Вам подсветку, и Вы были бы способны подробно описать эту идею по-русски, тогда, вероятно, перевод этой идеи с русского на Си++ и имел бы что-то касающееся тематики форума.
Пока что мы видим, что никаких позитивных идей у Вас нет, и Вы пытаетесь получить их на непрофильном форуме.
Да еще и ведете себя неадекватно:
1. Пытаетесь учить старожилов, для чего нужен форум.
2. Вместо того, чтобы исправлять в коде указанные Вам ошибки, вступаете в пререкания с теми, кто пытается Вам помочь.
Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода
Алгоритм я описал выше- импульс Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0
Если б я сам знал как это сделать то и не спрашивал вас старожил
А вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать
Можете ведь и не отвечать раз не хотите
Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода
Алгоритм я описал выше- импульс Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0
Алекс, пока это не идея, а бессмысленный набор слов. В сообщении #6 andriano аргументировано указал. что ваша задумка на этом уровне неосуществима - ардуиновскому коду банально не хватит скорости, причем отставание тут не на несколько процентов - а в несколько раз/
"Идея" ваша должна заключаться в том, каким образом вы собрались успеть считать три сигнала цветности с частотой горизонтальной развертки. Пока у вас такой идеи нет - тут и разговаривать не о чем.
вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать
"носом тыкают" вас с вполне конкретной благородной целью - побудить вас самого хоть что-нибудь изучить по данному предмету. Если вы этого делать не собираетесь, то, боюсь, единственный метод продвинуть ваш проект - поручить разработку более продвинутому человеку
Ну вот можно же нормально писать.
Придется самому до всего доходить, а спрашивать на форуме желание отбили.
Тему закрываю!!!
Идея добавить к имеющемуся коду сигналы Hs и VS и управлять с их помощью положением светодиода
Т.е. чего Вы хотите добиться?
Пока Вы говорите общие слова, которые никак не проясняют идею.
Алгоритм я описал выше- импульс Hs пусть увеличивает Counter на 1 пусть до 25( первая строка 25 светодиодов)и так все 79 а импульс Vs возвращает Counter в 0
Каков алгоритм работы всей программы?
Если б я сам знал как это сделать то и не спрашивал вас старожил
Для того, чтобы иметь шанс получить не глум, а совет по существу, Вам сначала нужно узнать, как это сделать. Вероятно, с помощью других - профильных - форумов. И только когда у Вас это знание будет, обращаться на форум Ардуино, чтобы перевести Ваши знания с русского языка на язык Ардуино (на Си++).
А вы мне говорите что я А и Б не знаю да не знаю но носом то что тыкать
Можете ведь и не отвечать раз не хотите
Ну вот можно же нормально писать.
Придется самому до всего доходить, а спрашивать на форуме желание отбили.
Тему закрываю!!!