String stringOne = rtc.getTimeStr();
int long h = t.hour;
int long m = t.min;
int long s = t.sec;
time_all = RTC.dec2bcd(h) * 3600 + RTC.dec2bcd(m) * 60 + RTC.dec2bcd(s );
У меня мой вариант работает (может он и корявый, но работает).
А на dec2bcd компилятор ругался матом.
Раз Вы так неплохо в коде разбираетесь, моежет не сочтете за наглость просьбу с прерыванием подсказать?
По задумке:
Раз в сутки, условии несработки опр датчиков (это я и сам могу дописать), открываем waterclup, отсчитываем N импульсов, закрываем waterclup. Но держим его открытым не более 150 сек.
Если поможете наброском кода, сразу прошу раскоментировать его.
Заранее спасибо.
Я может и не прав ввиду слабой комреценции, но мне мой вариант больше понравился простотой, к тому же он работает. ПЛК у Вас очень интересный, но крышка аквариума уже собрана именно в этом составе железа и развивать я хочу свою версию. А вообще Ваш ПЛК хороший вариант для другой моей задумки. Есть ли у Вас чтото типа комерческой версии?
Возвращаясь к своим попугаям, повторюсь но очень хотелось - бы поштурмовать мозгом наброски скетча под вышеописанную задачу.
Доки библиотеки тут не при чем.
В "даем ШИМ" надо дать значение от "0" до "4095", ну или переменную с этим значением.
А переменная на все каналы у меня одна "powerValue". Над этим и ломаю голову.
struct Day { // В этой структуре храниться информация о сутках
long sunRiseStart; // Начало рассвета в секундах от начала суток
long sunRiseFinish; // Конец рассвета
long sunSetStart; // Начало заката
long sunSetFinish; // Конец заката
int power; // Полная мощность излучения днем
int currentPower; // Текущая мощность
bool inversion; // инверсия Это я не знаю для чего нужно. Было в другой теме
} Day;
В цикле после вычисления powerValue
if (powerValue != array[i].currentPower) {
ledDriver2.writeLED(i, 4095, powerValue);
array[i].currentPower = powerValue
}
digitalRead (pin 20 ==LOW) приравнять к "время 16:00" - если на датчике "критически низкий уровень воды в САМПе" нет воды, значит (проверив остальные условия) открыть клапан независимо от времени.
САМП - тип фильтра, по сути еще один маленький аквариум, разделенный на несколько фильтрующих секций (в моем случае в тумбе под аквариумом) в первый отсек САМПа вода сливается с аквариума самотеком, а из последнего помпа поднимает обратно в аквариум.
В начале мой САМП выглядел так:Сейчас многое изменилось.
digitalRead (pin 20 ==LOW) приравнять к "время 16:00" - если на датчике "критически низкий уровень воды в САМПе" нет воды, значит (проверив остальные условия) открыть клапан независимо от времени.
То есть сменю int na long int powerValue и все должно заработать?
Я про int читал, про long читал.
А какие свойства у long int так и не понял, не подскажете?
У вас счетчик контактный или оптический? Лучше создать функцию опроса с миллис и сделать ее вызов вместо 15 строки. Как быстро крутит счетчик, будет ли успевать срабатывать антидребезг?
Можно поставить аппаратный в виде конденсатора. Номинал правда не подскажу.
Победило проблему.
Нет не победило
Вот код из библиотели 1307
Наверное нужно так
Я с этой библиотекой не работал. Читайте доки.
Для sinnpriest
Вот как нужно в вашем коде делать.
У меня мой вариант работает (может он и корявый, но работает).
А на dec2bcd компилятор ругался матом.
Раз Вы так неплохо в коде разбираетесь, моежет не сочтете за наглость просьбу с прерыванием подсказать?
По задумке:
Раз в сутки, условии несработки опр датчиков (это я и сам могу дописать), открываем waterclup, отсчитываем N импульсов, закрываем waterclup. Но держим его открытым не более 150 сек.
Если поможете наброском кода, сразу прошу раскоментировать его.
Заранее спасибо.
Я же привел код функции в сообщении. В крайнем случае можно было скопировать его в скетч и все бы скомпилировалось.
По поводу помочь...
Я обычно такие вещи пишу конечным автоматом, а для этого нужно досконально знать процесс.
Мы будем дольше переписываться, чем я скетч писать.
Если это не срочно, то можно попробовать.
У меня просто есть сейчас сбободное время, поэтому на форуме и треплюсь. А как долго у меня оно будет я сказать не могу.
А вообще эту работу можно сделать моим ПЛК V 2.0
http://robocraft.ru/blog/3126.html
По ссылке первая версия, но на гугл диске лежит вторая. Там еще описание не полностью сделано.
При определенной доделке второй версии я могу и освещение с шимом сделать по расписанию.
Можно и аквариумный веб интерфейс нарисовать.
Если дальше есть желание общаться то пишите моеимя кот майл ру
Я может и не прав ввиду слабой комреценции, но мне мой вариант больше понравился простотой, к тому же он работает. ПЛК у Вас очень интересный, но крышка аквариума уже собрана именно в этом составе железа и развивать я хочу свою версию. А вообще Ваш ПЛК хороший вариант для другой моей задумки. Есть ли у Вас чтото типа комерческой версии?
Возвращаясь к своим попугаям, повторюсь но очень хотелось - бы поштурмовать мозгом наброски скетча под вышеописанную задачу.
По-поводу коммерческой версии я пока не думал.
Опишите подробно задачу по мылу. Попробую помочь карасям.
тема переименовывается в
Таймер и ШИМ - братья навек!
Долго я расписывал этот код под 21 канал ШИМ, пока не уперся в тот факт, что имею всего одну PowerValue. Как - же ее распихать по 21 каналу?
Создать массив.
Я не понял че там расписывать
Ставим #define ARRAY_LENGTH 21
вместо #define ARRAY_LENGTH 6
и все...
Так powerValue вычисляется в цикле для каждого шима.
Вычислили powerValue установили шим
ШИМ.Set(powerValue);
Перешли к следующему вычислению в цикле
Так именно " #define ARRAY_LENGTH 21" я и поставил.
Но powerValue то одна, и все каналы работают как один. Как сделать чтото типа ШИМ.Set(powerValue[1]);
ШИМ.Set(i, powerValue[1]);
Я же не знаю как у вас шим устанавливается.
Вставляю я шим в " ledDriver2.writeLED(0, 4095, ШИМ );
Если 0 это канал, то так
ledDriver2.writeLED(i, 4095, ШИМ );
ledDriver2.writeLED(канал pca9685, из возможных 4095, даем ШИМ );
Вот в "даем ШИМ" надо чтото задать.
Я с этой библиотеккой не работал, читайте доки. Мне лень читать.
Доки библиотеки тут не при чем.
В "даем ШИМ" надо дать значение от "0" до "4095", ну или переменную с этим значением.
А переменная на все каналы у меня одна "powerValue". Над этим и ломаю голову.
powerValue вычисляется в ЦИКЛЕ!!!!
Я не зная как еще понятнее объяснить
Про в "ЦИКЛЕ" похоже догнал.
Но чтото как то не работает.
Где искать ошибку?
Я же в 64 и 66 написал i !!!!!!!!!!!!!
... и тут я догнал как я туплю!!!!
Огромное спасибо за терпение и дельные советы.
Еще раз повторяю.
Вы неправильно seconds вычисляете.
И зря игнорируете мое 41 сообщение.
Отображает в сериал секунды он правильно, но почему-то powerValue всегда равен MIN_POWER
а по 41 сообщению, я один раз просчитал, вписал и забыл.
Напишите текущее у вас время и seconds, которые он отображает
В сериал он шлет:
Заработало под
Делайте это перед циклом
Рад, что заработало.
Про вычисление времени похлже я поторопился.
Время вычесляю тут:
Сейчас бьюсь над тем, чтобы без изменения powerValue лишний раз не дергать ledDriver2.writeLED(i, 4095, powerValue);
Спасибо большое GraninDm за подсказки и терпение при написании кода "заката" и "рассвета".
Подскажите пожалуйста кто-нибудь как организовать алгоритм:
if digitalRead(pin 21 == LOw)
{
if (digitalRead(pin 16 == LOW) && digitalRead(pin 17 == LOW) && digitalRead(pin 18 == HIGH)) // ну это все просто
в (допустим) 16:00 (57600 сек) pin 19 = HIGH
считаем c pin 2 импульсы
и при достижении 5 импульсов, но не позднее 16 : 01 (57660 сек)
pin 19 = LOW.
так-же хочется digitalRead (pin 20 ==LOW) приравнять к "время 16:00"
}
Если для кого важно поясню.
pin 16 - уровень воды в аквариуме (проверить, что не превышен)
pin 17 - уровень воды в САМПе (проверить, что не превышен)
pin 18 - датчик наличия давления воды в подводящей трубе (проверить, что достаточное)
pin 2 - счетчик воды, подаваемой в аквариум (вероятно с хардверным фильтром дребезга) (залить 5 литров)
pin 19 - реле клапана подачи воды в аквариум (нормально закрытый клапан)
pin20 - критически низкий уровень воды в САМПе
pin21 - вода на полу под аквариумом
По #78
Писал по-быстрому без проверки.
так-же хочется digitalRead (pin 20 ==LOW) приравнять к "время 16:00"
Не понял, проверить только один раз в 16:00 и дальнейшее изменение игнорировать?
САМП - это что?
Не... Криво...
Сейчас другой вариант сделаю
Вот так лучше
digitalRead (pin 20 ==LOW) приравнять к "время 16:00" - если на датчике "критически низкий уровень воды в САМПе" нет воды, значит (проверив остальные условия) открыть клапан независимо от времени.
САМП - тип фильтра, по сути еще один маленький аквариум, разделенный на несколько фильтрующих секций (в моем случае в тумбе под аквариумом) в первый отсек САМПа вода сливается с аквариума самотеком, а из последнего помпа поднимает обратно в аквариум.
В начале мой САМП выглядел так:

