Управление реле по таймеру

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

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

Задача:

Пользователь нажимает на дисплее Nextion кнопку старт, затем вклечаются реле на 25 минут и после истечения 25ти минут отключается.

Вопрос: как сделать, так чтобы реле работало по таймеру 25 мин. а затем отключалось.

PS: за реальные предложения в решении задачи отменя бонус...

ЗАРАНЕЕ СПАСИБО!!!!!

vk007
Offline
Зарегистрирован: 16.06.2015

Если вы не ошиблись разделом форума, то все зависит от степени вашей "продвинутости". Можно через delay(), как многие новички делают, а можно кошерно с помощью millis().

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

Примерно так:


void pisec() {
  static unsigned long oldTime = 0;
  if (rele == включено) {
    if (millis() - oldTime >= 1500000) {
      oldTime = millis();
      //тута выключить
    }
  }
  else {
    oldTime = millis();
  }
}

гони бонус.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

С delay:

void startButtonPressedOnNextion()
{
  digitalWrite(RELAY_PIN, RELAY_ON_LEVEL);
  delay(25*60*1000);
  digitalWrite(RELAY_PIN, RELAY_OF_LEVEL);
}

Без delay:

bool isRelayOn = false;
unsigned long relayTimer;
void startButtonPressedOnNextion()
{
 if(isRelayOn)
   return;
  relayTimer = millis();
  digitalWrite(RELAY_PIN, RELAY_ON_LEVEL);
  isRelayOn = true;
}
void updateRelay()
{
 if(!isRelayOn)
    return;

  if(millis() - relayTimer > 25*60*1000)
  {
     isRelayOn = false;
     digitalWrite(RELAY_PIN, RELAY_OFF_LEVEL);

  }
}

Только не говорите, что не компилируется и непонятно, что к чему - за вас никто ВСЮ работу делать не будет. Пути - показаны, дерзайте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DIYMan пишет:

  if(millis() - relayTimer > 25*60*1000)

Оххх. Здесь он точно сам не исправит :(

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

"""""""""""""Только не говорите, что не компилируется и непонятно, что к чему - за вас никто ВСЮ работу делать не будет. Пути - показаны, дерзайте."""""""""""

Конечно верное замечание, не спорю!!!!!!!!!!!!!!!!!!

Но я только учусь и пытаюсь разобраться, в надежде что гуру вроди Вас проведут по темному и дремучему лесу под названием АРДУИНО!)))))

ЕСЛИ БЫ ВСЕ БЫЛИ ТАКИМИ ОТКРЫТЫМИ и ДОБРОЖЕЛАТЕЛЬНЫМИ КАК ВЫ.

А ТЕПЕРЬ МОЖНО ВАС ПОПРОСИТЬ ПРОКОМЕНИТИРОВАТЬ ВАШ "МУНУСКРИПТ" С ЗАКЛИНАНИЯМИ ПЛИЗ!!!!

И ПРО БОНУС Я НЕЗАБЫЛ!!!!!!!!!!!!!!

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ЕвгенийП пишет:

DIYMan пишет:

  if(millis() - relayTimer > 25*60*1000)

Оххх. Здесь он точно сам не исправит :(

РАЗЬЯСИНИТЕ КА СУДОРЬ МЫСЛЬ СВОЮ ХОЛОПУ)))

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

nurgazin_d@mail.ru пишет:

А ТЕПЕРЬ МОЖНО ВАС ПОПРОСИТЬ ПРОКОМЕНИТИРОВАТЬ ВАШ "МУНУСКРИПТ" С ЗАКЛИНАНИЯМИ ПЛИЗ!!!!

Во-первых - не кричите. Во-вторых - всё просто, смотрите (для второго примера беру) - у нас есть функция startButtonPressedOnNextion - она должна вызываться тогда, когда на Nextion нажата кнопка. Далее - у нас есть флаг, что реле включено, и время начала его работы. В этой функции, если нажата кнопка - мы включаем реле, если оно ещё не включено.

Далее - функцию updateRelay надо постоянно вызывать в loop. Она проверяет - если реле включено, то проверяется разница между временем начала работы и текущим. Если эта разница чуть больше (на самую кроху вроде одной миллисекунды) чем 25 минут - то реле выключается.

Всё.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это было сказано DIYMan, он понял.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Я конечто рад, что позобавил Вас своей тупостью но ща вообще ЗАПУТАЛСЯ.

"Э да я не кричал".)))

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017
 byte pin8 =8;
 byte pin9 =9;
 byte pin10 =10;
 byte pin11 =11; 
 byte pin12 =12; 
 
#include <SoftwareSerial.h>
#include <Nextion.h>
 
SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps
 
 
void setup() {
  Serial.begin(9600);
pinMode (pin8, OUTPUT);
pinMode (pin9, OUTPUT);
pinMode (pin10, OUTPUT);
pinMode (pin11, OUTPUT);
pinMode (pin12, OUTPUT);
digitalWrite (pin8, HIGH);
digitalWrite (pin9, HIGH);
digitalWrite (pin10, HIGH);
digitalWrite (pin11, HIGH);
digitalWrite (pin12, HIGH);
  myNextion.init();
}
 
void loop() {
 
  String message = myNextion.listen(); //check for message
   if(message == "65 0 4 1 ffff ffff ffff"){
digitalWrite (pin8, LOW);
  };
   if(message == "65 0 5 1 ffff ffff ffff"){
digitalWrite (pin8, HIGH);
  };
   if(message == "65 0 6 1 ffff ffff ffff"){
digitalWrite (pin9, LOW);
  };
   if(message == "65 0 7 1 ffff ffff ffff"){
digitalWrite (pin9, HIGH);
  };
   if(message == "65 0 8 1 ffff ffff ffff"){
digitalWrite (pin10, LOW);
  };
   if(message == "65 0 9 1 ffff ffff ffff"){
digitalWrite (pin10, HIGH);
  };
   if(message == "65 0 10 1 ffff ffff ffff"){
digitalWrite (pin11, LOW);
  };
   if(message == "65 0 11 1 ffff ffff ffff"){
digitalWrite (pin11, HIGH);
  };
   if(message == "65 0 12 1 ffff ffff ffff"){
digitalWrite (pin12, LOW);
  };
   if(message == "65 0 13 1 ffff ffff ffff"){
digitalWrite (pin12, HIGH);
  };
  
  if(message != ""){ // if a message is received...
    Serial.println(message); //...print it out
  }
 
  }
 
nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ПОДСКАЖИТЕ КУДА ЗДЕСЬ ВСТАВИТЬ КОД С ТАЙМЕРОМ

alex_r61
Offline
Зарегистрирован: 20.06.2012

Весело тут! У Nextion есть свой таймер и если это расширенная версия, то Дуню можно выкинуть. Если базовая, то Дуне остаётся только принять команды на включение и отключение реле, Nextion сам всё посчитает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nurgazin_d@mail.ru пишет:

ПОДСКАЖИТЕ КУДА ЗДЕСЬ ВСТАВИТЬ КОД С ТАЙМЕРОМ

После строки №ХЗ

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

alex_r61 пишет:

Весело тут! У Nextion есть свой таймер и если это расширенная версия, то Дуню можно выкинуть. Если базовая, то Дуне остаётся только принять команды на включение и отключение реле, Nextion сам всё посчитает.

Вы правы-версия nextion расширенная!

но я не знаю как там работать с часами(((

есть мануал или ролик по этой теме?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Тогда Дуню можно выкинуть, там 8 gpio и rtc. Небольшой пример, уже не только Вы на часах спотыкаетесь, хотя ничего сложного. https://yadi.sk/d/4UeN4Nlg3QmkVu

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017
n0.val=rtc3
n1.val=rtc4
n2.val=rtc5
n3.val=rtc2
n4.val=rtc1
n5.val=rtc0
спасибо большое! 
rtc0..rtc5 это значения как я понял часов (ч:min:sec; число:месяц:год)
как можно исходя из этих данных получить задержку работы реле на 25 мин.?
Я пока чайник ((( подскажите развернутее пожалуйста.
 
bwn
Offline
Зарегистрирован: 25.08.2014

Когда время равно требуемому, замкнуть. А дальше интервал сам, без часов, считается.
От сердцем чую, замылить бонус хочет.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Сердце вас подводит, сделать кардиограмму не мешало бы (эт я вам как бывший фельдшер говорю)

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

Та ладно, прозектор сделает. Но согласитесь, обещанного бонуса за проделанную работу так и не было, а сейчас развиваем уже другую тему.((((

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Бонус БУДЕТ!!!!!!!!!!

ВОПРОС ВСЕ ТОТЖЕ!!!!!!!!!!!!!!!!!

Задача:Пользователь нажимает на дисплее Nextion кнопку старт, затем вклечаются реле на 25 минут и после истечения 25ти минут отключается.

Вопрос: как сделать, так чтобы реле работало по таймеру 25 мин. а затем отключалось.

PS: за реальные предложения в решении задачи отменя бонус... (QIWI)

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

В моём примере таймер срабатывает каждую секунду, отюда и "пляшите". Тут вариантов куча. Сделайте        ещё один таймер - минутный или в этом засекайте время нажатия и считайте  сколько нужно.

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

ВОПРОС ВСЕ ТОТЖЕ!!!!!!!!!!!!!!!!!

и получили ответ в #3 и разъяснения по нему в #7. Думаю, что большего вам вряд ли стоит ждать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nurgazin_d@mail.ru пишет:

отменя бонус...

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

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

- нажав на кнопку "СТАРТ" срабатывают РЕЛЕ 1,3,5 (Время работы 25мин, отображаются в прогресс баре)

- нажав на кнопку "СТОП" срабатывают РЕЛЕ 2 (Время работы не ограничено)

- нажав на кнопку "КВАРЦ" срабатывают РЕЛЕ 4 (Время работы 15мин, отображаются в прогресс баре)

ПРОБОНУС....

КТО СКИНЕТ ПРОЕКТ КИДАЙТЕ QIWI, ПОМОЖЕТ ваш проект с меня бабосик (не много))))))))))!!!

И если нажать на кружочек реле сработает так сказать ручное управление

 

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ЕвгенийП пишет:

nurgazin_d@mail.ru пишет:

отменя бонус...

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

ОСТРЯК!!!!!)))))))))

Я же тупенький, что я сделаю... ну немогу я Вас ПРОФЕССОРОВ ПОНЯТЬ ПОМОГИТЕ доступнее, как для чайников

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

- нажав на кнопку "СТАРТ" срабатывают РЕЛЕ 1,3,5 (Время работы 25мин, отображаются в прогресс баре)

- нажав на кнопку "СТОП" срабатывают РЕЛЕ 2 (Время работы не ограничено)

- нажав на кнопку "КВАРЦ" срабатывают РЕЛЕ 4 (Время работы 15мин, отображаются в прогресс баре)

ПРОБОНУС....

КТО СКИНЕТ ПРОЕКТ КИДАЙТЕ QIWI, ПОМОЖЕТ ваш проект с меня бабосик (не много))))))))))!!

 

Пробелы в логике: для кнопок "СТАРТ" и "КВАРЦ" нужны ДВА ОТДЕЛЬНЫХ прогресс-бара.  И если есть кнопки "старт" и "стоп", то по логике вторая должна отменять действия первой, а не включать свое реле...

Ну и понятие "немного" было бы неплохо озвучить :) А то может вы за пару сотен рублей надеетесь решение получить...

ИМХО, дешевле двадцатки (тысяч) я бы не взялся, уж больно стремное задание :)

 

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ну про сотни вы конечно перегнули)))) про логику согласен! ну 5000 больше нет((( а про стремное задание не понял ВАС в чем стремность?????

прогресс бар работает то с одним то с другим компонентом, как то так

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

 а про стремное задание не понял ВАС в чем стремность?????

в заказчике :)

ЗЫ расслабтесь, про 20тыс я пошутил, я не торгуюсь, все равно делать не буду :)

b707
Offline
Зарегистрирован: 26.05.2017

nurgazin_d@mail.ru пишет:

прогресс бар работает то с одним то с другим компонентом, как то так

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

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

переход на личность это перебор, если не будите и не надо(((

alex_r61
Offline
Зарегистрирован: 20.06.2012

Что то очень знакомое )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nurgazin_d@mail.ru пишет:

переход на личность это перебор

Если Вы про фразу

b707 пишет:

в заказчике :)

То это не переход на личность. Это костатация факта, что если заказчик не может понятно сформулировать, что ему нужно, за работу браться нельзя. 100% без исключений, выяснится, что реально ему нужно "не это", а нужно ему работа гораздо больше, сложнее и дороже, чем изначально казалось, и он будет давить типа "взялся, делай, инче ославлю ...". Плавали, знаем.

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

СОГЛАСЕН!!!

есть такое. ну вроди б как я изложил все как надо!)))

MaksVV
Offline
Зарегистрирован: 06.08.2015


#define RELAY 2          //  пин ардуино, к которому подключено реле

int interval = 20;      // время работы таймера, мин
unsigned long timer =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет

void setup() {

pinMode     (RELAY, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом 
digitalWrite(RELAY, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
}

void loop()                    {


if (тут вставить условие - если нажата кнопка на Nextion) { // строка мониторит факт нажатия кнопки на Nextion 
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY, 0);      // ну и включаем реле
} 


if (timerenabled && millis()-timer> (unsigned long) interval*60000UL)  //если таймер был включен и он кончился
{ 
  
  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY, 1);  //выключаем реле
}



                               }

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

САМЫЙ КРУТОЙ СКЕТЧ, РАБОТАЮ НАД ЕГО АДАПТАЦИЕЙ ПОД СВОЙ ПРОЕКТ.

КАК ЗАКОНЧУ НАПИШУ ВАМ     "MaksVV" !!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

MaksVV пишет:


#define RELAY 2          //  пин ардуино, к которому подключено реле

int interval = 20;      // время работы таймера, мин
unsigned long timer =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет

void setup() {

pinMode     (RELAY, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом 
digitalWrite(RELAY, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
}

void loop()                    {


if (тут вставить условие - если нажата кнопка на Nextion) { // строка мониторит факт нажатия кнопки на Nextion 
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY, 0);      // ну и включаем реле
} 


if (timerenabled && millis()-timer> (unsigned long) interval*60000UL)  //если таймер был включен и он кончился
{ 
  
  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY, 1);  //выключаем реле
}



                               }

 

Вот как я адаптировал Ваш код


#define RELAY8 8          // диспригатор        220
#define RELAY9 9          // ВЫХОД и вытяжка    12 и 220
#define RELAY10 10        // Конвекционные вентиляторы 12
#define RELAY11 11        // КВАРЦ     220
#define RELAY12 12        // ИОНИЗАТОР 220 

#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

int interval = 25;      // время работы таймера на реле 8, 10, 12, мин
int interval2 = 15;      // время работы таймера на реле 11, мин
unsigned long timer =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет 

void setup()
{
Serial.begin(9600);
pinMode     (RELAY8, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом
digitalWrite(RELAY8, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
pinMode     (RELAY9, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом
digitalWrite(RELAY9, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
pinMode     (RELAY10, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом
digitalWrite(RELAY10, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
pinMode     (RELAY11, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом
digitalWrite(RELAY11, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
pinMode     (RELAY12, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом
digitalWrite(RELAY12, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
  myNextion.init();
}

void loop() {
/////////////////////////////////////////////////////////////START////////////////////////////////////////////////////////////// 
  String message = myNextion.listen(); //check for message
   if(message == "65 0 3 1 ffff ffff ffff")
{
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY9, 1);  //выключаем реле
    digitalWrite(RELAY11, 1);  //выключаем реле
    digitalWrite(RELAY8, 0);      // ну и включаем реле
    digitalWrite(RELAY10, 0);      // ну и включаем реле
    digitalWrite(RELAY12, 0);      // ну и включаем реле
}
if (timerenabled && millis()-timer> (unsigned long) interval*60000UL)  //если таймер был включен и он кончился
{  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY8, 1);  //выключаем реле
  digitalWrite(RELAY10, 1);  //выключаем реле
  digitalWrite(RELAY11, 1);  //выключаем реле
  digitalWrite(RELAY12, 1);  //выключаем реле
  digitalWrite(RELAY9, 0);  //включаем реле
}
//////////////////////////////////////////////////////////////END//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////QVARC////////////////////////////////////////////////////////////// 

  if(message == "65 0 4 1 ffff ffff ffff")
{
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
digitalWrite(RELAY8, 1);  //выключаем реле
digitalWrite(RELAY9, 1);  //выключаем реле
digitalWrite(RELAY10, 1);  //выключаем реле
digitalWrite(RELAY12, 1);  //выключаем реле
digitalWrite(RELAY11, 0);  // ну и включаем реле
}
if (timerenabled && millis()-timer> (unsigned long) interval2*60000UL)  //если таймер был включен и он кончился
{  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY11, 1);  //выключаем реле
  digitalWrite(RELAY9, 0);  //включаем реле
}
//////////////////////////////////////////////////////////////END//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////STOP////////////////////////////////////////////////////////////// 

  if(message == "65 0 5 1 ffff ffff ffff")
{    
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 0;            // выключаем таймер
    digitalWrite(RELAY8, 1);      // ну и выключаем реле
    digitalWrite(RELAY9, 0);      // ну и выключаем реле
    digitalWrite(RELAY10, 1);      // ну и выключаем реле
    digitalWrite(RELAY11, 1);      // ну и выключаем реле
    digitalWrite(RELAY12, 1);      // ну и выключаем реле
}
//////////////////////////////////////////////////////////////END//////////////////////////////////////////////////////////////
//****************************РУЧНОЕ УПРАВЛЕНИЕ*****************************************
 if(message == "1") 
{
 digitalWrite (RELAY8, LOW);
}
 if(message == "2") 
{
 digitalWrite (RELAY8, HIGH);
}
 if(message == "3") 
{
 digitalWrite (RELAY9, LOW);
}
 if(message == "4") 
{
 digitalWrite (RELAY9, HIGH);
}
 if(message == "5") 
{
 digitalWrite (RELAY10, LOW);
}
 if(message == "6") 
{
 digitalWrite (RELAY10, HIGH);
}
 if(message == "7") 
{
 digitalWrite (RELAY11, LOW);
}
 if(message == "8") 
{
 digitalWrite (RELAY11, HIGH);
}
 if(message == "9") 
{
 digitalWrite (RELAY12, LOW);
}
 if(message == "10") 
{
 digitalWrite (RELAY12, HIGH);
}

  if(message != ""){ // if a message is received...
    Serial.println(message); //...print it out
  }

  }

 

 
Есть проблема на процедуре СТАРТ интервал работает не коректно (я добавил переменную interval2, для процедуры QVARC, чтобы СТАРТ работал 25мин. а QVARC 15мин.) но на деле работает все 15мин. и отключает реле по процедуре QVARC проверьте пожалуйста где я набедокурил))))))) и как подскажите передать время работы в NEXTION типа так чтобы боло       
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А ну ка быстро вставляйте свои адаптации как код,
а то заклюют!
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Сравните как у других
Включить нумерацию строк забыли?

MaksVV
Offline
Зарегистрирован: 06.08.2015

nurgazin_d@mail.ru пишет:

Есть проблема на процедуре СТАРТ интервал работает не коректно (я добавил переменную interval2, для процедуры QVARC, чтобы СТАРТ работал 25мин. а QVARC 15мин.) но на деле работает все 15мин. и отключает реле по процедуре QVARC проверьте пожалуйста где я набедокурил))))))) 
для каждого таймера ,кроме переменной interval, нужно использовать и остальные СВОИ переменные 
unsigned long timer =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет

 

т.е. для второго таймера используем переменные с другими названиями, например:

interval_2 = 15;                            // время работы таймера, мин 
unsigned long timer_2 =0;           // переменная для работы таймера
bool timerenabled_2 = 0;             // флаг включен таймер или нет

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

MaksVV пишет:



#define RELAY 2          //  пин ардуино, к которому подключено реле

int interval = 20;      // время работы таймера, мин
unsigned long timer =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет

void setup() {

pinMode     (RELAY, OUTPUT); // пин ардуино, к которому подключено реле, делаем выходом 
digitalWrite(RELAY, HIGH  ); // сначала реле в положении выкл, (сигнал инвертирован - чаще реле с такой логикой)
}

void loop()                    {


if (тут вставить условие - если нажата кнопка на Nextion) { // строка мониторит факт нажатия кнопки на Nextion 
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY, 0);      // ну и включаем реле
} 


if (timerenabled && millis()-timer> (unsigned long) interval*60000UL)  //если таймер был включен и он кончился
{ 
  
  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY, 1);  //выключаем реле
}



                               }

 

MaksVV СПАСИБО ВАМ ЗА ТО ЧТО ПОМОГЛИ С ПЕРЕМЕННЫМИ!!!

Есть последний вопрос: как не пыталься понять какие из вашего кода переменные нужно отправвить в NEXTION, чтобы вывести время, не получается(((

Подскажите пожалуйста как отправить в  дисплей минуты и секунды, чтобы было примерно так 00:25:00. Счет времени обратный (желательно) или нарастающий!

СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!

 

 

 

 

 

 

 

 

 

MaksVV
Offline
Зарегистрирован: 06.08.2015
nurgazin_d@mail.ru пишет:
отменя бонус...
 
ура, я бонус заработал)
 
nurgazin_d@mail.ru пишет:
СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!
 

nurgazin_d@mail.ru пишет:
Подскажите пожалуйста как отправить в  дисплей минуты и секунды, чтобы было примерно так 00:25:00. Счет времени обратный (желательно) или нарастающий!

unsigned long timer = 0; // переменная для таймера 
bool timerenabled= 0 ;   // флаг включен таймер или нет
int interval = 25;       // врем работы таймера, мин


int min_timer = 0;      // минуты таймера ,  ТО ЧТО ВЫ ПРОСИЛИ!!!
int sec_timer = 0;      // секунды таймера,  ТО ЧТО ВЫ ПРОСИЛИ!!!
int prevsec_timer = 0;  // последнее значение секунд


void setup() {

pinMode (13, OUTPUT);  //управляем встроенным светодиодом
digitalWrite (13,0);   //cначала севтик выключен
Serial.begin(38400);   // сериал порт инит
  
timer = millis();      // сбросим таймер на ноль
timerenabled= 1 ;      // и сразу в сетапе включим таймер
 


}

void loop() {


if (timerenabled && millis()-timer >=(unsigned long)interval * 60000UL) {
  timerenabled = 0; digitalWrite (13, 1);  } // если таймер кончился включим встроенный светодиод
  
  //ниже запись мин и сек таймера в переменные 
if (timerenabled) {min_timer = (millis()-timer)/60000UL; sec_timer = (millis()-timer)/1000 - min_timer*60;
if (sec_timer==60) {sec_timer = 0; min_timer++;}}


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

if  (sec_timer!=prevsec_timer) { //если секунда изменила своё значение 
if (min_timer<10) Serial.print ("0"); // если минут менее 10 печатаем ноль перед минутами

//ниже выводим минуты и секунды таймера в сериал порт.   
  Serial.print (min_timer);          
  Serial.print (" min   "); 
  if (sec_timer<10) Serial.print ("0"); 
  Serial.print (sec_timer); 
  Serial.println (" sec");
  
  prevsec_timer = sec_timer;  //сохраняем последнее значение секунд
  
}
  

}

 

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

"""MaksVV""" доброго времени суток!!!

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

ПОМОГИТЕ ЕГО ДОРАБОТАТЬ и скиньте ваш кошелючек туда упадет обещанный бонус))))))

напоминаю задачу

-пользователь нажимает на дисплее NEXTION кнопку СТАРТ, включается музыка и пины 8,10,12 (время их работы 25 мин)
-пользователь нажимает на дисплее NEXTION кнопку КВАРЦ, проигрывается сообщение "включен кварц" и пины 11 (время их работы 15 мин) 
-пользователь нажимает на дисплее NEXTION кнопку СТОП,  выключаются все пины и включается только пин 9 (время не ограничено).

ВОПРОС:
- как передать в NEXTION время работы, чтобы было видно период работы (25 и 15 мин)?
- как сделать, так чтобы при нажатии на кнопку СТАРТ проиграло сообщение "СЕАНС НАЧАТ" а затем начала играть музыка рандомом непрерывно (трек за треком)
- как сделать, так чтобы при нажатии на кнопку КВАРЦ проиграло сообщение "ВКЛЮЧЕН КВАРЦ".
- как сделать, так чтобы при нажатии на кнопку СТОП проиграло сообщение "СЕАНС ОКОНЧЕН".
- и последнее, сейчас работает так
/////////////////////////////////////КНОПКА START/////////////////////////////////// 

  String message = myNextion.listen(); //check for message
   if(message == "65 0 3 1 ffff ffff ffff")
{
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY9, 1);  //выключаем реле
    digitalWrite(RELAY11, 1);  //выключаем реле
    digitalWrite(RELAY8, 0);      // ну и включаем реле
    digitalWrite(RELAY10, 0);      // ну и включаем реле
    digitalWrite(RELAY12, 0);      // ну и включаем реле
    mp3_play (); // запускаем трек 
    delay (100);
    mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности
//////////////////////////////////////////////////////////////////////////

ПОЧЕМУ ПРИ КАЖДОМ НАЖАТИИ ИГРАТЬ НАЧИНАЕТ ВСЕ ТАКЖЕ С ПЕРВОГО ТРЕКА, ХОТЯ СТОИТ РАНДОМ??????

ВОТ КАК Я ЕГО ПОПЫТАЛСЯ АДАПТИРОВАТЬ))

#define RELAY8 8          // диспригатор        220
#define RELAY9 9          // ВЫХОД и вытяжка    12 и 220
#define RELAY10 10        // Конвекционные вентиляторы 12
#define RELAY11 11        // КВАРЦ     220
#define RELAY12 12        // ИОНИЗАТОР 220 
 
#include <SoftwareSerial.h>
#include <Nextion.h>
#include <DFPlayer_Mini_Mp3.h>
 
SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino
Nextion myNextion(nextion, 9600); 

int interval = 25;      // время работы таймера реле 8, 10, 12, мин
int interval2 = 15;      // время работы таймера реле 11, мин
unsigned long timer =0; // переменная для работы таймера
unsigned long timer2 =0; // переменная для работы таймера
bool timerenabled = 0;  // флаг включен таймер или нет 
bool timerenabled2 = 0;  // флаг включен таймер или нет 

int min_timer = 0;      // минуты таймера   
int min_timer2 = 0;      // минуты таймера   
int sec_timer = 0;      // секунды таймера  
int sec_timer2 = 0;      // секунды таймера
  
int prevsec_timer = 0;  // последнее значение секунд
int prevsec_timer2 = 0;  // последнее значение секунд
 
 
void setup()
{
Serial.begin(9600);

  mp3_set_serial (Serial);    //set Serial for DFPlayer-mini mp3 module 
  delay (100);
  mp3_set_volume (25);
  delay (100);

pinMode     (RELAY8, OUTPUT); 
digitalWrite(RELAY8, HIGH  ); 
pinMode     (RELAY9, OUTPUT); 
digitalWrite(RELAY9, HIGH  ); 
pinMode     (RELAY10, OUTPUT); 
digitalWrite(RELAY10, HIGH  );
pinMode     (RELAY11, OUTPUT); 
digitalWrite(RELAY11, HIGH  ); 
pinMode     (RELAY12, OUTPUT); 
digitalWrite(RELAY12, HIGH  ); 
  myNextion.init();
}
 
void loop() {
////////////////////////////КНОПКА START//////////////////////////////////////// 
  String message = myNextion.listen(); //check for message
   if(message == "65 0 3 1 ffff ffff ffff")
{
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
    digitalWrite(RELAY9, 1);  //выключаем реле
    digitalWrite(RELAY11, 1);  //выключаем реле
    digitalWrite(RELAY8, 0);      // ну и включаем реле
    digitalWrite(RELAY10, 0);      // ну и включаем реле
    digitalWrite(RELAY12, 0);      // ну и включаем реле
    mp3_play (); // запускаем трек 
    delay (100);
    mp3_random_play ();  // Даем команду проигрывать треки в случайной последовательности

}
if (timerenabled && millis()-timer> (unsigned long) interval*60000UL)  //если таймер был включен и он кончился
{  timerenabled = 0 ;       // выключаем таймер
  digitalWrite(RELAY8, 1);  //выключаем реле
  digitalWrite(RELAY10, 1);  //выключаем реле
  digitalWrite(RELAY11, 1);  //выключаем реле
  digitalWrite(RELAY12, 1);  //выключаем реле
  digitalWrite(RELAY9, 0);  //включаем реле
  mp3_stop (); 
  delay (100);
}
///////////////////////////////////////////END/////////////////////////////////////////////
//////////////////////////КНОПКА QVARC///////////////////////////////////////////// 

  if(message == "65 0 4 1 ffff ffff ffff")
{
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 1;            // включаем таймер
digitalWrite(RELAY8, 1);  //выключаем реле
digitalWrite(RELAY9, 1);  //выключаем реле
digitalWrite(RELAY10, 1);  //выключаем реле
digitalWrite(RELAY12, 1);  //выключаем реле
digitalWrite(RELAY11, 0);  // ну и включаем реле
}
if (timerenabled2 && millis()-timer2> (unsigned long) interval2*60000UL)  //если таймер был включен и он кончился
{  timerenabled2 = 0 ;       // выключаем таймер
  digitalWrite(RELAY11, 1);  //выключаем реле
  digitalWrite(RELAY9, 0);  //включаем реле
}
//////////////////////////////////END///////////////////////////////////////
//////////////////////////////КНОПКА STOP///////////////////////////////////////// 

  if(message == "65 0 5 1 ffff ffff ffff")
{    
    timer = millis();            // как бы сбрасываем таймер на ноль
    timerenabled = 0;            // выключаем таймер
    timer2 = millis();            // как бы сбрасываем таймер на ноль
    timerenabled2 = 0;            // выключаем таймер
    digitalWrite(RELAY8, 1);      // ну и выключаем реле
    digitalWrite(RELAY9, 0);      // ну и выключаем реле
    digitalWrite(RELAY10, 1);      // ну и выключаем реле
    digitalWrite(RELAY11, 1);      // ну и выключаем реле
    digitalWrite(RELAY12, 1);      // ну и выключаем реле
    mp3_stop (); 
    delay (100);
 }
////////////////////////////END///////////////////////////////////////
//****************************РУЧНОЕ УПРАВЛЕНИЕ*****************************************
 if(message == "1") 
{
 digitalWrite (RELAY8, LOW);
}
 if(message == "2") 
{
 digitalWrite (RELAY8, HIGH);
}
 if(message == "3") 
{
 digitalWrite (RELAY9, LOW);
}
 if(message == "4") 
{
 digitalWrite (RELAY9, HIGH);
}
 if(message == "5") 
{
 digitalWrite (RELAY10, LOW);
}
 if(message == "6") 
{
 digitalWrite (RELAY10, HIGH);
}
 if(message == "7") 
{
 digitalWrite (RELAY11, LOW);
}
 if(message == "8") 
{
 digitalWrite (RELAY11, HIGH);
}
 if(message == "9") 
{
 digitalWrite (RELAY12, LOW);
}
 if(message == "10") 
{
 digitalWrite (RELAY12, HIGH);
}

  if(message != ""){ // if a message is received...
    Serial.println(message); //...print it out
  }
 
  }

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Даа... Техника в руках дикаря...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

[quote=alex_r61]

Даа... Техника в руках дикаря...

 

/quote]

Тсссс....! Не спугните, а то обидется, уйдёт с форума и народ без бонусов останется.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Птичку дисплей жалко…

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

ЕвгенийП - это ЕвгенийПидор?

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

alex_r61 - если ты ебл@н помочь не смог заткн* свой ебальн*к! хуйсо* ебӘный

nurgazin_d@mail.ru
Offline
Зарегистрирован: 18.12.2017

Если вы голубки  alex_r61--ЕвгенийП  долбитесь - долбитесь дальше, только еб@льник зӘткните

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот и интеллигентность полезла. После второго пузыря

vk007
Offline
Зарегистрирован: 16.06.2015

А вот и обещанных бонусов дождались