Автоматическая подсветка лестницы и MM5450

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

merzavec пишет:

ярко горят, как и все, хочется чтобы ночью горели в пол накала, а то ночью по глазам сильно светят

Поставьте балластный резистор побольше.

birdtlt
Offline
Зарегистрирован: 19.01.2015

andriano пишет:

merzavec пишет:

ярко горят, как и все, хочется чтобы ночью горели в пол накала, а то ночью по глазам сильно светят

Поставьте балластный резистор побольше.

Начинаем городить ерунду. Не надо никаких балластных резисторов!

merzavec, в 395 посте вы сами пишите что не подключали 9 выход ардуины. А именно этот выход у вас в скетче управляет яркостью. Подключите его на вход bright control М5450 и все будет работать.

birdtlt
Offline
Зарегистрирован: 19.01.2015

birdtlt пишет:

merzavec, в 395 посте вы сами пишите что не подключали 9 выход ардуины. А именно этот выход у вас в скетче управляет яркостью. Подключите его на вход bright control М5450 и все будет работать.

Т.е. в вашем случае это будет выглядеть так:

1) Убираем резистор 1кОм (он подключен от +12В к ножке 19 М5450)

2) Этот вывод (ножка 19) М5450 подключаем к выводу 12 ардуины (это вывод D09).

собственно все... проверьте.

merzavec
Offline
Зарегистрирован: 04.09.2015

/*
  надо добавить контакт, это умная лестница, надо чтобы в дежурном режиме на нем появлялось +5 в, а когда срабатывают датчики +5 пропадало.
*/

//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7
//Устанавливаем контакт фоторезистора
#define  FOTO A0
//Устанавливаем контакты для первого датчика
#define  T1  4
#define  E1  5
//Устанавливаем контакты для второго датчика
#define  T2  2
#define  E2  3
//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9
#define   PASSIVE   8
const byte brightset = 255;

//Задаем количество светодиодов
#define NUM_LEDS 14
const uint32_t mask = 0b111111111111;

void setup() 
{
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  digitalWrite(CLOCK, HIGH);
  digitalWrite(FOTO, HIGH);
  pinMode(BR, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(E1, INPUT);
  pinMode(E2, INPUT);
  digitalWrite(E1, HIGH);
  digitalWrite(E2, HIGH);
  FirstLast();
  pinMode(PASSIVE, OUTPUT);
  digitalWrite(PASSIVE, HIGH);  
}

void loop() 
{
  int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика
  if(D1 > 0 && D1 < 100)          // если расстояние меньше 100см, то
  {
    digitalWrite(PASSIVE, LOW);
    analogWrite (BR,  brightset);
    for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону
    {
      MM5450(mask<<i);
      delay(500);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
    {
      MM5450(mask>>i);
      delay(500);                 // задержка затухания
    }
    FirstLast();
  }

  int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика
  if(D2 > 0 && D2 < 100)          // если расстояние меньше 100см, то
  {
    digitalWrite(PASSIVE, LOW);
    analogWrite (BR,  brightset);
    for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону
    {
      MM5450(mask>>i);
      delay(500);                 // задержка зажигания
    }
    delay(10000);                  // ждем 3 секунды
    for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды 
    {
      MM5450(mask<<i);
      delay(500);                 // задержка затухания
    }
    FirstLast();
  }
  delay(20);
  digitalWrite(PASSIVE, HIGH);
}


void FirstLast()
{
  analogWrite (BR,  25);
  MM5450(0b000000000000);
}


int Ultrasonic(byte Trig_pin, byte Echo_pin)
{
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);   
  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;
}

void MM5450(uint32_t data)
{  
  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  for(byte i = 0; i < NUM_LEDS; i++)
  {
    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
  digitalWrite(DATA, 0);
  for(byte i = 0; i < 35-NUM_LEDS; i++)
  {    
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }
}

Сделал так, регулировка первой и последней плавная, переменным резистором, в дежурном режиме в программе отключены первая и последняя ступень, питание поступает через выход девять и BC547.

birdtlt
Offline
Зарегистрирован: 19.01.2015

merzavec пишет:

//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9
#define   PASSIVE   8

<<<поскипано>>>

Сделал так, регулировка первой и последней плавная, переменным резистором, в дежурном режиме в программе отключены первая и последняя ступень, питание поступает через выход девять и BC547.

Чет хрень какая-то у вас. Зачем задействовать D8 (без ШИМ) для упраления первой и последней ступенькой в дежурном режиме? Зачем дополнительно вводить транзистор, четыре диода, переменный резистор и прочей мелочевки? Зачем вам #define BR 9 если вы ввели #define PASSIVE 8 ? Зачем это все? Вам нужно только убрать резистор подтягивающий 19 ножку М5450 к +питания и соединить эту ножку с ШИМ-выводом ардуины D9. И все! Все остальное в скетче уже есть, уровень яркости регилируете параметром BR...

birdtlt
Offline
Зарегистрирован: 19.01.2015

birdtlt пишет:

[

Чет хрень какая-то у вас. Зачем задействовать D8 (без ШИМ) для упраления первой и последней ступенькой в дежурном режиме? Зачем дополнительно вводить транзистор, четыре диода, переменный резистор и прочей мелочевки? Зачем вам #define BR 9 если вы ввели #define PASSIVE 8 ? Зачем это все? Вам нужно только убрать резистор подтягивающий 19 ножку М5450 к +питания и соединить эту ножку с ШИМ-выводом ардуины D9. И все! Все остальное в скетче уже есть, уровень яркости регилируете параметром BR...

Дело конечно ваше, но мое мнение такое - чем меньше деталей, тем надежней... Решение должно быть красивым))

Мой совет: убирайте из схемы R15, R16, R17, R18, T2, D1, D2, D3, D4. Восстановите связи ключей управления первой и последней ступеньки с выходами М5450. Скетч можно и не менять - должно работать.

merzavec
Offline
Зарегистрирован: 04.09.2015

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

birdtlt
Offline
Зарегистрирован: 19.01.2015

merzavec пишет:

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

хозяин - барин))

вам нужно было б только еще void FirstLast() поменять, в вашем скетче в дежурном режиме крайние светодиоды погашены:

void FirstLast()

{

analogWrite (BR, 25);

MM5450 (0b00000000000000);

}

а нужно чтоб они светились - MM5450 (0b10000000000001)

ну а насколько светятся они определяет analogWrite (BR, xx)

 

 

merzavec
Offline
Зарегистрирован: 04.09.2015

Вот через диоды они и питание идет когда в программе MM5450 (0b00000000000000);

merzavec
Offline
Зарегистрирован: 04.09.2015

Да вы были правы analogWrite (BR, xx), меняеш значение и яркость меняется, спасибо Вам большое, а то колхозить начал схему.

merzavec
Offline
Зарегистрирован: 04.09.2015

только вот фото резистор вообще не реагирует, схема одинаково работает что с ни, что без него, что в темноте он, что свечу на него

stasstroy
Offline
Зарегистрирован: 09.01.2016

В вашем скетче нет условия для фоторезистора.

stasstroy
Offline
Зарегистрирован: 09.01.2016
Вот код в котором фоторезистор работает.


//Устанавливаем контакты для драйвера

#define  DATA  6

#define  CLOCK 7

//Устанавливаем контакт фоторезистора

#define  FOTO A0

//Устанавливаем контакты для первого датчика

#define  T1  12

#define  E1  13

//Устанавливаем контакты для второго датчика

#define  T2  10

#define  E2  11

//Устанавливаем контакт управления яркостью светодиодов

#define  BR  9

const byte brightset = 255;

//Задаем количество светодиодов

#define NUM_LEDS 17

const uint32_t mask = 0b11111111111111111;

void setup()