Сейчас многое изменилось.
digitalRead (pin 20 ==LOW) приравнять к "время 16:00" - если на датчике "критически низкий уровень воды в САМПе" нет воды, значит (проверив остальные условия) открыть клапан независимо от времени.
Это предложение противоречит самому себе
Ничего не понял :(
Думаю с этим моментом сам смогу разобраться. И так все мне популярно разжевали.
Спасибо большое за дельные советы.
По #78 долго пытался, но #80 решило проблему.
Блин, беда выходит с
непонятный неадекват выдает во время заката, рассвета.
что-то типа
powerValue = map(powerValue, array[i].sunSetStart, array[i].sunSetFinish, array[i].power, MIN_POWER);
не прокатит? как правильно это написать?
Зачет там 4096. Я же уже объяснял, для чего там 1024
А вообще...
Напрягитесь. Если у меня ошибка - исправьте.
Это математика 6 класс.
powerValue = map(powerValue, array[i].sunSetStart, array[i].sunSetFinish, array[i].power, MIN_POWER);
Тот-же самый бред выдает.
С 1024 то-же самое.
Опубликуйте полный последний скетч. Я проверю
Вообще - это ваш косяк!
У меня в коде long int powerValue
У вас int powerValue
Нельзя так обращаться с переменными. Нужно думать какие там могут быть значения.
И если вы хотите там получить значения в интервале 0-4096, это еще не значит, что там не может быть переполнения при вычислениях.
То есть сменю int na long int powerValue и все должно заработать?
Я про int читал, про long читал.
А какие свойства у long int так и не понял, не подскажете?
Поищите в google типы данных int long int
Это азы.
Если коротко
Int 2 byte
long 4 byte
:) работает!!!
Спасибо большое.
Прорабатываю кусок кода, про подмену воды.
Подскажите ктонибудь куда в
и как дописать защиту от дребезга, не применяя delay
У вас счетчик контактный или оптический? Лучше создать функцию опроса с миллис и сделать ее вызов вместо 15 строки. Как быстро крутит счетчик, будет ли успевать срабатывать антидребезг?
Можно поставить аппаратный в виде конденсатора. Номинал правда не подскажу.
Счетчик контактный, крутит не выше 15Гц.
Можно подробнее про функцию опроса с миллис и ее вызов вместо 15 строки?
Вот моя функция из одного проекта, правда она для аналога, думаю переделать на цифру труда не составит: