Формирование запроса

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

Puhlyaviy пишет:
Не знаю. Как то не интересовался. Не прет меня от филипинок.

мог бы и сразу сказать...  :(

....как же ты там живёшь - без окучивания ? женитьба ? дык, ... пардон..... молчу....


Зачем окучивать абы кого?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

всяко бывает.... особенно из настойки из попкорна :)-

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

...от...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Fekla, извините... пожста... мальчишник.... :(

Fekla
Offline
Зарегистрирован: 16.12.2012

Вот, вроде получилось

//Пин подключен к 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() 
{
  long ByteSend=0;
  long ByteSend1=0;
  for(char thisLed = 0; thisLed < 16; thisLed++) 
  {

    bitWrite(ByteSend, thisLed, 1);
    bitWrite(ByteSend1, thisLed+16, 1);
    registerWrite(ByteSend,ByteSend1);

    delayMicroseconds(100);    // Регулируем яркость

    bitWrite(ByteSend, thisLed, 0);     // Выключаем светики
    bitWrite(ByteSend1, thisLed+16, 0); //
    registerWrite(ByteSend,ByteSend1);  //

    delay(100); // скорость передвежения светиков
  }
}


void registerWrite(long bitsToSend1, long bitsToSend2) {
  digitalWrite(latchPin, LOW);
  byte register3 = (bitsToSend2) >> 24;
  byte register4 = (bitsToSend2) >> 16;
  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);
}

Но светики светят слишком ярко, поэтому я добавила регулирование яркости, но движение светиков получилось не плавное - мерцающее и прерывистое. Где я ошиблась?

leshak
Offline
Зарегистрирован: 29.09.2011

>Вот, вроде получилось

Ну, у нас все тоже "про типы".

Если 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; // инвертируем состояние
    }
  }

 

leshak
Offline
Зарегистрирован: 29.09.2011

Кстати, если у вас регистры всегда работают "в паре", то есть состояни первого совпадает с третьем, а второго с четвертым, то...

Вам не нужно bitsToSend1 и bitsToSend2

Хватит, и одного bitsToSend1

Просто отправлять его два раза

Вместо

  shiftOut(dataPin, clockPin, MSBFIRST, register3);
  shiftOut(dataPin, clockPin, MSBFIRST, register4);
  shiftOut(dataPin, clockPin, MSBFIRST, register5);
  shiftOut(dataPin, clockPin, MSBFIRST, register6);

делать

  shiftOut(dataPin, clockPin, MSBFIRST, register5);
  shiftOut(dataPin, clockPin, MSBFIRST, register6);
  shiftOut(dataPin, clockPin, MSBFIRST, register5);
  shiftOut(dataPin, clockPin, MSBFIRST, register6);

 

leshak
Offline
Зарегистрирован: 29.09.2011

SU-27-16 пишет:

вопрос не в тему...

Тут трудно возразить.

SU-27-16 пишет:

где грань между программным устранением дребезга контактов и аппаратным.... рожаю схему драйвера на 4 кнопки, к555тр2 и к555лн1, и 4 резистора на 10 kOm..... если не миниатюзируем устройство - что лучше ? применить платку 20 х 48 или программно бороцца ? спасибо :)

Ответ завист от того кто вам будет отвечать. Программер скажет "конечно програмно", железячник скажет "проще железно".
Я, как програмер, ественно скажу "програмно" :) (ну и всвоем проекте, естественно выберу именно такое решение).

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

только неправлиьно добавили. Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. Много раз... до того как переходить к следующему. Если время "включено" и "выключено" совпадает, то имеем визуальную "половинную яркость" (если все происходит достаточно быстро. Если не успеваем быстро, то глаз будет видить "мерцания").

Попробовала вставить ваш код, но он работает как-то не так

//Пин подключен к 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); для регулирования скорости перемещения, но в таком случае светики мерцают.

leshak
Offline
Зарегистрирован: 29.09.2011

> то  яркость не меняется, но зато скорость движения светиков увеличивается.

Ну та "что же тут не так". Именно так. Цифра это сколько раз мы делаем "включение/выключение" светика перед тем как перейти к следующей паре. То есть это именно и есть "скорость перемещения". Чем меньше цифра - тем быстрее перемещается.

К "яркости" - эта цифра 1000 не имеет никакого отношения. Яркость зависит от соотношения времени "включен/выключен" (один и тот же светик, до перехода к следующей паре). В цикле for(j=0  мы один проход включаем, один - выключаем. Проходы - одинаковы по времени. Следовательно соотношение 1 к 1. То есть светик будет светится на "половинной яркости".

Куда вы воткнули delay()- не очень понтяно. если внутрь j-цикла, то вы просто снизили "частоту шима". Увеличили време "горения" и "не горения". Но соотношение их осталось одно и тоже. Одинаковое. Следовательно светик по прежнему будет гореть на "половинной яркости". Но, если время сильно увеличить (вместо "быстро-быстро переключать", делать это "медленно и печально"),то инерции глаза уже будет не хватать воспринимать это как "половинную яркость" (светик, на самом деле всегда светит на полную, это при больших частотах глаз нас обманывает).
 

leshak
Offline
Зарегистрирован: 29.09.2011

Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).

То вам нужно тыкать 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)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ноги регистров OE - подайте на них ШИМ с ноги МК - будет регулировка яркости

leshak
Offline
Зарегистрирован: 29.09.2011

Или другой вариант регулировки яркости. В котором не нужно выяснять "сколько же времени занимает отсылка данных" (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%
 

leshak
Offline
Зарегистрирован: 29.09.2011

SU-27-16 пишет:

ноги регистров OE - подайте на них ШИМ с ноги МК - будет регулировка яркости

Кстати - тоже вариант. Вместо того что-бы "быстро-быстро" включать выключать светики через регистры, можно "быстро-быстро" включать/выключать сами регистры :)

Как я и говорил выше - зависит от того кто задачу решает. "Програмер" или "железячник".
Я в первую очередь думаю от том как "програмно сделать".

Действительно, сделать analogWrite на какую-то ногу - проще (если есть возможность). И код существенно упроститься.
 

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

Если вы хотите регулировать "яркость" (зашитая "половинная", вас не устраивает).

То вам нужно тыкать 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?

 

leshak
Offline
Зарегистрирован: 29.09.2011

Fekla пишет:

На ногу регистра, или в коде поменять на analogWrite?

Что вы в коде собрались менять на analogWrite?

Во первых поймите, что SU-27 предложил ортогональный вариант, моему пути.
Я пошел "програмно". Путем изменения соотношения времени сколько диод горид/не горит.
Само это "горит/не горит", делается путем посылки с определенными интервалами команд через "registerWrite".
 

SU-27, предложил "пусть команда будет одна. ВКЛЮЧИСЬ". Код думает (когда мы бежим по циклу) что он включил светик (и не думает про его яркость). Вообщем это ваш код из №55 (только естествено выбросить из него вашу попытку "регулируем яркость", так как она ничего не регулирует.

Вернее поставить в строку 26  delay(100) - это будет скорость передвижения по светикам.
строку 32 - нафиг. Там где сейчас delay(100) - нафиг. Ничего кроме моргания - она вообще не дает.

В результате, вы получите "огонек бежит". На полной яркости. Без миганий и проч.

Ну а дальше, применять "рецепт" от SU-27.

Выяснить где находится нога OE  (у регистра, и есть ли она вообще) , что она делает (почему он вообще именно эту ногу назвал). И подать на нее ШИМ. 
Где взять ШИМ и как им управлять есть затруднения?
 

 

leshak
Offline
Зарегистрирован: 29.09.2011

Вообщем, если бы я делал,то я бы, откатился к коду #55. Добился бы что-бы он красиво и хорошо, без всяких миганий работал на полной яркости (без пауз после выключения светиков, пауза только на "светики горят").
А потом регулировал яркость по рецепту SU-27.
Так действительно намного проще. Тут готов признать, что "програмный вариант" (мой вариант) - намного гиморойней чем "железячный".

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

Что вы в коде собрались менять на analogWrite?

Ну я не знаю:) Я у вас, как у спецов, и спрашиваю чтобы узнать. Ногу OE я нашла, только не совсем понятно. Один регистр я подключу, а остальные паралельно подключать, или последовательно через какой-нибудь пин? И еще я хотела бы добиться "эффекта кометы", например, горят три светика первый из них светит ярко, второй на половину яркости, а третий на четверть от общей яркости. Но я что-то сомневаюсь, что такое можно сделать через эту ногу OE - она же только будет включать выключать все светики.

И еще вопрос не совсем по теме. Есть ли в ардуине динамические массивы, или можно как нибудь изменить размер имеющегося массива? Поискала в гугле примеры на С++ но там что-то не понятное, и компилятор ругается.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

4 ноги 4-ёх микросхем сидят на земле ( параллельно ) , их надо выкопать и соединить в кучу с пином на которм есть ШИМ...

комету можно - ( ШИМ=255 , зажигаем СД_3 , ШИМ=200 , СД_2 , ШИМ=100 , СД_1 ) - ( ШИМ=255 , зажигаем СД_4 , ШИМ=200 , СД_3 , ШИМ=100 , СД_2 , гасим СД_1) ( ШИМ=255 , зажигаем СД_5 , ШИМ=200 , СД_4 , ШИМ=100 , СД_3 , гасим СД_2 , гасим СД_1 ) - и это всё в лупе ( ничего кроме этого ) с частотой не менее 30 Гц

чем длиннее хвост кометы - тем больше мерцаний будет

динамические массивы - нету их там ( в ардуине ) - есть в языке С++   :)-

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

нога /OE - 13

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

"....  гасим СД_2 , гасим СД_1 ) ...."  - пардон ! СД_1 уже погашен.... это я лишнего прописал....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в #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

...........

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

опять же - чем длинне хвост - тем меньше яркость.... при Комета+Хвост=1+3 яркость 255 уже будет снижена в 4 раза   :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

но и это можно обойти - снизить номиналы резисторов в цепи СД в 4 раза... вот уж не помню какой для СД максимальный импульсный ток ( могут и сгореть )

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

И еще вопрос не совсем по теме. Есть ли в ардуине динамические массивы, или можно как нибудь изменить размер имеющегося массива?

а зачем это вам ? и поточнее задачку расскажите :)

Fekla
Offline
Зарегистрирован: 16.12.2012

SU-27-16 пишет:

опять же - чем длинне хвост - тем меньше яркость.... при Комета+Хвост=1+3 яркость 255 уже будет снижена в 4 раза   :(

А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста  2, и для конца хвоста 1.

SU-27-16 пишет:

а зачем это вам ? и поточнее задачку расскажите :)

Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

А я тут подумала, ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста  2, и для конца хвоста 1.

.....вы не забыли, что всё это будет крутиться в лупе ?

Ну как-то я нашла скетч и там какой-то параметр регулировался через размер массива, и я хотела подключить энкодер и им регулировать, но не получилось

....что-то вы не так поняли :( размером массива что-то рулить проблеммно, а вот значениями из массива - все так и делают

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

что вы хотите регулировать энкодером ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

что вы хотите регулировать энкодером ?


Видимо размер.. удобно же.. энкодером регулируется длинна и толщина. . Мммассива. Гыы

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

видимо попкорн глюциногенный..... :( .....то про толщину и длину света, то - Мммммассива.... дааааааа, уж..... придётся дохтура ждать....

:)

Fekla
Offline
Зарегистрирован: 16.12.2012

SU-27-16 пишет:

.....вы не забыли, что всё это будет крутиться в лупе ?

А что? Если комету двигать, то все равно придется в цикле крутить.

SU-27-16 пишет:

....что-то вы не так поняли :( размером массива что-то рулить проблеммно, а вот значениями из массива - все так и делают

Да это не важно. Мне интересно знать как размер массива менять, а для чего - это уже другой вопрос.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

> ведь можно снизить общую яркость на три четверти, а потом несколько раз вызывать registerWrite для определенных светиков. Например, для головы кометы вызываем registerWrite 3 раза, для начала хвоста  2, и для конца хвоста 1.

registerWrite 3 раза подряд - это не увеличение яркости в три раза

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Массивы

Массивы (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

leshak
Offline
Зарегистрирован: 29.09.2011

Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов 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 байт памяти будет "расходоваться зря". Не велика потеря. Полноценная "динамичность", вам даст более большое увеличение памяти.
 

А потом уже можно и энкодерами занятся, с прерываниями разобратся и т.п. и т.д.
Вообщем "идите по шагам", не прыгайте через ступеньку.

 

Fekla
Offline
Зарегистрирован: 16.12.2012

SU-27-16 пишет:

Объявление массивов

Ниже приведены несколько корректных вариантов объявления массивов:

Так я знаю как объявить, вопрос в том, как изменить размер.

leshak пишет:

Судя по тому, что вы размышляете над как регулировать яркость количеством вызовов registerWrite - вы так и не поняли механизм формирования "яркости светодиода".

Ну ведь работает же:)

А что не так? Яркость зависит от того, как часто включается и выключается светик и от пауз между включением и выключением, и чем меньше пауза включения и чем больше пауза после выключения, тем меньше яркость. А когда я вызываю повторно registerWrite, то тем самым увеличиваю паузу после включения(Вы сами говорили, что различные функции тоже занимают время), и яркость становится больше.

leshak пишет:
А то у вас "хотелки" нарастают быстрее чем умения.

Хотелки являются двигателем прогресса. Если бы я не захотела менять яркость, то и не стала бы думать на эту тему. Или если бы не захотела что-то делать на МК, то вообще бы про них ничего не знала:)

leshak пишет:
Можно конечно и динамические, берете учебник по C/C++ и начинаете штудировать разделы относящиеся к указателям, выделению/освобождению памяти. Потом структуры данных (связанные списки и т.п.) и т.д.

Т.е. в С++ нельзя изменить размер массива, и после этого говорят, что С++ гибкий язык?:)

 

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не нравится с++ пишите на другом языке. Прежде чем что то хаять, научитесь пользоваться языком правильно.

Fekla
Offline
Зарегистрирован: 16.12.2012

SU-27-16 пишет:

что вы хотите регулировать энкодером ?

Извиняюсь, только сейчас узнала в чем разница между энкодером и потенциометром)) Ни когда бы не подумала, что они так различаются))

leshak пишет:

Сделайте все-ми трямя способами: как предложил SU-27

Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр. В итоге, когда зажигаю светики на первом регистре - все нормально, светики светят ровно и регулируется яркость, но когда зажигаю на первом и втором, то на первом светики еле светят, даже если на втором горит всего один светик. Напряжения не хватает?

Fekla
Offline
Зарегистрирован: 16.12.2012

kisoft пишет:
Не нравится с++ пишите на другом языке. Прежде чем что то хаять, научитесь пользоваться языком правильно.

А вы, вместо того чтобы бухтеть,  могли бы подсказать! Форум на то и форум, чтобы делиться знаниями, а не умничать!

leshak
Offline
Зарегистрирован: 29.09.2011

Fekla пишет:

Может не правиьно сделала, но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр. 

Не может, а "неправильно". Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"? 
Вообщем перечитывайте сообщение #84. Разбирайтесь в таком порядке со светодиодами. "На давайте пищу анекдотам".

Вначале должно идти понимание, а уж потом "что-то к чему-то прицеплять".

P.S. Ух... молитесь что-бы Пухлявый не заметил этих экспериментов :)

 

leshak
Offline
Зарегистрирован: 29.09.2011

Fekla пишет:

kisoft пишет:
Не нравится с++ пишите на другом языке. Прежде чем что то хаять, научитесь пользоваться языком правильно.

А вы, вместо того чтобы бухтеть,  могли бы подсказать! Форум на то и форум, чтобы делиться знаниями, а не умничать!

А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?
Вы дали оценочное суждение, что типа "он не гибкий".
Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.
Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++

А судить о языке по наличию или отсуствия динамических массивов....
Например в prolog нет имеют массивов. переменных. операторов ветвления (if, switch).Циклов даже - и тех нет.

При этом он общего назначения, на нем решают всякие ИИ задачи (экспертные системы и т.п.). И по гибкости он заткнет многи c-подобные языки. Хотя - практически ничего в своем синтаксисе - не имеет. 
 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

но попробовала к ОЕ ногам двух регистров(для чистоты эксперемента взяла два) подключить потенциометр

у цифровых микросхем входы и выходы цифровые ! подключив потенциометр к /OE вы смогли подать на эту ногу от 0 до 5 V - а она понимает только TTL-уровни, если на вход подать напряжение > уровня 0 и < уровня 1 - то входной каскад этой ноги начинает работать как бешеный операционный усилитель :)

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?

Шим управляет напряжением, потенциометр тоже. А добиться хотела того, чтобы не использовать еще один пин, которых и так дефицит, и избежать программной регулировки яркости, ибо в таком случае получаются не нужные задержки.

leshak пишет:

молитесь что-бы Пухлявый не заметил этих экспериментов

Мне не жалко, пускай смотрит)))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Шим управляет напряжением

ДА ! то включает , то выключает напряжение.... то 0 , то 5 V..... главное не в этом :)

главное - какое время сигнал имеет значение 0 , и какое время 5 V

из этого получается ещё два параметра ШИМ - скважность и частота ШИМ ( ой , скважность это и есть ШИМ )

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?

Как изменить размер массива - это вопрос дурака?

leshak пишет:

Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.

А я не спрашивала, что для этого нужно знать.  Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.

leshak пишет:

Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++

Ох, Вы бы еще перед ребенком гордились такими достижениями. А слабо ребенка родить? Или vmprot снять хотябы с ехе файла? То же))

Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)
 

leshak
Offline
Зарегистрирован: 29.09.2011

Fekla пишет:

leshak пишет:

Честно говоря вообще не понятно, что вы хотели добится подключая потенциометр к сдвиговому. Типа "раз круглое, то должно яркость регулировать"?

Шим управляет напряжением, потенциометр тоже.

ШИМ - не управляет напряжением.
Вообще ШИМ это вид сигнала, а потенциометр - это элемент элетрической цепи.

Так что, как уже говорилось выше. Рабирайтесь что такое ШИМ, на примере одного светодиода. Книжечки какие-то почитайте, статьи, раз форумные "объяснения на пальцах" получаются слишком сложными. Раз уже столько времени не получается сдвинуться с мертвой точки.
 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

почему не правильно и в чем я ошиблась. Спасибо:)

в отпуске моя.... времени море.... чёбы и не разжевать ?

и перестаньте на всех наезжать :(

Мне нужно было пару строк кода, чтобы решить одну задачу.

будет вам и 20 пар строк - только сможите ли вы задачу поставить ясно , одним постом ?

leshak
Offline
Зарегистрирован: 29.09.2011

Fekla пишет:

leshak пишет:

А вы слышали поговорку "Один дурак столько вопросов задать может, что и 10 умных не ответят"?

Как изменить размер массива - это вопрос дурака?

Судя по дальнейшем рассуждениям - да.  Умный от дурака отличается не тем какие вопросы задает, а тем что делает с ответами.

leshak пишет:

Причем, в ответ на фразу "можно конечно и динамически" (дальше шло перечисления, что для этого знать в языке нужно), вы почему-то сделали вывод " С++ нельзя изменить размер массива"
На что вам и указал kisoft. Что проблема не в языке, а в вас.

Fekla пишет:

А я не спрашивала, что для этого нужно знать. 

А зря.

Fekla пишет:

Мне нужно было пару строк кода, чтобы решить одну задачу. А Вы тут демогогию разводите и понтуетесь своими знаниями. Если не знаете или не хотите отвечать, то не надо ничего писать! Болтавни много, а по сути ничего. Если бы он дал бы пример, а потом сделал замечание, то тогда вопросов не было бы. А так очередной пустозвон.

То есть, вы не зная как решается задача, уверенны что знаете как должен выглядит ответ? Уверенны что "пара строк" - и все заработает? 
Вы, может быть, и к доктору тоже так приходите: "че ты грузишь меня своей анатомией... я хочу сестре операцию сделать, ты мне тупо покажи где резать нужно.."
 

Fekla пишет:

leshak пишет:

Кстати, уверен, что он-то, при необходимости сумеет и динамически выделить память. и освободить. и связанный списочек построить. В отличие от вас. На C++

Ох, Вы бы еще перед ребенком гордились такими достижениями.

Не вижу ничего плохого в том что-бы гордится своими знаниями. И способностью их преобретать.

Fekla пишет:

А слабо ребенка родить?

Слабо. И что?

Fekla пишет:

Или vmprot снять хотябы с ехе файла? То же))

Ну если бы я не знал как это сделат (и мне нужно было), и кто-то сказал бы мне что для этого необходимо знать - пошель бы разбираться с этим (либо искал бы кого-то кто сделает за меня).

Fekla пишет:

Вот SU-27-16 молодец, без понтов и димагогии объяснил почему не правильно и в чем я ошиблась. Спасибо:)

Ну давайте посмотрим, что он вам сказал: "главное - какое время сигнал имеет значение 0 , и какое время 5 V"
Теперь смотрим, что вам писали 10 дней назад:
- "Как яркость светика регулируется? Быстро (как можно быстрее) его включаем/выключаем. "
- "Яркость зависит от соотношения времени "включен/выключен",
- " изменения соотношения времени сколько диод горид/не горит."
 

это уже не говоря про примеры кода. в которых тоже виден принцип.
Но "разбираться с принципами" - это не наше. Мы лучше будем "на глаз солить".
Да объяснять как нам помогать правильно нужно. 

Так кто вам виноват что до вас доходит с 5-того раза? И любые призывы "разобраться с основой" - пропускаются мимо ушей? "Ты не мудри, ты пальцем покажи..."

Ребенка можете родить?  Нашли чем гордица. Ваша-то заслуга в этом какая? Природа так распорядилась...

Да, мужики не могут. Есть барышни, которые что-бы доказать "я сама могу" умудряются повесить карниз. Забив 4-ре шурупа. Молотком. В несущую бетонную стену. Сколько не спрашивал, даже проф.строителей - никто не берется повторить сей подвиг.

Так что, продолжайте забивать шурупы молотком. Как говорит Пухлявый: "пошел за попкорном". Нас явно ждут еще много чудестных открытий. "Просто покажите как правильно молотком шуруп забивать".

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

шуруп, забитый молотком, держит крепче чем гвоздь,забитый молотком ! :)

Fekla
Offline
Зарегистрирован: 16.12.2012

leshak пишет:

ШИМ - не управляет напряжением.

https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE...

Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — управление средним значением напряжения на нагрузке путём изменения скважности импульсов, управляющих ключом.

SU-27-16 пишет:

будет вам и 20 пар строк - только сможите ли вы задачу поставить ясно , одним постом ?

Так задача и состоит в том, чтобы изменить размер массива. Специально не хочу усложнять задачу и давать какой-то конкретный пример скетча, чтобы мне было более понятней.

Например:

int x[10];

void loop() {

for (int i = 0; i <10; i++) {

x[i] = 1;

}

}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Ну давайте посмотрим, что он вам сказал: "главное - какое время сигнал имеет значение 0 , и какое время 5 V"

не ЧТО, а КАК ! лаааааасссссково..... они же рожать умеют :) 

...только вот без мужика одна и родила, беспорочно....