{

  pinMode(DATA, OUTPUT);

  pinMode(CLOCK, OUTPUT);

  digitalWrite(CLOCK, HIGH);

  digitalWrite(FOTO, HIGH);

  pinMode(BR, OUTPUT);

  pinMode(T1, OUTPUT);

  pinMode(T2, OUTPUT);

  pinMode(E1, INPUT);

  pinMode(E2, INPUT);

  digitalWrite(E1, HIGH);

  digitalWrite(E2, HIGH);

  FirstLast();

}

void loop()

{

  static bool state;

  if(analogRead(FOTO) > 1000) state = 1; // порог освещенности включения

  else analogWrite(9, LOW);   // выключаем ночную подсветку

  if(analogRead(FOTO) < 990) state = 0; // порог освещенности выключения

  else analogWrite(9, HIGH);   // включаем ночную подсветку

  if(state)

  {

    int D1 = Ultrasonic(T1, E1);    // измеряем расстояние первого датчика

    if(D1 > 0 && D1 < 70)          // если расстояние меньше 70см, то

    {

      analogWrite (BR,  brightset);

      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в одну сторону

      {

        MM5450(mask<<i);

        delay(300);                 // задержка зажигания

      }

      delay(15000);                  // ждем 15 секунд

      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды

      {

        MM5450(mask>>i);

        delay(300);                 // задержка затухания

      }

      FirstLast();

    }

    int D2 = Ultrasonic(T2, E2);    // измеряем расстояние второго датчика

    if(D2 > 0 && D2 < 70)          // если расстояние меньше 70см, то

    {

      analogWrite (BR,  brightset);

      for(char i = NUM_LEDS-1; i >= 0; i--) // зажигаем светодиоды в другую сторону

      {

        MM5450(mask>>i);

        delay(300);                 // задержка зажигания

      }

      delay(15000);                  // ждем 15 секунд

      for(char i = 0; i <= NUM_LEDS; i++)  // тушим светодиоды

      {

        MM5450(mask<<i);

        delay(300);                 // задержка затухания

      }

      FirstLast();

    }

    delay(20);

  }

}

void FirstLast()

{

  analogWrite (BR,  20);

  MM5450(0b10000000000000001);

}

int Ultrasonic(byte Trig_pin, byte Echo_pin)

{

  digitalWrite(Trig_pin, HIGH);

  delayMicroseconds(10);

  digitalWrite(Trig_pin, LOW);  

  return pulseIn(Echo_pin, HIGH, 20000)/29.0/2;

}

void MM5450(uint32_t data)

{ 

  digitalWrite(DATA, 1);

  digitalWrite(CLOCK, LOW);

  digitalWrite(CLOCK, HIGH);

  for(byte i = 0; i < NUM_LEDS; i++)

  {

    if(data & (1UL<<i)) digitalWrite(DATA, HIGH);

    else digitalWrite(DATA, LOW);

    digitalWrite(CLOCK, LOW);

    digitalWrite(CLOCK, HIGH);

  }

  digitalWrite(DATA, 0);

  for(byte i = 0; i < 35-NUM_LEDS; i++)

  {   

    digitalWrite(CLOCK, LOW);

    digitalWrite(CLOCK, HIGH);

  }

}

 

merzavec
Offline
Зарегистрирован: 04.09.2015

Ясно, спасибо за консультацию

birdtlt
Offline
Зарегистрирован: 19.01.2015

только с фоторезистором "поиграйтесь", в начале этого топика есть информация об этом. "Поиграться" - это выяснить какие конкретно диапазоны значений будут соответствовать именно вашему фоторезистору для режима "день" и режима "ночь"... Я с год назад экспериментировал с каким-то фоторезистром, так у меня значения отличались буквально на 7-9 единиц...

stasstroy
Offline
Зарегистрирован: 09.01.2016

Так же подтягивающий резистор можно поставить подстроечный на 10-15 ком.

Brutal
Offline
Зарегистрирован: 14.03.2013

stasstroy пишет:

Вот код в котором фоторезистор работает.

