Но светики светят слишком ярко, поэтому я добавила регулирование яркости, но движение светиков получилось не плавное - мерцающее и прерывистое. Где я ошиблась?
Если ByteSend хранит инфу для двух регистров, зачем он long? int-та хватит.
long нужно если вы все четыре байта хотите хранить в одной переменной. Если уж решили "разбить на две перенных", то логично что и переменные должны стать int-тами. Каждая по два байта. В итоге - четыре.
ТО же самое и с параметрами функции registerWrite. Раз уже пихам две переменных, то тоже Int-ты.
И тогде register3,4 будет заполнятся абсолютно аналогично, тому как register5,6. Не нужно на целых 24 бита что-то двигать.
В аналогии с достками. у вас была достка на 32-лунки, а теперь две достки на 16-ть лунок. Зачем вы сделали две 32-х луночные?
Ну и естественно
bitWrite(ByteSend1, thisLed+16, 1);
уже не нужно прибавлять +16. 0 бит, byteSend1 это и будет "первый светодиод 3-тьего регистра" (то есть 16-тый светик).
>поэтому я добавила регулирование яркости,
только неправлиьно добавили. Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. Много раз... до того как переходить к следующему. Если время "включено" и "выключено" совпадает, то имеем визуальную "половинную яркость" (если все происходит достаточно быстро. Если не успеваем быстро, то глаз будет видить "мерцания").
for(char thisLed = 0; thisLed < 16; thisLed++)
{
ByteSend=0;ByteSend1=0; // выключаем светики, если горят, от предыдущего прохода
boolean state=true; // состояние текущий пары в данный момент
for(unsigned int j=0;j<1000;j++){ // 1000 - это есть "сколько времени гореть светикам до того как перейти к следующей паре. чем больше число - тем дольше.
bitWrite(ByteSend, thisLed, state);
bitWrite(ByteSend1, thisLed+16, state); // переделайте это на int-ты....
registerWrite(ByteSend,ByteSend1);
state=!state; // инвертируем состояние
}
}
где грань между программным устранением дребезга контактов и аппаратным.... рожаю схему драйвера на 4 кнопки, к555тр2 и к555лн1, и 4 резистора на 10 kOm..... если не миниатюзируем устройство - что лучше ? применить платку 20 х 48 или программно бороцца ? спасибо :)
Ответ завист от того кто вам будет отвечать. Программер скажет "конечно програмно", железячник скажет "проще железно".
Я, как програмер, ественно скажу "програмно" :) (ну и всвоем проекте, естественно выберу именно такое решение).
только неправлиьно добавили. Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. Много раз... до того как переходить к следующему. Если время "включено" и "выключено" совпадает, то имеем визуальную "половинную яркость" (если все происходит достаточно быстро. Если не успеваем быстро, то глаз будет видить "мерцания").
Попробовала вставить ваш код, но он работает как-то не так
//Пин подключен к ST_CP входу 74HC595
const int latchPin = 8;
//Пин подключен к SH_CP входу 74HC595
const int clockPin = 12;
//Пин подключен к DS входу 74HC595
const int dataPin = 11;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop()
{
int ByteSend=0;
int ByteSend1=0;
for(char thisLed = 0; thisLed < 16; thisLed++)
{
ByteSend=0;ByteSend1=0; // выключаем светики, если горят, от предыдущего прохода
boolean state=true; // состояние текущий пары в данный момент
for(unsigned int j=0;j<1000;j++){ // 1000 - это есть "сколько времени гореть светикам до того как перейти к следующей паре. чем больше число - тем дольше.
bitWrite(ByteSend, thisLed, state);
bitWrite(ByteSend1, thisLed, state);
registerWrite(ByteSend,ByteSend1);
state=!state; // инвертируем состояние
}
}
}
void registerWrite(int bitsToSend1, int bitsToSend2) {
digitalWrite(latchPin, LOW);
byte register3 = (bitsToSend2) >> 8;
byte register4 = (bitsToSend2) ;
byte register5 = (bitsToSend1) >> 8;
byte register6 = (bitsToSend1);
shiftOut(dataPin, clockPin, MSBFIRST, register3);
shiftOut(dataPin, clockPin, MSBFIRST, register4);
shiftOut(dataPin, clockPin, MSBFIRST, register5);
shiftOut(dataPin, clockPin, MSBFIRST, register6);
digitalWrite(latchPin, HIGH);
}
Если я правильно поняла, то чем меньше кругов в цикле пройдет, то тем тусклее будет светится светик. Но когда я меняю 1000 на 100, то яркость не меняется, но зато скорость движения светиков увеличивается. Если поменять на 10, то яркость снижается, но и скорость такая, что не видно движения - сплошная линия.
Поэтому, после цикла яркости я добавляю delay(100); для регулирования скорости перемещения, но в таком случае светики мерцают.
> то яркость не меняется, но зато скорость движения светиков увеличивается.
Ну та "что же тут не так". Именно так. Цифра это сколько раз мы делаем "включение/выключение" светика перед тем как перейти к следующей паре. То есть это именно и есть "скорость перемещения". Чем меньше цифра - тем быстрее перемещается.
К "яркости" - эта цифра 1000 не имеет никакого отношения. Яркость зависит от соотношения времени "включен/выключен" (один и тот же светик, до перехода к следующей паре). В цикле for(j=0 мы один проход включаем, один - выключаем. Проходы - одинаковы по времени. Следовательно соотношение 1 к 1. То есть светик будет светится на "половинной яркости".
Куда вы воткнули delay()- не очень понтяно. если внутрь j-цикла, то вы просто снизили "частоту шима". Увеличили време "горения" и "не горения". Но соотношение их осталось одно и тоже. Одинаковое. Следовательно светик по прежнему будет гореть на "половинной яркости". Но, если время сильно увеличить (вместо "быстро-быстро переключать", делать это "медленно и печально"),то инерции глаза уже будет не хватать воспринимать это как "половинную яркость" (светик, на самом деле всегда светит на полную, это при больших частотах глаз нас обманывает).
Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).
То вам нужно тыкать delay() (или даже delayMicros()), в for(j=0 цикл не одинаковы для прохода "горит" и "не горит" (переменная state), а разные. Скажем "не гореть дольше чем гореть" (яркость меньше 50%). если "гореть дольше чем не гореть" - яркость больше 50%
Скжем что-то типа такого:
if(state)delay(1); else delay(10);
1/10 - 0.1, то есть "яркость 10%".
Это в идеале, но... сами bitWrite, registerWrite - тоже занимает время. То есть они как-бы тоже небольшой delay() который хотим мы или нет - добавляется к каждому проходу цикла. Скажем это занимает writeDelay времени (если хотите - можете попытаться замерить это число).
Поэтому реальная яркость будет не 1/10, а (1+writeDelay)/(10+writeDelay)
Или другой вариант регулировки яркости. В котором не нужно выяснять "сколько же времени занимает отсылка данных" (writeDelay) и частота шима будет "максимальной из возможных".
Скажем мы хотим иметь 100 градаций яркости (ну, фактически в процентах задавать).
Тогда на нужно state не "тупо переключать каждый проход", а выставлять его в зависимости от того, какой сейчас j.
Воспользоваться % (modulo) - остатком от деления. И в зависимости от него, решать "включать сейчас светик" или нет
Вместо state=!state
Сзелать что-то типа
state= ((j % 100) <=30)
Тогда при j от 0..30, 100..130, 200..230 и т.п. - светик будет включен, а на 31..99, 131...199, 231...299 - выключен.
То есть 30 проходов цикла горит, 70 - не горит. Имеем 30% яркость.
Но, "расплатой" за это у на есть "частота шима". Она снизилась в 100 раз. Светик-то, в итоге реже переключается. Если мерцания уже стали видны, то.... прийдется жертвовать количеством градаций. Оставить, скажем 10-ть градаций (смотреть на остаток от деления на 10-ть) . 3 - горит, 7 - не горит.
state=((j% 10) <=3);
Те же самые 30% яркости. Только частота в 10-ть раз выше. Правда, поставить скажем 35% - уже не сможем. Следующая доступная нам яркость - 40%
ноги регистров OE - подайте на них ШИМ с ноги МК - будет регулировка яркости
Кстати - тоже вариант. Вместо того что-бы "быстро-быстро" включать выключать светики через регистры, можно "быстро-быстро" включать/выключать сами регистры :)
Как я и говорил выше - зависит от того кто задачу решает. "Програмер" или "железячник".
Я в первую очередь думаю от том как "програмно сделать".
Действительно, сделать analogWrite на какую-то ногу - проще (если есть возможность). И код существенно упроститься.
Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).
То вам нужно тыкать delay() (или даже delayMicros()), в for(j=0 цикл не одинаковы для прохода "горит" и "не горит" (переменная state), а разные. Скажем "не гореть дольше чем гореть" (яркость меньше 50%). если "гореть дольше чем не гореть" - яркость больше 50%
Скжем что-то типа такого:
if(state)delay(1); else delay(10);
1/10 - 0.1, то есть "яркость 10%".
Это в идеале, но... сами bitWrite, registerWrite - тоже занимает время. То есть они как-бы тоже небольшой delay() который хотим мы или нет - добавляется к каждому проходу цикла. Скажем это занимает writeDelay времени (если хотите - можете попытаться замерить это число).
Поэтому реальная яркость будет не 1/10, а (1+writeDelay)/(10+writeDelay)
Спасибо, попробую.
leshak пишет:
Действительно, сделать analogWrite на какую-то ногу - проще (если есть возможность). И код существенно упроститься.
На ногу регистра, или в коде поменять на analogWrite?
На ногу регистра, или в коде поменять на analogWrite?
Что вы в коде собрались менять на analogWrite?
Во первых поймите, что SU-27 предложил ортогональный вариант, моему пути.
Я пошел "програмно". Путем изменения соотношения времени сколько диод горид/не горит.
Само это "горит/не горит", делается путем посылки с определенными интервалами команд через "registerWrite".
SU-27, предложил "пусть команда будет одна. ВКЛЮЧИСЬ". Код думает (когда мы бежим по циклу) что он включил светик (и не думает про его яркость). Вообщем это ваш код из №55 (только естествено выбросить из него вашу попытку "регулируем яркость", так как она ничего не регулирует.
Вернее поставить в строку 26 delay(100) - это будет скорость передвижения по светикам.
строку 32 - нафиг. Там где сейчас delay(100) - нафиг. Ничего кроме моргания - она вообще не дает.
В результате, вы получите "огонек бежит". На полной яркости. Без миганий и проч.
Ну а дальше, применять "рецепт" от SU-27.
Выяснить где находится нога OE (у регистра, и есть ли она вообще) , что она делает (почему он вообще именно эту ногу назвал). И подать на нее ШИМ.
Где взять ШИМ и как им управлять есть затруднения?
Вообщем, если бы я делал,то я бы, откатился к коду #55. Добился бы что-бы он красиво и хорошо, без всяких миганий работал на полной яркости (без пауз после выключения светиков, пауза только на "светики горят").
А потом регулировал яркость по рецепту SU-27.
Так действительно намного проще. Тут готов признать, что "програмный вариант" (мой вариант) - намного гиморойней чем "железячный".
Ну я не знаю:) Я у вас, как у спецов, и спрашиваю чтобы узнать. Ногу OE я нашла, только не совсем понятно. Один регистр я подключу, а остальные паралельно подключать, или последовательно через какой-нибудь пин? И еще я хотела бы добиться "эффекта кометы", например, горят три светика первый из них светит ярко, второй на половину яркости, а третий на четверть от общей яркости. Но я что-то сомневаюсь, что такое можно сделать через эту ногу OE - она же только будет включать выключать все светики.
И еще вопрос не совсем по теме. Есть ли в ардуине динамические массивы, или можно как нибудь изменить размер имеющегося массива? Поискала в гугле примеры на С++ но там что-то не понятное, и компилятор ругается.
опять же - чем длинне хвост - тем меньше яркость.... при Комета+Хвост=1+3 яркость 255 уже будет снижена в 4 раза :(
А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
SU-27-16 пишет:
а зачем это вам ? и поточнее задачку расскажите :)
Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось
> А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
.....вы не забыли, что всё это будет крутиться в лупе ?
> Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось
....что-то вы не так поняли :( размером массива что-то рулить проблеммно, а вот значениями из массива - все так и делают
> ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
registerWrite 3 раза подряд - это не увеличение яркости в три раза
Массивы (arrays) — именованный набор однотипных переменных, с доступом к отдельным элементам по их индексу.
Объявление массивов
Ниже приведены несколько корректных вариантов объявления массивов:
intmyInts[6];
intmyPins[] = {2, 4, 8, 3, 6};
intmySensVals[6] = {2, 4, -8, 3, 2};
charmessage[6] = "hello";
Массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива myInts.
Массив myPins был объявлен без явного задания размера. Компилятор сам посчитает фактическое количество элементов и создаcт в памяти массив необходимого размера.
Размер может быть задан явно, одновременно с инициализацией элементов массива. Обратите внимания, что при создании массива типа char, необходим дополнительный элемент массива для нулевого символа. Подробнее см. строки.
Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов registerWrite - вы так и не поняли механизм формирования "яркости светодиода".
Отложите в сторону свои регистры.
Возьмте один светодиод.
И научитесь ему менять яркость. Разными способами:
1. Через analogWrite (заодно погуглите страинцы, кроме документации, что же именно делает analogWrite)
2. digitalWrite/delayMicros.
Что-бы понять "что и как влияет на яркость".
Потом прицепите 4-ре светодиода (все еще без регистров). И им научитесь меня яркость (всем сразу), пускать волну. Опять/таки двумя способами.
Потом замените "прямое управление", на "использование сдвигового регистра" (они вообщем-то по сути - очень похожи).
Опять-таки, вначале научитесь менять яркость "всем сразу", как более простой метод.
Сделайте все-ми трямя способами: как предложил SU-27, и мои два "программных".
И уже ПОСЛЕ этого, будете думать "как отдельному светику яркость выставлять". На этоп этапе уже будет понятно, какие способы удобней для "всех сразу", а какие "для индивидуального" (imho мой способ - больше подходит для "индивидуального". через OE-пин удобней "все сразу", а вот отдельные - проблематично).
А то у вас "хотелки" нарастают быстрее чем умения. Так и не довели, до конца, ни один способ регулировки яркости, а уже полезли "усложнять". Каждому отдельно захотелось....
И похоже, уже заболели болезнью программеров "универсаализация". Уже динамические массивы нужны....
Можно конечно и динамические, берете учебник по C/C++ и начинаете штудировать разделы относящиеся к указателям, выделению/освобождению памяти. Потом структуры данных (связанные списки и т.п.) и т.д. Но сразу предупреждают: это уже не очень "для новичков". Хорошие знание C,C++ конечно обязательно подразумевает уменее работать с указателями, но ... все равно это основной источник ошибок даже для опытных. Слышали выражения "память течет", "утечка памяти", "мемори лики полезли" - вот это оно :(
Тем более, что на ebmeded разработке, "динамические массивы" - не так уж часто и нужны. Ну не знаете вы заранее сколько у вас будет сдвиговых. Ну предположим что оно может меняться "на ходу" (тем же энкодером). Но фиг с ним. Все равно можете прикинуть "максимальное количество". 1000-че же не будет. Ну сколько их может быть? 2,4 ну 8-мь.
Возмите "запас". Выделите массив для 16-ти сдвиговых регистров.
И отдельно переменную "а сколько их по факту есть".
НУ пусть пока их 4-ре штуки. Ну значит 16-4=12 байт памяти будет "расходоваться зря". Не велика потеря. Полноценная "динамичность", вам даст более большое увеличение памяти.
А потом уже можно и энкодерами занятся, с прерываниями разобратся и т.п. и т.д.
Вообщем "идите по шагам", не прыгайте через ступеньку.
Ниже приведены несколько корректных вариантов объявления массивов:
Так я знаю как объявить, вопрос в том, как изменить размер.
leshak пишет:
Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов registerWrite - вы так и не поняли механизм формирования "яркости светодиода".
Ну ведь работает же:)
А что не так? Яркость зависит от того, как часто включается и выключается светик и от пауз между включением и выключением, и чем меньше пауза включения и чем больше пауза после выключения, тем меньше яркость. А когда я вызываю повторно registerWrite, то тем самым увеличиваю паузу после включения(Вы сами говорили, что различные функции тоже занимают время), и яркость становится больше.
leshak пишет:
А то у вас "хотелки" нарастают быстрее чем умения.
Хотелки являются двигателем прогресса. Если бы я не захотела менять яркость, то и не стала бы думать на эту тему. Или если бы не захотела что-то делать на МК, то вообще бы про них ничего не знала:)
leshak пишет:
Можно конечно и динамические, берете учебник по C/C++ и начинаете штудировать разделы относящиеся к указателям, выделению/освобождению памяти. Потом структуры данных (связанные списки и т.п.) и т.д.
Т.е. в С++ нельзя изменить размер массива, и после этого говорят, что С++ гибкий язык?:)
Извиняюсь, только сейчас узнала в чем разница между энкодером и потенциометром)) Ни когда бы не подумала, что они так различаются))
leshak пишет:
Сделайте все-ми трямя способами: как предложил SU-27
Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр. В итоге, когда зажигаю светики на первом регистре - все нормально, светики светят ровно и регулируется яркость, но когда зажигаю на первом и втором, то на первом светики еле светят, даже если на втором горит всего один светик. Напряжения не хватает?
Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр.
Не может, а "неправильно". Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Вообщем перечитывайте сообщение #84. Разбирайтесь в таком порядке со светодиодами. "На давайте пищу анекдотам".
Вначале должно идти понимание, а уж потом "что-то к чему-то прицеплять".
P.S. Ух... молитесь что-бы Пухлявый не заметил этих экспериментов :)
Не нравится с++ пишите на другом языке. Прежде чем что то хаять, научитесь пользоваться языком правильно.
А вы, вместо того чтобы бухтеть, могли бы подсказать! Форум на то и форум, чтобы делиться знаниями, а не умничать!
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Вы дали оценочное суждение, что типа "он не гибкий".
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
А судить о языке по наличию или отсуствия динамических массивов....
Например в prolog нет имеют массивов. переменных. операторов ветвления (if, switch).Циклов даже - и тех нет.
При этом он общего назначения, на нем решают всякие ИИ задачи (экспертные системы и т.п.). И по гибкости он заткнет многи c-подобные языки. Хотя - практически ничего в своем синтаксисе - не имеет.
> но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр
у цифровых микросхем входы и выходы цифровые ! подключив потенциометр к /OE вы смогли подать на эту ногу от 0 до 5 V - а она понимает только TTL-уровни, если на вход подать напряжение > уровня 0 и < уровня 1 - то входной каскад этой ноги начинает работать как бешеный операционный усилитель :)
Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Шим управляет напряжением, потенциометр тоже. А добиться хотела того, чтобы не использовать еще один пин, которых и так дефицит, и избежать программной регулировки яркости, ибо в таком случае получаются не нужные задержки.
leshak пишет:
молитесь что-бы Пухлявый не заметил этих экспериментов
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Как изменить размер массива - это вопрос дурака?
leshak пишет:
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
А я не спрашивала, что для этого нужно знать. Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.
leshak пишет:
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
Ох, Вы бы еще перед ребенком гордились такими достижениями. А слабо ребенка родить? Или vmprot снять хотябы с ехе файла? То же))
Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)
Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Шим управляет напряжением, потенциометр тоже.
ШИМ - не управляет напряжением.
Вообще ШИМ это вид сигнала, а потенциометр - это элемент элетрической цепи.
Так что, как уже говорилось выше. Рабирайтесь что такое ШИМ, на примере одного светодиода. Книжечки какие-то почитайте, статьи, раз форумные "объяснения на пальцах" получаются слишком сложными. Раз уже столько времени не получается сдвинуться с мертвой точки.
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Как изменить размер массива - это вопрос дурака?
Судя по дальнейшем рассуждениям - да. Умный от дурака отличается не тем какие вопросы задает, а тем что делает с ответами.
leshak пишет:
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
Fekla пишет:
А я не спрашивала, что для этого нужно знать.
А зря.
Fekla пишет:
Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.
То есть, вы не зная как решается задача, уверенны что знаете как должен выглядит ответ? Уверенны что "пара строк" - и все заработает?
Вы, может быть, и к доктору тоже так приходите: "че ты грузишь меня своей анатомией... я хочу сестре операцию сделать, ты мне тупо покажи где резать нужно.."
Fekla пишет:
leshak пишет:
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
Ох, Вы бы еще перед ребенком гордились такими достижениями.
Не вижу ничего плохого в том что-бы гордится своими знаниями. И способностью их преобретать.
Fekla пишет:
А слабо ребенка родить?
Слабо. И что?
Fekla пишет:
Или vmprot снять хотябы с ехе файла? То же))
Ну если бы я не знал как это сделат (и мне нужно было), и кто-то сказал бы мне что для этого необходимо знать - пошель бы разбираться с этим (либо искал бы кого-то кто сделает за меня).
Fekla пишет:
Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)
Ну давайте посмотрим, что он вам сказал: "главное - какое время сигнал имеет значение 0 , и какое время 5 V"
Теперь смотрим, что вам писали 10 дней назад:
- "Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. "
- "Яркость зависит от соотношения времени "включен/выключен",
- " изменения соотношения времени сколько диод горид/не горит."
это уже не говоря про примеры кода. в которых тоже виден принцип.
Но "разбираться с принципами" - это не наше. Мы лучше будем "на глаз солить".
Да объяснять как нам помогать правильно нужно.
Так кто вам виноват что до вас доходит с 5-того раза? И любые призывы "разобраться с основой" - пропускаются мимо ушей? "Ты не мудри, ты пальцем покажи..."
Ребенка можете родить? Нашли чем гордица. Ваша-то заслуга в этом какая? Природа так распорядилась...
Да, мужики не могут. Есть барышни, которые что-бы доказать "я сама могу" умудряются повесить карниз. Забив 4-ре шурупа. Молотком. В несущую бетонную стену. Сколько не спрашивал, даже проф.строителей - никто не берется повторить сей подвиг.
Так что, продолжайте забивать шурупы молотком. Как говорит Пухлявый: "пошел за попкорном". Нас явно ждут еще много чудестных открытий. "Просто покажите как правильно молотком шуруп забивать".
Широтно-импульсная модуляция (ШИМ, англ.pulse-width modulation (PWM)) — управление средним значением напряжения на нагрузке путём изменения скважности импульсов, управляющих ключом.
SU-27-16 пишет:
будет вам и 20 пар строк - только сможите ли вы задачу поставить ясно , одним постом ?
Так задача и состоит в том, чтобы изменить размер массива. Специально не хочу усложнять задачу и давать какой-то конкретный пример скетча, чтобы мне было более понятней.
Например:
int x[10];
void loop() {
for (int i = 0; i <10; i++) {
x[i] = 1;
}
}
мог бы и сразу сказать... :(
....как же ты там живёшь - без окучивания ? женитьба ? дык, ... пардон..... молчу....
Зачем окучивать абы кого?
всяко бывает.... особенно из настойки из попкорна :)-
...от...
Fekla, извините... пожста... мальчишник.... :(
Вот, вроде получилось
Но светики светят слишком ярко, поэтому я добавила регулирование яркости, но движение светиков получилось не плавное - мерцающее и прерывистое. Где я ошиблась?
>Вот, вроде получилось
Ну, у нас все тоже "про типы".
Если ByteSend хранит инфу для двух регистров, зачем он long? int-та хватит.
long нужно если вы все четыре байта хотите хранить в одной переменной. Если уж решили "разбить на две перенных", то логично что и переменные должны стать int-тами. Каждая по два байта. В итоге - четыре.
ТО же самое и с параметрами функции registerWrite. Раз уже пихам две переменных, то тоже Int-ты.
И тогде register3,4 будет заполнятся абсолютно аналогично, тому как register5,6. Не нужно на целых 24 бита что-то двигать.
В аналогии с достками. у вас была достка на 32-лунки, а теперь две достки на 16-ть лунок. Зачем вы сделали две 32-х луночные?
Ну и естественно
уже не нужно прибавлять +16. 0 бит, byteSend1 это и будет "первый светодиод 3-тьего регистра" (то есть 16-тый светик).
>поэтому я добавила регулирование яркости,
только неправлиьно добавили. Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. Много раз... до того как переходить к следующему. Если время "включено" и "выключено" совпадает, то имеем визуальную "половинную яркость" (если все происходит достаточно быстро. Если не успеваем быстро, то глаз будет видить "мерцания").
Кстати, если у вас регистры всегда работают "в паре", то есть состояни первого совпадает с третьем, а второго с четвертым, то...
Вам не нужно bitsToSend1 и bitsToSend2
Хватит, и одного bitsToSend1
Просто отправлять его два раза
Вместо
делать
вопрос не в тему...
Тут трудно возразить.
где грань между программным устранением дребезга контактов и аппаратным.... рожаю схему драйвера на 4 кнопки, к555тр2 и к555лн1, и 4 резистора на 10 kOm..... если не миниатюзируем устройство - что лучше ? применить платку 20 х 48 или программно бороцца ? спасибо :)
Ответ завист от того кто вам будет отвечать. Программер скажет "конечно програмно", железячник скажет "проще железно".
Я, как програмер, ественно скажу "програмно" :) (ну и всвоем проекте, естественно выберу именно такое решение).
только неправлиьно добавили. Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. Много раз... до того как переходить к следующему. Если время "включено" и "выключено" совпадает, то имеем визуальную "половинную яркость" (если все происходит достаточно быстро. Если не успеваем быстро, то глаз будет видить "мерцания").
Попробовала вставить ваш код, но он работает как-то не так
Если я правильно поняла, то чем меньше кругов в цикле пройдет, то тем тусклее будет светится светик. Но когда я меняю 1000 на 100, то яркость не меняется, но зато скорость движения светиков увеличивается. Если поменять на 10, то яркость снижается, но и скорость такая, что не видно движения - сплошная линия.
Поэтому, после цикла яркости я добавляю delay(100); для регулирования скорости перемещения, но в таком случае светики мерцают.
> то яркость не меняется, но зато скорость движения светиков увеличивается.
Ну та "что же тут не так". Именно так. Цифра это сколько раз мы делаем "включение/выключение" светика перед тем как перейти к следующей паре. То есть это именно и есть "скорость перемещения". Чем меньше цифра - тем быстрее перемещается.
К "яркости" - эта цифра 1000 не имеет никакого отношения. Яркость зависит от соотношения времени "включен/выключен" (один и тот же светик, до перехода к следующей паре). В цикле for(j=0 мы один проход включаем, один - выключаем. Проходы - одинаковы по времени. Следовательно соотношение 1 к 1. То есть светик будет светится на "половинной яркости".
Куда вы воткнули delay()- не очень понтяно. если внутрь j-цикла, то вы просто снизили "частоту шима". Увеличили време "горения" и "не горения". Но соотношение их осталось одно и тоже. Одинаковое. Следовательно светик по прежнему будет гореть на "половинной яркости". Но, если время сильно увеличить (вместо "быстро-быстро переключать", делать это "медленно и печально"),то инерции глаза уже будет не хватать воспринимать это как "половинную яркость" (светик, на самом деле всегда светит на полную, это при больших частотах глаз нас обманывает).
Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).
То вам нужно тыкать delay() (или даже delayMicros()), в for(j=0 цикл не одинаковы для прохода "горит" и "не горит" (переменная state), а разные. Скажем "не гореть дольше чем гореть" (яркость меньше 50%). если "гореть дольше чем не гореть" - яркость больше 50%
Скжем что-то типа такого:
1/10 - 0.1, то есть "яркость 10%".
Это в идеале, но... сами bitWrite, registerWrite - тоже занимает время. То есть они как-бы тоже небольшой delay() который хотим мы или нет - добавляется к каждому проходу цикла. Скажем это занимает writeDelay времени (если хотите - можете попытаться замерить это число).
Поэтому реальная яркость будет не 1/10, а (1+writeDelay)/(10+writeDelay)
ноги регистров OE - подайте на них ШИМ с ноги МК - будет регулировка яркости
Или другой вариант регулировки яркости. В котором не нужно выяснять "сколько же времени занимает отсылка данных" (writeDelay) и частота шима будет "максимальной из возможных".
Скажем мы хотим иметь 100 градаций яркости (ну, фактически в процентах задавать).
Тогда на нужно state не "тупо переключать каждый проход", а выставлять его в зависимости от того, какой сейчас j.
Воспользоваться % (modulo) - остатком от деления. И в зависимости от него, решать "включать сейчас светик" или нет
Вместо state=!state
Сзелать что-то типа
Тогда при j от 0..30, 100..130, 200..230 и т.п. - светик будет включен, а на 31..99, 131...199, 231...299 - выключен.
То есть 30 проходов цикла горит, 70 - не горит. Имеем 30% яркость.
Но, "расплатой" за это у на есть "частота шима". Она снизилась в 100 раз. Светик-то, в итоге реже переключается. Если мерцания уже стали видны, то.... прийдется жертвовать количеством градаций. Оставить, скажем 10-ть градаций (смотреть на остаток от деления на 10-ть) . 3 - горит, 7 - не горит.
Те же самые 30% яркости. Только частота в 10-ть раз выше. Правда, поставить скажем 35% - уже не сможем. Следующая доступная нам яркость - 40%
ноги регистров OE - подайте на них ШИМ с ноги МК - будет регулировка яркости
Кстати - тоже вариант. Вместо того что-бы "быстро-быстро" включать выключать светики через регистры, можно "быстро-быстро" включать/выключать сами регистры :)
Как я и говорил выше - зависит от того кто задачу решает. "Програмер" или "железячник".
Я в первую очередь думаю от том как "програмно сделать".
Действительно, сделать analogWrite на какую-то ногу - проще (если есть возможность). И код существенно упроститься.
Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).
То вам нужно тыкать delay() (или даже delayMicros()), в for(j=0 цикл не одинаковы для прохода "горит" и "не горит" (переменная state), а разные. Скажем "не гореть дольше чем гореть" (яркость меньше 50%). если "гореть дольше чем не гореть" - яркость больше 50%
Скжем что-то типа такого:
1/10 - 0.1, то есть "яркость 10%".
Это в идеале, но... сами bitWrite, registerWrite - тоже занимает время. То есть они как-бы тоже небольшой delay() который хотим мы или нет - добавляется к каждому проходу цикла. Скажем это занимает writeDelay времени (если хотите - можете попытаться замерить это число).
Поэтому реальная яркость будет не 1/10, а (1+writeDelay)/(10+writeDelay)
Спасибо, попробую.
Действительно, сделать analogWrite на какую-то ногу - проще (если есть возможность). И код существенно упроститься.
На ногу регистра, или в коде поменять на analogWrite?
На ногу регистра, или в коде поменять на analogWrite?
Что вы в коде собрались менять на analogWrite?
Во первых поймите, что SU-27 предложил ортогональный вариант, моему пути.
Я пошел "програмно". Путем изменения соотношения времени сколько диод горид/не горит.
Само это "горит/не горит", делается путем посылки с определенными интервалами команд через "registerWrite".
SU-27, предложил "пусть команда будет одна. ВКЛЮЧИСЬ". Код думает (когда мы бежим по циклу) что он включил светик (и не думает про его яркость). Вообщем это ваш код из №55 (только естествено выбросить из него вашу попытку "регулируем яркость", так как она ничего не регулирует.
Вернее поставить в строку 26 delay(100) - это будет скорость передвижения по светикам.
строку 32 - нафиг. Там где сейчас delay(100) - нафиг. Ничего кроме моргания - она вообще не дает.
В результате, вы получите "огонек бежит". На полной яркости. Без миганий и проч.
Ну а дальше, применять "рецепт" от SU-27.
Выяснить где находится нога OE (у регистра, и есть ли она вообще) , что она делает (почему он вообще именно эту ногу назвал). И подать на нее ШИМ.
Где взять ШИМ и как им управлять есть затруднения?
Вообщем, если бы я делал,то я бы, откатился к коду #55. Добился бы что-бы он красиво и хорошо, без всяких миганий работал на полной яркости (без пауз после выключения светиков, пауза только на "светики горят").
А потом регулировал яркость по рецепту SU-27.
Так действительно намного проще. Тут готов признать, что "програмный вариант" (мой вариант) - намного гиморойней чем "железячный".
Что вы в коде собрались менять на analogWrite?
Ну я не знаю:) Я у вас, как у спецов, и спрашиваю чтобы узнать. Ногу OE я нашла, только не совсем понятно. Один регистр я подключу, а остальные паралельно подключать, или последовательно через какой-нибудь пин? И еще я хотела бы добиться "эффекта кометы", например, горят три светика первый из них светит ярко, второй на половину яркости, а третий на четверть от общей яркости. Но я что-то сомневаюсь, что такое можно сделать через эту ногу OE - она же только будет включать выключать все светики.
И еще вопрос не совсем по теме. Есть ли в ардуине динамические массивы, или можно как нибудь изменить размер имеющегося массива? Поискала в гугле примеры на С++ но там что-то не понятное, и компилятор ругается.
4 ноги 4-ёх микросхем сидят на земле ( параллельно ) , их надо выкопать и соединить в кучу с пином на которм есть ШИМ...
комету можно - ( ШИМ=255 , зажигаем СД_3 , ШИМ=200 , СД_2 , ШИМ=100 , СД_1 ) - ( ШИМ=255 , зажигаем СД_4 , ШИМ=200 , СД_3 , ШИМ=100 , СД_2 , гасим СД_1) - ( ШИМ=255 , зажигаем СД_5 , ШИМ=200 , СД_4 , ШИМ=100 , СД_3 , гасим СД_2 , гасим СД_1 ) - и это всё в лупе ( ничего кроме этого ) с частотой не менее 30 Гц
чем длиннее хвост кометы - тем больше мерцаний будет
> динамические массивы - нету их там ( в ардуине ) - есть в языке С++ :)-
нога /OE - 13
".... гасим СД_2 , гасим СД_1 ) ...." - пардон ! СД_1 уже погашен.... это я лишнего прописал....
в #69 - получится какая-то логарифмическая зависимость свечения :(
а вот так :
ШИМ=255 вклСД_4
задержка 200 mS
вЫклСД_4
ШИМ=191 вклСД_3
задержка 200 mS
вЫклСД_3
ШИМ=63 вклСД_2
задержка 200 mS
вЫклСД_2
ШИМ=31 вклСД_1
задержка 200 mS
вЫклСД_1
через 2 S - меняем индексы СД_N на СД_N+1
через 2 S - меняем индексы СД_N на СД_N+1
...........
опять же - чем длинне хвост - тем меньше яркость.... при Комета+Хвост=1+3 яркость 255 уже будет снижена в 4 раза :(
но и это можно обойти - снизить номиналы резисторов в цепи СД в 4 раза... вот уж не помню какой для СД максимальный импульсный ток ( могут и сгореть )
> И еще вопрос не совсем по теме. Есть ли в ардуине динамические массивы, или можно как нибудь изменить размер имеющегося массива?
а зачем это вам ? и поточнее задачку расскажите :)
опять же - чем длинне хвост - тем меньше яркость.... при Комета+Хвост=1+3 яркость 255 уже будет снижена в 4 раза :(
А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
а зачем это вам ? и поточнее задачку расскажите :)
Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось
> А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
.....вы не забыли, что всё это будет крутиться в лупе ?
> Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось
....что-то вы не так поняли :( размером массива что-то рулить проблеммно, а вот значениями из массива - все так и делают
что вы хотите регулировать энкодером ?
что вы хотите регулировать энкодером ?
Видимо размер.. удобно же.. энкодером регулируется длинна и толщина. . Мммассива. Гыы
видимо попкорн глюциногенный..... :( .....то про толщину и длину света, то - Мммммассива.... дааааааа, уж..... придётся дохтура ждать....
:)
.....вы не забыли, что всё это будет крутиться в лупе ?
А что? Если комету двигать, то все равно придется в цикле крутить.
....что-то вы не так поняли :( размером массива что-то рулить проблеммно, а вот значениями из массива - все так и делают
Да это не важно. Мне интересно знать как размер массива менять, а для чего - это уже другой вопрос.
> ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста 2, и для конца хвоста 1.
registerWrite 3 раза подряд - это не увеличение яркости в три раза
Массивы
Массивы (arrays) — именованный набор однотипных переменных, с доступом к отдельным элементам по их индексу.
Объявление массивов
Ниже приведены несколько корректных вариантов объявления массивов:
int
myInts[6];
int
myPins[] = {2, 4, 8, 3, 6};
int
mySensVals[6] = {2, 4, -8, 3, 2};
char
message[6] =
"hello"
;
Массив может быть объявлен без непосредственной инициализации элементов массива, как в случае массива myInts.
Массив myPins был объявлен без явного задания размера. Компилятор сам посчитает фактическое количество элементов и создаcт в памяти массив необходимого размера.
Размер может быть задан явно, одновременно с инициализацией элементов массива. Обратите внимания, что при создании массива типа char, необходим дополнительный элемент массива для нулевого символа. Подробнее см. строки.
http://arduino.ru/Reference/Array
Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов registerWrite - вы так и не поняли механизм формирования "яркости светодиода".
Отложите в сторону свои регистры.
Возьмте один светодиод.
И научитесь ему менять яркость. Разными способами:
1. Через analogWrite (заодно погуглите страинцы, кроме документации, что же именно делает analogWrite)
2. digitalWrite/delayMicros.
Что-бы понять "что и как влияет на яркость".
Потом прицепите 4-ре светодиода (все еще без регистров). И им научитесь меня яркость (всем сразу), пускать волну. Опять/таки двумя способами.
Потом замените в способе digitalWrite/delayMicros использование digitalWrite на Прямое управления выходами через регистры микроконтроллера Atmega (вот тут вам опять bitWrite пригодится).
Потом замените "прямое управление", на "использование сдвигового регистра" (они вообщем-то по сути - очень похожи).
Опять-таки, вначале научитесь менять яркость "всем сразу", как более простой метод.
Сделайте все-ми трямя способами: как предложил SU-27, и мои два "программных".
И уже ПОСЛЕ этого, будете думать "как отдельному светику яркость выставлять". На этоп этапе уже будет понятно, какие способы удобней для "всех сразу", а какие "для индивидуального" (imho мой способ - больше подходит для "индивидуального". через OE-пин удобней "все сразу", а вот отдельные - проблематично).
А то у вас "хотелки" нарастают быстрее чем умения. Так и не довели, до конца, ни один способ регулировки яркости, а уже полезли "усложнять". Каждому отдельно захотелось....
И похоже, уже заболели болезнью программеров "универсаализация". Уже динамические массивы нужны....
Можно конечно и динамические, берете учебник по C/C++ и начинаете штудировать разделы относящиеся к указателям, выделению/освобождению памяти. Потом структуры данных (связанные списки и т.п.) и т.д. Но сразу предупреждают: это уже не очень "для новичков". Хорошие знание C,C++ конечно обязательно подразумевает уменее работать с указателями, но ... все равно это основной источник ошибок даже для опытных. Слышали выражения "память течет", "утечка памяти", "мемори лики полезли" - вот это оно :(
Тем более, что на ebmeded разработке, "динамические массивы" - не так уж часто и нужны. Ну не знаете вы заранее сколько у вас будет сдвиговых. Ну предположим что оно может меняться "на ходу" (тем же энкодером). Но фиг с ним. Все равно можете прикинуть "максимальное количество". 1000-че же не будет. Ну сколько их может быть? 2,4 ну 8-мь.
Возмите "запас". Выделите массив для 16-ти сдвиговых регистров.
И отдельно переменную "а сколько их по факту есть".
НУ пусть пока их 4-ре штуки. Ну значит 16-4=12 байт памяти будет "расходоваться зря". Не велика потеря. Полноценная "динамичность", вам даст более большое увеличение памяти.
А потом уже можно и энкодерами занятся, с прерываниями разобратся и т.п. и т.д.
Вообщем "идите по шагам", не прыгайте через ступеньку.
Объявление массивов
Ниже приведены несколько корректных вариантов объявления массивов:
Так я знаю как объявить, вопрос в том, как изменить размер.
Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов registerWrite - вы так и не поняли механизм формирования "яркости светодиода".
Ну ведь работает же:)
А что не так? Яркость зависит от того, как часто включается и выключается светик и от пауз между включением и выключением, и чем меньше пауза включения и чем больше пауза после выключения, тем меньше яркость. А когда я вызываю повторно registerWrite, то тем самым увеличиваю паузу после включения(Вы сами говорили, что различные функции тоже занимают время), и яркость становится больше.
Хотелки являются двигателем прогресса. Если бы я не захотела менять яркость, то и не стала бы думать на эту тему. Или если бы не захотела что-то делать на МК, то вообще бы про них ничего не знала:)
Т.е. в С++ нельзя изменить размер массива, и после этого говорят, что С++ гибкий язык?:)
Не нравится с++ пишите на другом языке. Прежде чем что то хаять, научитесь пользоваться языком правильно.
что вы хотите регулировать энкодером ?
Извиняюсь, только сейчас узнала в чем разница между энкодером и потенциометром)) Ни когда бы не подумала, что они так различаются))
Сделайте все-ми трямя способами: как предложил SU-27
Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр. В итоге, когда зажигаю светики на первом регистре - все нормально, светики светят ровно и регулируется яркость, но когда зажигаю на первом и втором, то на первом светики еле светят, даже если на втором горит всего один светик. Напряжения не хватает?
А вы, вместо того чтобы бухтеть, могли бы подсказать! Форум на то и форум, чтобы делиться знаниями, а не умничать!
Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр.
Не может, а "неправильно". Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Вообщем перечитывайте сообщение #84. Разбирайтесь в таком порядке со светодиодами. "На давайте пищу анекдотам".
Вначале должно идти понимание, а уж потом "что-то к чему-то прицеплять".
P.S. Ух... молитесь что-бы Пухлявый не заметил этих экспериментов :)
А вы, вместо того чтобы бухтеть, могли бы подсказать! Форум на то и форум, чтобы делиться знаниями, а не умничать!
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Вы дали оценочное суждение, что типа "он не гибкий".
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
А судить о языке по наличию или отсуствия динамических массивов....
Например в prolog нет имеют массивов. переменных. операторов ветвления (if, switch).Циклов даже - и тех нет.
При этом он общего назначения, на нем решают всякие ИИ задачи (экспертные системы и т.п.). И по гибкости он заткнет многи c-подобные языки. Хотя - практически ничего в своем синтаксисе - не имеет.
> но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр
у цифровых микросхем входы и выходы цифровые ! подключив потенциометр к /OE вы смогли подать на эту ногу от 0 до 5 V - а она понимает только TTL-уровни, если на вход подать напряжение > уровня 0 и < уровня 1 - то входной каскад этой ноги начинает работать как бешеный операционный усилитель :)
Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Шим управляет напряжением, потенциометр тоже. А добиться хотела того, чтобы не использовать еще один пин, которых и так дефицит, и избежать программной регулировки яркости, ибо в таком случае получаются не нужные задержки.
молитесь что-бы Пухлявый не заметил этих экспериментов
Мне не жалко, пускай смотрит)))
> Шим управляет напряжением
ДА ! то включает , то выключает напряжение.... то 0 , то 5 V..... главное не в этом :)
главное - какое время сигнал имеет значение 0 , и какое время 5 V
из этого получается ещё два параметра ШИМ - скважность и частота ШИМ ( ой , скважность это и есть ШИМ )
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Как изменить размер массива - это вопрос дурака?
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
А я не спрашивала, что для этого нужно знать. Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
Ох, Вы бы еще перед ребенком гордились такими достижениями. А слабо ребенка родить? Или vmprot снять хотябы с ехе файла? То же))
Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)
Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?
Шим управляет напряжением, потенциометр тоже.
ШИМ - не управляет напряжением.
Вообще ШИМ это вид сигнала, а потенциометр - это элемент элетрической цепи.
Так что, как уже говорилось выше. Рабирайтесь что такое ШИМ, на примере одного светодиода. Книжечки какие-то почитайте, статьи, раз форумные "объяснения на пальцах" получаются слишком сложными. Раз уже столько времени не получается сдвинуться с мертвой точки.
> почему не правильно и в чем я ошиблась. Спасибо:)
в отпуске моя.... времени море.... чёбы и не разжевать ?
и перестаньте на всех наезжать :(
> Мне нужно было пару строк кода, чтобы решить одну задачу.
будет вам и 20 пар строк - только сможите ли вы задачу поставить ясно , одним постом ?
А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Как изменить размер массива - это вопрос дурака?
Судя по дальнейшем рассуждениям - да. Умный от дурака отличается не тем какие вопросы задает, а тем что делает с ответами.
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
А я не спрашивала, что для этого нужно знать.
А зря.
Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.
То есть, вы не зная как решается задача, уверенны что знаете как должен выглядит ответ? Уверенны что "пара строк" - и все заработает?
Вы, может быть, и к доктору тоже так приходите: "че ты грузишь меня своей анатомией... я хочу сестре операцию сделать, ты мне тупо покажи где резать нужно.."
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++
Ох, Вы бы еще перед ребенком гордились такими достижениями.
Не вижу ничего плохого в том что-бы гордится своими знаниями. И способностью их преобретать.
А слабо ребенка родить?
Слабо. И что?
Или vmprot снять хотябы с ехе файла? То же))
Ну если бы я не знал как это сделат (и мне нужно было), и кто-то сказал бы мне что для этого необходимо знать - пошель бы разбираться с этим (либо искал бы кого-то кто сделает за меня).
Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)
Ну давайте посмотрим, что он вам сказал: "главное - какое время сигнал имеет значение 0 , и какое время 5 V"
Теперь смотрим, что вам писали 10 дней назад:
- "Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. "
- "Яркость зависит от соотношения времени "включен/выключен",
- " изменения соотношения времени сколько диод горид/не горит."
это уже не говоря про примеры кода. в которых тоже виден принцип.
Но "разбираться с принципами" - это не наше. Мы лучше будем "на глаз солить".
Да объяснять как нам помогать правильно нужно.
Так кто вам виноват что до вас доходит с 5-того раза? И любые призывы "разобраться с основой" - пропускаются мимо ушей? "Ты не мудри, ты пальцем покажи..."
Ребенка можете родить? Нашли чем гордица. Ваша-то заслуга в этом какая? Природа так распорядилась...
Да, мужики не могут. Есть барышни, которые что-бы доказать "я сама могу" умудряются повесить карниз. Забив 4-ре шурупа. Молотком. В несущую бетонную стену. Сколько не спрашивал, даже проф.строителей - никто не берется повторить сей подвиг.
Так что, продолжайте забивать шурупы молотком. Как говорит Пухлявый: "пошел за попкорном". Нас явно ждут еще много чудестных открытий. "Просто покажите как правильно молотком шуруп забивать".
шуруп, забитый молотком, держит крепче чем гвоздь,забитый молотком ! :)
ШИМ - не управляет напряжением.
https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE...
Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — управление средним значением напряжения на нагрузке путём изменения скважности импульсов, управляющих ключом.
будет вам и 20 пар строк - только сможите ли вы задачу поставить ясно , одним постом ?
Так задача и состоит в том, чтобы изменить размер массива. Специально не хочу усложнять задачу и давать какой-то конкретный пример скетча, чтобы мне было более понятней.
Например:
> Ну давайте посмотрим, что он вам сказал: "главное - какое время сигнал имеет значение 0 , и какое время 5 V"
не ЧТО, а КАК ! лаааааасссссково..... они же рожать умеют :)
...только вот без мужика одна и родила, беспорочно....