Как Blink встроить в таймер

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Вешаю светодиоды на порты 10, 11, 12. Пишу код в котором светодиод с порта 10 светит с 0 сек. до 20, далее светодиод порта 11 включаем в 10 сек. до 30 сек. и далее светодиод порта 12 включаем в 20 сек. и он будет включон до 50 сек., далее светодиод портов 12 и 10 тестируем. Ниже схема времени в одну минуту с перекрытием. Работает только порт10 - 11 совместно.

0----------порт 10**************20

                    10 ***************----------порт 11-----------------------------30

                                          20--------------------------------------------порт 12-------------------------------------50

Практически это вариант, когда две нагрузки должны работать иногда одновременно. Из испытанных 10, 11, 12, 13 портов только 10 с 11 могут работать совместно. "второй остается лау"

Может мои светодиоды так работают... нужно проверить.

              

bwn
Offline
Зарегистрирован: 25.08.2014

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

Либо в ходе экспериментов пины угробили.

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Завтра другие светодиоды буду подключать. Замерил тестером: напряжение на светодиоде садится до 1.9v и в зависимости от цвета они не могут работать одновременно. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Там, поди, еще двухкиловаттные движки подключены параллельно к ногам...

bwn
Offline
Зарегистрирован: 25.08.2014

Вы их напрямую что ли к ногам подцепили?

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Завтра другие светодиоды буду подключать. Замерил тестером: напряжение на светодиоде садится до 1.9v и в зависимости от цвета они не могут работать одновременно. 

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

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Думаю не верно подключил. Поставил общий резистор 1ком на GND. Надо наверное на каждый отдельно. Светодиоды светофорные.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

braslav пишет:

Думаю не верно подключил. Поставил общий резистор 1ком на GND. Надо наверное на каждый отдельно.

Правильное управление включением светодиода - LOW порта. Катодом к порту, анод к гасящему резистору, индивидуально на каждый светодиод, резистор к +5В

bwn
Offline
Зарегистрирован: 25.08.2014

braslav пишет:

Думаю не верно подключил. Поставил общий резистор 1ком на GND. Надо наверное на каждый отдельно. Светодиоды светофорные.

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

bwn
Offline
Зарегистрирован: 25.08.2014

ulis пишет:

Правильное управление включением светодиода - LOW порта. Катодом к порту, анод к гасящему резистору, индивидуально на каждый светодиод, резистор к +5В

А в чем разница с прямым включением?

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

bwn пишет:

ulis пишет:

Правильное управление включением светодиода - LOW порта. Катодом к порту, анод к гасящему резистору, индивидуально на каждый светодиод, резистор к +5В

А в чем разница с прямым включением?

При таком включении нагрузочная способность порта выше и гасящий резистор можно даже подключить не к 5 В., а к максимально допустимому для порта напряжению в его закрытом состоянии, нужно посмотреть датушит, возможно к 12 В

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Я знаю, что такое светодиод и как его подключить. Завтра разберусь почему не пошло.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

bwn пишет:

А в чем разница с прямым включением?

Хотя, конечно, я не совсем прав, что можно подключить гасящее к 12 В. Думаю к 6 - 7 вольт можно. Упрощенная схема порта

 

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Светодиоды работают нормально. Почему не работают совмесно разберусь. Просто подумал (черт попутал), что может есть особенности портов. Если все порты одинаковы  ... все заработает. НО завтра. А сегодня видео 

https://youtu.be/NyzrmAaCpNI

bwn
Offline
Зарегистрирован: 25.08.2014

ulis пишет:

Хотя, конечно, я не совсем прав, что можно подключить гасящее к 12 В. Думаю к 6 - 7 вольт можно. Упрощенная схема порта

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

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

bwn пишет:

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

Сказывается моя старая привычка использовать логику с открытым коллектором

kostyamat
Offline
Зарегистрирован: 16.11.2017

Так то оно правильнее, но сложнее для понимания. Логика работы ведь обратная - high не светит, светит low. ))

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Все в порядке. Поставил обыкновенные трехмиллимитровые светодиоды и работают они порознь и совместно, как угодно. Резистор ставил по-прежнему один на минус. Купил в Китае модули реле, когда пришлют все станет проще.

https://youtu.be/3K7gOUm8S1M

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Решил написать код с применением массива, НО не заработало... Вот такой

int on10[12] = { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 59};

Ардуина не артачится, загружает...

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x3f,16,2);
RTC_DS1307 RTC;
int releyPin10 = 10;

// Вписываем время включения и выключения
//**************************************** Массивы
// Включаемся в Часов Красный
int on10[12] = { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 59};
int off10[12] = { 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 0};

//****************************************
void setup () {
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialize the lcd
    lcd.backlight();
    pinMode(releyPin11, OUTPUT);
    pinMode(releyPin12, OUTPUT);
      pinMode(releyPin10, OUTPUT);
  }
void loop() {
  {
    static byte prevSecond = 0;
    DateTime now = RTC.now();
    if (now.second() != prevSecond) {
      prevSecond = now.second();
      //Здесь вывод на дисплей
    //lcd.setCursor(0,0);
 // lcd.print(on11);
 // lcd.setCursor(2,0);
//  lcd.print(on12);
//lcd.setCursor(5,0);
 
lcd.setCursor(7,0);
  lcd.print("--");
   
lcd.setCursor(9,0);
 // lcd.print(off11);
  lcd.setCursor(11,0);
  //lcd.print(off12);
  lcd.setCursor(14,0);
    lcd.setCursor(0, 1);
    lcd.print("ON- ");
    if (now.hour() < 10) lcd.print("0");
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute() < 10) lcd.print("0");
    lcd.print(now.minute(), DEC);
    lcd.print(':');
     if (now.second() < 10) lcd.print("0");
    lcd.print(now.second(), DEC);
    lcd.print("-OFF");
    }
  
  if  ( (now.second() >= on10)) digitalWrite(releyPin10, HIGH);
  if  ( (now.second() >= off10)) digitalWrite(releyPin10, LOW);

  
}}

 

bwn
Offline
Зарегистрирован: 25.08.2014

А кто номер элемента массива будет определять?

braslav
braslav аватар
Offline
Зарегистрирован: 25.02.2017

Да, я уже понял, что хотел слишком просто сделать. Посчитал что задал int это и есть on10. Дальше if выводит все заданные величины по очереди. Но все не так просто. На самом деле мне это не нужно пока. Это было просто любопытсво, что можно сократить

 

bwn
Offline
Зарегистрирован: 25.08.2014

Как раз int здесь без надобности, часы<=23, минуты <= 59, все в byte с запасом помещается. А для массивов надо в квадратных скобках номер требуемого элемента указывать.