Спасибо ! Как раз руки дошли сделать ночную подсветку первой и последней ступени. А можно узнать этот скетч меньше нагружает драйвер MM5450 ? (Как писал - maksim в 182 сообщении: - Что бы постоянно не "дрочить" MM5450 лучше сделать так:) (http://arduino.ru/comment/reply/2867/100150?quote=1#comment-form) Ато я, к сожалению не силен в скетчах :(. Заранее пасибки !

birdtlt
Offline
Зарегистрирован: 19.01.2015

Brutal пишет:

stasstroy пишет:

Вот код в котором фоторезистор работает.

Спасибо ! Как раз руки дошли сделать ночную подсветку первой и последней ступени. А можно узнать этот скетч меньше нагружает драйвер MM5450 ? (Как писал - maksim в 182 сообщении: - Что бы постоянно не "дрочить" MM5450 лучше сделать так:) (http://arduino.ru/comment/reply/2867/100150?quote=1#comment-form) Ато я, к сожалению не силен в скетчах :(. Заранее пасибки !

я бы по этому поводу не парился, параметр BR как раз и управляет яркостью (по ШИМ) через М5450... Как только задействован параметр BR, так и начинаем "дрочить" М5450... но здесь надо понимать, что это нормальный (штатный) режим работы для данной микросхемы и переживать о ее здоровье не стОит)))

merzavec
Offline
Зарегистрирован: 04.09.2015

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

merzavec
Offline
Зарегистрирован: 04.09.2015
const uint32_t mask[] = {
  0b00000000000000000000,
  0b10000000000000000001,
  0b11000000000000000011,
  0b11100000000000000111,
  0b11110000000000001111,
  0b11111000000000011111,
  0b11111100000000111111,
  0b11111110000001111111,
  0b11111111000011111111,
  0b11111111100111111111,
  0b11111111111111111111,
};

если типа такого прокатит?

maestro_x
Offline
Зарегистрирован: 31.07.2016

Всем привет! подскажите как переписать скетч под PIR датчики ,подсветку сделал на улице по заборе ,тестирую на ультрасониках,очень красиво получилось . в програмировании я ноль,пытаюсь хоть чему-то научиться,могу только что то подправить.

DenLiss
Offline
Зарегистрирован: 26.04.2015

Доброго времени суток.

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

1. Если один человек пошёл с низу, а через несколько секунд второй пошёл сверху (ступеньки загораются на встречу друг другу)?

2. Если с низу пошёл один человек, а через пару секунд за ним пошёл второй (время затухания ступеней увеличивается)?

Кто-то в середине темы уже спрашивал, но ответа я не нашёл.

Если у кого-то это получилось или знает как это сделать, то пожалуйста подскажите.

Лестница реализована на ММ5450. Код залит ил 413 поста.

За ранее спасибо.

OffLine
Offline
Зарегистрирован: 19.08.2016
birdtlt пишет:
 
 
Т.е. в вашем случае это будет выглядеть так:
 
1) Убираем резистор 1кОм (он подключен от +12В к ножке 19 М5450)
 
2) Этот вывод (ножка 19) М5450 подключаем к выводу 12 ардуины (это вывод D09).
 
собственно все... проверьте.
 
[/quote]
 
birdtlt пишет:
 
 Вам нужно только убрать резистор подтягивающий 19 ножку М5450 к +питания и соединить эту ножку с ШИМ-выводом ардуины D9. И все! Все остальное в скетче уже есть, уровень яркости регилируете параметром BR...
 
 
подскажите пожалуйста. я взял схему которую выкладывал тов. linker1185 , (пост 329),  как я понял у него схема именно такая, но там  от 19-й ноги м5450 к 12 ноге ардуины идет дорожна, но через резистор 1К . Резистор убрать или оставить ?
и на сколько я понял его скеч вполне пригодный ?
спасибо за ответы!
birdtlt
Offline
Зарегистрирован: 19.01.2015

OffLine пишет:

подскажите пожалуйста. я взял схему которую выкладывал тов. linker1185 , (пост 329),  как я понял у него схема именно такая, но там  от 19-й ноги м5450 к 12 ноге ардуины идет дорожна, но через резистор 1К . Резистор убрать или оставить ?
и на сколько я понял его скеч вполне пригодный ?
спасибо за ответы!

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

PS. linker1185, кстати, о том, что резистор к 19 ноге М5450 не нужен говорит в посте 328.

OffLine
Offline
Зарегистрирован: 19.08.2016

birdtlt пишет:

 

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

PS. linker1185, кстати, о том, что резистор к 19 ноге М5450 не нужен говорит в посте 328.

[/quote]

Спасибо, теперь ясно! А то я уже сделал, но еще не включал, вот и думал не придется ли переделывать. в скетчах я мало понимаю. Но как я понял тот что он предложил с дежурным светом первой и последней ступени?

OffLine
Offline
Зарегистрирован: 19.08.2016

ув. коллеги! подскажите!

собрал я схему, подключил, но при первом пуске сгорел один транзистр.

на ардуине один диод горит, другой горит но при срабатывании датчика кратковременно гаснет(и реагирует только на один датчик, менял местами не меняется). ленты не загораются. с лед драйвера на транзисторы идет 12в постоянно! это нормально ? если датчик вплотную закрыть рукой лента горит(пока что одна ,но одинаково на всех контактах). 

вместо фоторезистора поставил обычный переменный резистор на 10к , от изменения его параметра второй светодиод(тот что реагирует на датчик) либо горит либо нет.

что я делаю не так ? где могут быть ошибки и т.д. ?
может скечь коряво залился ?
И какой кусок скеча убрать чтобы отключить фото резистор?

OffLine
Offline
Зарегистрирован: 19.08.2016

вроде немного разобрался!

транзистр горел , это моя не внимательность, "сопля" припоя была

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

1 не понятно зачем в плате продублирована на втором слое "земля" от первой ноги 5450 к земле конденсатора и от ардуины к земле датчика

2 на плате нет земли от 23(data ensble) ноги 5450 , хотя на схеме она заземлена 

3 зачем нужен подстроечный резистр в схеме? для регулировки "уровня освещенности" ?

 

со 2-м вопросом разобрался, земля там нужна !) остались 1 и 3

OffLine
Offline
Зарегистрирован: 19.08.2016

со всем разобрался ! как говорится стоило немного подумать)

немного исправил схему от linker1185 ,

убрал резистор и провел напрямую дорожку к 19-й ноге , от ардуины

избавился от перемычек и верхнего слоя,

дорожки пошире сделал 1,5мм

отверстия 0.5 , так проще сверлить после травления(на мой взгляд) 

в общем на мой взгляд так будет лучше! Большое спасибо linker1185 за разводку платы(ну и скечь в том числе), и остальным за помощь !

https://yadi.sk/d/HVNsIbX_uUiaB

OffLine
Offline
Зарегистрирован: 19.08.2016

Всем добрый день! Сделал лестницу, все хорошо, но с датчики небольшие проблемы, подскажите как менять расстояние срабатывания, какое значение для расстояния 60см например?

stasstroy
Offline
Зарегистрирован: 09.01.2016

int D1 = Ultrasonic(T1, E1); // измеряем расстояние первого датчика
087

088
if(D1 > 0 && D1 < 70) // если расстояние меньше 70см, то
089

Число 70 меняем на 60 или на любое требуемое расстояние. На втором датчике то же самое.

OffLine
Offline
Зарегистрирован: 19.08.2016

Спасибо!!! Что то я сразу не сообразил

vanchila
Offline
Зарегистрирован: 13.12.2016

Добрый день народ! давно читаю тему ступенек, недавно зарегистрировался здесь, всем большое спасибо, что поддерживаете данную ветку, и хочу тоже внести небольшой вклад в развитие:

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

Но тут я вспомнил о том, что есть такая функция как история сайта, и к моему счастью там находилась данная схема на обвязке ULN2803 и 74HC04, так что кому надо - выкладываю.

vanchila
Offline
Зарегистрирован: 13.12.2016

vanchila
Offline
Зарегистрирован: 13.12.2016

stasstroy
Offline
Зарегистрирован: 09.01.2016

Лукьянов уже давно отказался от этой схемы и реализовал на tlc5940 и irf7314.

stasstroy
Offline
Зарегистрирован: 09.01.2016

Лукьянов уже давно отказался от этой схемы и реализовал на tlc5940 и irf7314.

Ahtung533
Offline
Зарегистрирован: 21.01.2017

Myero пишет:

Здравствуйте.. попытался сделать ШИМ на 5451... впринципе выходит вполне красиво... 

Хороший код у вас, только как убрать из него среднюю ступеньку, там все функции и циклы на неё завязаны??

Ahtung533
Offline
Зарегистрирован: 21.01.2017

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



//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7

//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9
const byte brightset = 250;// яркость включенной лестницы
const byte brightsetFirstLast = 1; // яркость первой и последнй ступеньки
//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t masky []= {
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000100000000000001,
0b1000000000100000000000100000001,
0b1000000000000000100000000000001,
0b1000000100000001000000010000001,
0b1000000100000001000000010000001,
0b1000010000010000001000001000001,
0b1000010000010000001000001000001,
0b1000100001000010000100001000001,
0b1000100001000010000100001000001,
0b1010101010101010101010101010101,
0b1101101101101101101101101101101,
0b1111011111011111101111110111111,
0b1111111111111111111111111111111,
};
unsigned long FirstLastBitDec; // количество ступенек в двоичном коде типо 0b100000000000000000000....
uint32_t piss;
uint32_t data;

void setup()
{
  Serial.begin(9600);
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  DetectBitNumLeds();
}

void loop()  // Основной цикл.
{
   delay(10);
   TurnOnBotTop ();
   delay(10);   
   TurnOnTopBot ();
}

void TurnOnBotTop ()                                                                  //Зажигаем лестницу снизу вверх
 {
      for (char i = NUM_LEDS ; i > 0; i--)                   // зажигаем светодиоды снизу доверху
      {
        PWM_MM5450(FirstLastBitDec*2-1  >> i);
        //delay(300);                                                                   // задержка зажигания
      }
     
       for (char i = 1; i < NUM_LEDS; i++)                                       // тушим светодиоды снизу доверху
      {
        PWMOFF_MM5450(FirstLastBitDec*2-1  << i);
        //delay(300);                 // задержка затухания
      }
     }


void TurnOnTopBot ()                                                           // зажигаем лестницу сверху вниз
    {
      for (char i = NUM_LEDS; i > 0; i--)                       // зажигаем светодиоды сверху донизу
      {
       PWM_MM5450(FirstLastBitDec*2-1 << i);
       // delay(300);                 // задержка зажигания
      }
      for (char i = 1; i <NUM_LEDS; i++)                       // тушим светодиоды сверху донизу  
      {
        PWMOFF_MM5450(FirstLastBitDec*2-1 >> i);
      //  delay(300);                 // задержка затухания
      }
    }
       
void DetectBitNumLeds()//определяем число ступенек в BIN формате первой, последней и той что по середине исходя из количества ступенек
{
  FirstLastBitDec=1;
  for (int i=1;i<NUM_LEDS;i++)
    {
      FirstLastBitDec=FirstLastBitDec*2;
      Serial.println(FirstLastBitDec);
    }
  }
 
void PWM_MM5450(uint32_t data) // шим включения ступеньки
{
  
for (int j=0;j<=19;j++)
{
for (int i=0;i<=32;i++)
{
  if (masky[j] & (1UL << i))
  { 
MM5450(data);
}
else 
{MM5450(piss);
}
}
}piss=data;
}

void PWMOFF_MM5450(uint32_t data) // шим выключения ступеньки
{
  
for (int j=19;j>=0;j--)
{
for (int i=0;i<=32;i++)
{
  if (masky[j] & (1UL << i))
  { 
MM5450(piss);
}
else 
{MM5450(data);
}
}
}piss=data;
}

void MM5450(uint32_t jopa) // програмка зажигания ступеньки
{byte i;

  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  
  for (i = 0; i < NUM_LEDS; i++)
  {
    if (jopa & (1UL << i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
   }
  digitalWrite(DATA, 0);
  for (byte j = 0; j < 35 - NUM_LEDS; j++)
  {
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }  
}

 

Ahtung533
Offline
Зарегистрирован: 21.01.2017

Вот кому надо код с плавным розжигом на m5450 на основе кода Myero с вырезаными третьим датчиком, средней ступенью и бегущей тенью, разберётесь как  настроить фоторезистор (я использую китайский на 10кОм в тёмном состоянии и порядка 3-х в засвеченом), сериал порт необходимо тоже закомментить в коде/

//Устанавливаем контакты для драйвера
#define  DATA  6
#define  CLOCK 7

//Устанавливаем контакт управления яркостью светодиодов
#define  BR  9
const byte brightset = 250;// яркость включенной лестницы
const byte brightsetFirstLast = 1; // яркость первой и последнй ступеньки
//Задаем количество светодиодов
#define NUM_LEDS 17
const uint32_t masky []= {
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b0000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000000000000000001,
0b1000000000000000100000000000001,
0b1000000000100000000000100000001,
0b1000000000000000100000000000001,
0b1000000100000001000000010000001,
0b1000000100000001000000010000001,
0b1000010000010000001000001000001,
0b1000010000010000001000001000001,
0b1000100001000010000100001000001,
0b1000100001000010000100001000001,
0b1010101010101010101010101010101,
0b1101101101101101101101101101101,
0b1111011111011111101111110111111,
0b1111111111111111111111111111111,
};
unsigned long FirstLastBitDec; // количество ступенек в двоичном коде типо 0b100000000000000000000....
uint32_t piss;
uint32_t data;

void setup()
{
  Serial.begin(9600);
  pinMode(DATA, OUTPUT);
  pinMode(CLOCK, OUTPUT);
  DetectBitNumLeds();
}

void loop()  // Основной цикл.
{
   delay(10);
   TurnOnBotTop ();
   delay(10);   
   TurnOnTopBot ();
}

void TurnOnBotTop ()                                                                  //Зажигаем лестницу снизу вверх
 {
      for (char i = NUM_LEDS ; i > 0; i--)                   // зажигаем светодиоды снизу доверху
      {
        PWM_MM5450(FirstLastBitDec*2-1  >> i);
        //delay(300);                                                                   // задержка зажигания
      }
     
       for (char i = 1; i < NUM_LEDS; i++)                                       // тушим светодиоды снизу доверху
      {
        PWMOFF_MM5450(FirstLastBitDec*2-1  << i);
        //delay(300);                 // задержка затухания
      }
     }


void TurnOnTopBot ()                                                           // зажигаем лестницу сверху вниз
    {
      for (char i = NUM_LEDS; i > 0; i--)                       // зажигаем светодиоды сверху донизу
      {
       PWM_MM5450(FirstLastBitDec*2-1 << i);
       // delay(300);                 // задержка зажигания
      }
      for (char i = 1; i <NUM_LEDS; i++)                       // тушим светодиоды сверху донизу  
      {
        PWMOFF_MM5450(FirstLastBitDec*2-1 >> i);
      //  delay(300);                 // задержка затухания
      }
    }
       
void DetectBitNumLeds()//определяем число ступенек в BIN формате первой, последней и той что по середине исходя из количества ступенек
{
  FirstLastBitDec=1;
  for (int i=1;i<NUM_LEDS;i++)
    {
      FirstLastBitDec=FirstLastBitDec*2;
      Serial.println(FirstLastBitDec);
    }
  }
 
void PWM_MM5450(uint32_t data) // шим включения ступеньки
{
  
for (int j=0;j<=19;j++)
{
for (int i=0;i<=32;i++)
{
  if (masky[j] & (1UL << i))
  { 
MM5450(data);
}
else 
{MM5450(piss);
}
}
}piss=data;
}

void PWMOFF_MM5450(uint32_t data) // шим выключения ступеньки
{
  
for (int j=19;j>=0;j--)
{
for (int i=0;i<=32;i++)
{
  if (masky[j] & (1UL << i))
  { 
MM5450(piss);
}
else 
{MM5450(data);
}
}
}piss=data;
}

void MM5450(uint32_t jopa) // програмка зажигания ступеньки
{byte i;

  digitalWrite(DATA, 1);
  digitalWrite(CLOCK, LOW);
  digitalWrite(CLOCK, HIGH);
  
  for (i = 0; i < NUM_LEDS; i++)
  {
    if (jopa & (1UL << i)) digitalWrite(DATA, HIGH);
    else digitalWrite(DATA, LOW);
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
   }
  digitalWrite(DATA, 0);
  for (byte j = 0; j < 35 - NUM_LEDS; j++)
  {
    digitalWrite(CLOCK, LOW);
    digitalWrite(CLOCK, HIGH);
  }  
}

 

idtmark
idtmark аватар
Offline
Зарегистрирован: 04.06.2016

Ahtung533

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

juchara
Offline
Зарегистрирован: 16.03.2017

Подскажите мне ту.. глупому что делает знак >> и <<, гугл молчит а сам не разберусь никак, правильно я понимаю что это переход на следующий бит массива? И подскажите еще транзисторы IRF7314 от 12 вольт будут работать без резистивного делителя?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

juchara пишет:

Подскажите мне ту.. глупому что делает знак >> и <<

http://people.toiit.sgu.ru/Sinelnikov/PT/C/Kern_Ritch.pdf

Myero
Offline
Зарегистрирован: 20.10.2015

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

volchok
Offline
Зарегистрирован: 28.08.2015

Так правильно и называется. Это, соответственно, на сколько бит будет сдвинуто число вправо или влево. Левый сдвиг, это по сути *2^n, где n - на сколько бит сдвиг. С сутью правого чуть сложнее, т.к. там нижние биты просто исчезают

juchara
Offline
Зарегистрирован: 16.03.2017

Понял, спасибо)

Silver-HaOS
Offline
Зарегистрирован: 06.02.2017

Доброго времени, Уважаемые.

Скоро предстоит изготовление лестницы в доме сына - хочу сделать подарок.

Вопрос к Ahtung533 по коду из #439.  Я так понял, что это только часть кода, к которой нужно дописать еще коды датчиков?

Myero
Offline
Зарегистрирован: 20.10.2015

Silver-HaOS пишет:

Доброго времени, Уважаемые.

Скоро предстоит изготовление лестницы в доме сына - хочу сделать подарок.

Вопрос к Ahtung533 по коду из #439.  Я так понял, что это только часть кода, к которой нужно дописать еще коды датчиков?

Да, там оформлено именно плавный поджиг мм5451, датчик расстояния и датчик освещённости надо прописать, в зависимости от того какие у вас. Полистайте ветку, там есть примеры с описанием. 

Silver-HaOS
Offline
Зарегистрирован: 06.02.2017

Спасибо, Myero.

 

С прописями датчиков справлюсь.

 

Тогда еще одно уточнение: в посте Ahtung533 указал, что "код с плавным розжигом на m5450". А Вы говорите, что для mm5451.

Дело в том, что ММ5450 уже заказал и придет на днях...

volchok
Offline
Зарегистрирован: 28.08.2015

Так это один фиг, они отличаются только назначением одного пина, что в Вашем применении не принципиально

Silver-HaOS
Offline
Зарегистрирован: 06.02.2017

Понял. Спасибо.

Буду ждать комплектующие.