Automatic roller shutter design

Welcome. I'm a very beginner user so please bear with me. I found a project on YT to control the roller blind using the Nextion display with a ready-made code. There are tons of bugs after verification in the IDE. I have a problem with them, what's going on? Best regards




#include <Nextion.h>

#include <DS3231.h>

const int motor_up = 5;
const int motor_down = 6;
int motor_running_time =20000;

unsigned long previousMillis500=0;
unsigned long previousMillis2000=0;
unsigned long previousMillisCooldown=0;
unsigned long previousMillis20000=0;
unsigned long currentMillis=0;
int interval500 = 500;
int interval2000=2000;
int interval20000=20000;
bool up_pressed=0;`Tekst sformatowany`
bool down_pressed=0;
bool up_running=0;
bool down_running=0;
bool auto_running_up=0;
bool auto_running_down=0;
bool cooldown=0;
uint32_t x2val=20;
uint32_t x3val=0;
uint32_t x4val=14;
uint32_t x5val=0;

bool first_time=0;


Time tajm;

DS3231  rtc(SDA, SCL);


NexButton b0=NexButton(0,1,"b0");
NexButton b1=NexButton(0,2,"b1");
NexButton b2=NexButton(0,4,"b2");

NexVariable x2=NexVariable(0,9,"x2");
NexVariable x3=NexVariable(0,10,"x3");
NexVariable x4=NexVariable(0,12,"x4");
NexVariable x5=NexVariable(0,13,"x5");

NexText t1=NexText(0,3,"t1");



  uint32_t hour_up_x2 = 20;
  uint32_t minute_up_x3 =0;
  uint32_t hour_down_x4 = 14;
  uint32_t minute_down_x5 = 0;

NexTouch *nex_listen_list[]={
  &b0,
  &b1,
  &b2,
  NULL};



void b0PopCallback(void *ptr)
{
  up_pressed=1;
  if(up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0)
  {
    digitalWrite(motor_up,HIGH);
    up_running=1;
    Serial.print("b0.pic=");
    Serial.print(16);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    up_pressed=0;
  }
  else if(up_running==1)
  {
    digitalWrite(motor_up,LOW);
    up_running=0;
    Serial.print("b0.pic=");
    Serial.print(12);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    up_pressed=0;
  }
}

void b1PopCallback(void *ptr)
{
  down_pressed=1;
  if(down_running==0 && up_running==0 && auto_running_up==0 && auto_running_down==0)
  {
    digitalWrite(motor_down,HIGH);
    down_running=1;
    Serial.print("b1.pic=");
    Serial.print(15);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    down_pressed=0;
  }
  else if(down_running==1)
  {
    digitalWrite(motor_down,LOW);
    down_running=0;
    Serial.print("b1.pic=");
    Serial.print(14);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    down_pressed=0;
  }
}

void b2PopCallback(void *ptr)
{
 
  x2.getValue(&hour_up_x2);
  x3.getValue(&minute_up_x3);
  x4.getValue(&hour_down_x4);
  x5.getValue(&minute_down_x5);

  x2val=hour_up_x2;
  x3val=minute_up_x3;
  x4val=hour_down_x4;
  x5val=minute_down_x5;
  

}

void setup() {
  // put your setup code here, to run once:
  nexInit();
  Serial.begin(9600);

  delay(500);
  Serial.print("baud=115200");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);

  Serial.end();
  Serial.begin(115200);
 
  
  b0.attachPop(b0PopCallback,&b0);
  b1.attachPop(b1PopCallback,&b1);
  b2.attachPop(b2PopCallback,&b2);
  
  pinMode(motor_up,OUTPUT);
  pinMode(motor_down,OUTPUT);

  
  rtc.begin(); // Initialize the rtc object

  currentMillis=millis();
  previousMillis500=currentMillis;
  previousMillis20000=currentMillis;

  hour_up_x2 = 20;
  minute_up_x3 =0;
  hour_down_x4 = 14;
  minute_down_x5 = 0;

  
  

  //rtc.setTime(20, 19, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(12, 8, 2021);   // Set the date to January 1st, 2014
  //rtc.setDOW(WEDNESDAY);

}

void loop() {
 
  
  nexLoop(nex_listen_list);

  currentMillis = millis();
  if(currentMillis - previousMillis500 >= interval500) 
  {

    previousMillis500 = currentMillis;   
    t1.setText(rtc.getTimeStr());
    
    tajm=rtc.getTime();

    x2.getValue(&x2val);
x3.getValue(&x3val);
x4.getValue(&x4val);
x5.getValue(&x5val);
if(hour_up_x2!=x2val)
{
    Serial.print("x2.pco=");
    Serial.print(52825);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

else if(hour_up_x2==x2val)
{
    Serial.print("x2.pco=");
    Serial.print(65535);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

if(minute_up_x3!=x3val)
{
    Serial.print("x3.pco=");
    Serial.print(52825);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

else if(minute_up_x3==x3val)
{
    Serial.print("x3.pco=");
    Serial.print(65535);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

if(hour_down_x4!=x4val)
{
    Serial.print("x4.pco=");
    Serial.print(52825);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

else if(hour_down_x4==x4val)
{
    Serial.print("x4.pco=");
    Serial.print(65535);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

if(minute_down_x5!=x5val)
{
    Serial.print("x5.pco=");
    Serial.print(52825);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

else if(minute_down_x5==x5val)
{
    Serial.print("x5.pco=");
    Serial.print(65535);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
}

  }


  currentMillis = millis();
  if(currentMillis - previousMillis2000 >= 2000) 
  {

    previousMillis2000 = currentMillis;   


  
    if(tajm.hour==hour_up_x2 && tajm.min==minute_up_x3 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 &&cooldown==0)
    {
      digitalWrite(motor_up,HIGH);
      Serial.print("b0.pic=");
      Serial.print(16);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
      auto_running_up=1;
      previousMillis20000=millis();
      currentMillis=millis();
      cooldown=1;
    }

    if(tajm.hour==hour_down_x4 && tajm.min==minute_down_x5 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 && cooldown==0)
    {
      digitalWrite(motor_down,HIGH);
      Serial.print("b1.pic=");
      Serial.print(15);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
      auto_running_down=1;
      previousMillis20000=millis();
      currentMillis=millis();
      cooldown=1;
    }
    
if(auto_running_up==1)
{
  currentMillis=millis();
  if(currentMillis-previousMillis20000>motor_running_time)
  {
    digitalWrite(motor_up,LOW);
    Serial.print("b0.pic=");
    Serial.print(12);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    auto_running_up=0;
    previousMillis20000=currentMillis;
    previousMillisCooldown=millis();
  }
}

if(auto_running_down==1)
{
  currentMillis=millis();
  if(currentMillis-previousMillis20000>motor_running_time)
  {
    digitalWrite(motor_down,LOW);
    Serial.print("b1.pic=");
    Serial.print(14);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    auto_running_down=0;
    previousMillis20000=currentMillis;
    previousMillisCooldown=millis();
  }
}

currentMillis=millis();
if(currentMillis-previousMillisCooldown>100000)
{
  cooldown=0;
  previousMillisCooldown=millis();
}

}



}

C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:32:1: error: 'Time' does not name a type; did you mean 'time'?
Time tajm;
^~~~
time
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:34:21: error: no matching function for call to 'DS3231::DS3231(const uint8_t&, const uint8_t&)'
DS3231 rtc(SDA, SCL);
^
In file included from C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:3:0:
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:73:3: note: candidate: DS3231::DS3231(TwoWire&)
DS3231(TwoWire & w);
^~~~~~
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:73:3: note: candidate expects 1 argument, 2 provided
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:72:3: note: candidate: DS3231::DS3231()
DS3231();
^~~~~~
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:72:3: note: candidate expects 0 arguments, 2 provided
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate: constexpr DS3231::DS3231(const DS3231&)
class DS3231 {
^~~~~~
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate expects 1 argument, 2 provided
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate: constexpr DS3231::DS3231(DS3231&&)
c:\Users\chudk\OneDrive\Dokumenty\Arduino\libraries\DS3231/DS3231.h:68:7: note: candidate expects 1 argument, 2 provided
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:41:1: error: 'NexVariable' does not name a type; did you mean 'nexSerial'?
NexVariable x2=NexVariable(0,9,"x2");
^~~~~~~~~~~
nexSerial
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:42:1: error: 'NexVariable' does not name a type; did you mean 'nexSerial'?
NexVariable x3=NexVariable(0,10,"x3");
^~~~~~~~~~~
nexSerial
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:43:1: error: 'NexVariable' does not name a type; did you mean 'nexSerial'?
NexVariable x4=NexVariable(0,12,"x4");
^~~~~~~~~~~
nexSerial
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:44:1: error: 'NexVariable' does not name a type; did you mean 'nexSerial'?
NexVariable x5=NexVariable(0,13,"x5");
^~~~~~~~~~~
nexSerial
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino: In function 'void b2PopCallback(void*)':
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:120:3: error: 'x2' was not declared in this scope
x2.getValue(&hour_up_x2);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:120:3: note: suggested alternative: 'b2'
x2.getValue(&hour_up_x2);
^~
b2
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:121:3: error: 'x3' was not declared in this scope
x3.getValue(&minute_up_x3);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:121:3: note: suggested alternative: 'A3'
x3.getValue(&minute_up_x3);
^~
A3
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:122:3: error: 'x4' was not declared in this scope
x4.getValue(&hour_down_x4);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:122:3: note: suggested alternative: 'A4'
x4.getValue(&hour_down_x4);
^~
A4
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:123:3: error: 'x5' was not declared in this scope
x5.getValue(&minute_down_x5);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:123:3: note: suggested alternative: 'A5'
x5.getValue(&minute_down_x5);
^~
A5
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino: In function 'void setup()':
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:156:7: error: 'class DS3231' has no member named 'begin'
rtc.begin(); // Initialize the rtc object
^~~~~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino: In function 'void loop()':
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:186:20: error: 'class DS3231' has no member named 'getTimeStr'; did you mean 'getMinute'?
t1.setText(rtc.getTimeStr());
^~~~~~~~~~
getMinute
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:188:5: error: 'tajm' was not declared in this scope
tajm=rtc.getTime();
^~~~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:188:5: note: suggested alternative: 'tm'
tajm=rtc.getTime();
^~~~
tm
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:188:14: error: 'class DS3231' has no member named 'getTime'; did you mean 'getA1Time'?
tajm=rtc.getTime();
^~~~~~~
getA1Time
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:190:5: error: 'x2' was not declared in this scope
x2.getValue(&x2val);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:190:5: note: suggested alternative: 'b2'
x2.getValue(&x2val);
^~
b2
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:191:1: error: 'x3' was not declared in this scope
x3.getValue(&x3val);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:191:1: note: suggested alternative: 'A3'
x3.getValue(&x3val);
^~
A3
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:192:1: error: 'x4' was not declared in this scope
x4.getValue(&x4val);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:192:1: note: suggested alternative: 'A4'
x4.getValue(&x4val);
^~
A4
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:193:1: error: 'x5' was not declared in this scope
x5.getValue(&x5val);
^~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:193:1: note: suggested alternative: 'A5'
x5.getValue(&x5val);
^~
A5
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:277:8: error: 'tajm' was not declared in this scope
if(tajm.hour==hour_up_x2 && tajm.min==minute_up_x3 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 &&cooldown==0)
^~~~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:277:8: note: suggested alternative: 'tm'
if(tajm.hour==hour_up_x2 && tajm.min==minute_up_x3 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 &&cooldown==0)
^~~~
tm
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:291:8: error: 'tajm' was not declared in this scope
if(tajm.hour==hour_down_x4 && tajm.min==minute_down_x5 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 && cooldown==0)
^~~~
C:\Users\chudk\OneDrive\Dokumenty\Arduino\sketch_curtain1\sketch_curtain1.ino:291:8: note: suggested alternative: 'tm'
if(tajm.hour==hour_down_x4 && tajm.min==minute_down_x5 && up_running==0 && down_running==0 && auto_running_up==0 && auto_running_down==0 && cooldown==0)
^~~~
tm

exit status 1

Compilation error: 'Time' does not name a type; did you mean 'time'?Tekst sformatowany

Welcome to the forum.

Please provide a link. The code is flawed, obvsly, or you've made a cut and paste error of some kind.

If we can go the source perhaps it can be sorted.

The first error woukd suggest a failure to include a library, or that you grabbed the wrong library. The rest is just noise for now, a cascade failure from one misstep.

a7

Here is the link

Home Automation Arduino DIY - Motorized Blinds Shades Controlled with Arduino & Nextion Touchscreen (youtube.com)

Hello @lukaszch - The source code is also (slightly) defective... formatted for the forum... You should try to find the author to make the necessary corrections.

#include <Nextion.h>
#include <DS3231.h>
const int motor_up = 5;
const int motor_down = 6;
int motor_running_time = 20000;
unsigned long previousMillis500 = 0;
unsigned long previousMillis2000 = 0;
unsigned long previousMillisCooldown = 0;
unsigned long previousMillis20000 = 0;
unsigned long currentMillis = 0;
int interval500 = 500;
int interval2000 = 2000;
int interval20000 = 20000;
bool up_pressed = 0;
bool down_pressed = 0;
bool up_running = 0;
bool down_running = 0;
bool auto_running_up = 0;
bool auto_running_down = 0;
bool cooldown = 0;
uint32_t x2val = 20;
uint32_t x3val = 0;
uint32_t x4val = 14;
uint32_t x5val = 0;
bool first_time = 0;
Time tajm;
DS3231  rtc(SDA, SCL);
NexButton b0 = NexButton(0, 1, "b0");
NexButton b1 = NexButton(0, 2, "b1");
NexButton b2 = NexButton(0, 4, "b2");
NexVariable x2 = NexVariable(0, 9, "x2");
NexVariable x3 = NexVariable(0, 10, "x3");
NexVariable x4 = NexVariable(0, 12, "x4");
NexVariable x5 = NexVariable(0, 13, "x5");
NexText t1 = NexText(0, 3, "t1");
uint32_t hour_up_x2 = 20;
uint32_t minute_up_x3 = 0;
uint32_t hour_down_x4 = 14;
uint32_t minute_down_x5 = 0;

NexTouch *nex_listen_list[] = {
  &b0,
  &b1,
  &b2,
  NULL
};

void b0PopCallback(void *ptr)
{
  up_pressed = 1;
  if (up_running == 0 && down_running == 0 && auto_running_up == 0 && auto_running_down == 0)
  {
    digitalWrite(motor_up, HIGH);
    up_running = 1;
    Serial.print("b0.pic=");
    Serial.print(16);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    up_pressed = 0;
  }
  else if (up_running == 1)
  {
    digitalWrite(motor_up, LOW);
    up_running = 0;
    Serial.print("b0.pic=");
    Serial.print(12);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    up_pressed = 0;
  }
}

void b1PopCallback(void *ptr)
{
  down_pressed = 1;
  if (down_running == 0 && up_running == 0 && auto_running_up == 0 && auto_running_down == 0)
  {
    digitalWrite(motor_down, HIGH);
    down_running = 1;
    Serial.print("b1.pic=");
    Serial.print(15);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    down_pressed = 0;
  }
  else if (down_running == 1)
  {
    digitalWrite(motor_down, LOW);
    down_running = 0;
    Serial.print("b1.pic=");
    Serial.print(14);
    Serial.write(0xff);
    Serial.write(0xff);
    Serial.write(0xff);
    down_pressed = 0;
  }
}
void b2PopCallback(void *ptr)
{
  x2.getValue(&hour_up_x2);
  x3.getValue(&minute_up_x3);
  x4.getValue(&hour_down_x4);
  x5.getValue(&minute_down_x5);
  x2val = hour_up_x2;
  x3val = minute_up_x3;
  x4val = hour_down_x4;
  x5val = minute_down_x5;
}

void setup() {
  // put your setup code here, to run once:
  nexInit();
  Serial.begin(9600);
  delay(500);
  Serial.print("baud=115200");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.end();
  Serial.begin(115200);
  b0.attachPop(b0PopCallback, &b0);
  b1.attachPop(b1PopCallback, &b1);
  b2.attachPop(b2PopCallback, &b2);
  pinMode(motor_up, OUTPUT);
  pinMode(motor_down, OUTPUT);
  rtc.begin(); // Initialize the rtc object
  currentMillis = millis();
  previousMillis500 = currentMillis;
  previousMillis20000 = currentMillis;
  hour_up_x2 = 20;
  minute_up_x3 = 0;
  hour_down_x4 = 14;
  minute_down_x5 = 0;
  //rtc.setTime(20, 19, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(12, 8, 2021);   // Set the date to January 1st, 2014
  //rtc.setDOW(WEDNESDAY);
}

void loop() {
  nexLoop(nex_listen_list);
  currentMillis = millis();
  if (currentMillis - previousMillis500 >= interval500)
  {
    previousMillis500 = currentMillis;
    t1.setText(rtc.getTimeStr());
    tajm = rtc.getTime();
    x2.getValue(&x2val);
    x3.getValue(&x3val);
    x4.getValue(&x4val);
    x5.getValue(&x5val);
    if (hour_up_x2 != x2val)
    {
      Serial.print("x2.pco=");
      Serial.print(52825);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    else if (hour_up_x2 == x2val)
    {
      Serial.print("x2.pco=");
      Serial.print(65535);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    if (minute_up_x3 != x3val)
    {
      Serial.print("x3.pco=");
      Serial.print(52825);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    else if (minute_up_x3 == x3val)
    {
      Serial.print("x3.pco=");
      Serial.print(65535);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    if (hour_down_x4 != x4val)
    {
      Serial.print("x4.pco=");
      Serial.print(52825);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    else if (hour_down_x4 == x4val)
    {
      Serial.print("x4.pco=");
      Serial.print(65535);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    if (minute_down_x5 != x5val)
    {
      Serial.print("x5.pco=");
      Serial.print(52825);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
    else if (minute_down_x5 == x5val)
    {
      Serial.print("x5.pco=");
      Serial.print(65535);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
    }
  }
  currentMillis = millis();
  if (currentMillis - previousMillis2000 >= 2000)
  {
    previousMillis2000 = currentMillis;
    if (tajm.hour == hour_up_x2 && tajm.min == minute_up_x3 && up_running == 0 && down_running == 0 && auto_running_up == 0 && auto_running_down == 0 && cooldown == 0)
    {
      digitalWrite(motor_up, HIGH);
      Serial.print("b0.pic=");
      Serial.print(16);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
      auto_running_up = 1;
      previousMillis20000 = millis();
      currentMillis = millis();
      cooldown = 1;
    }
    if (tajm.hour == hour_down_x4 && tajm.min == minute_down_x5 && up_running == 0 && down_running == 0 && auto_running_up == 0 && auto_running_down == 0 && cooldown == 0)
    {
      digitalWrite(motor_down, HIGH);
      Serial.print("b1.pic=");
      Serial.print(15);
      Serial.write(0xff);
      Serial.write(0xff);
      Serial.write(0xff);
      auto_running_down = 1;
      previousMillis20000 = millis();
      currentMillis = millis();
      cooldown = 1;
    }
    if (auto_running_up == 1)
    {
      currentMillis = millis();
      if (currentMillis - previousMillis20000 > motor_running_time)
      {
        digitalWrite(motor_up, LOW);
        Serial.print("b0.pic=");
        Serial.print(12);
        Serial.write(0xff);
        Serial.write(0xff);
        Serial.write(0xff);
        auto_running_up = 0;
        previousMillis20000 = currentMillis;
        previousMillisCooldown = millis();
      }
    }
    if (auto_running_down == 1)
    {
      currentMillis = millis();
      if (currentMillis - previousMillis20000 > motor_running_time)
      {
        digitalWrite(motor_down, LOW);
        Serial.print("b1.pic=");
        Serial.print(14);
        Serial.write(0xff);
        Serial.write(0xff);
        Serial.write(0xff);
        auto_running_down = 0;
        previousMillis20000 = currentMillis;
        previousMillisCooldown = millis();
      }
    }
    currentMillis = millis();
    if (currentMillis - previousMillisCooldown > 100000)
    {
      cooldown = 0;
      previousMillisCooldown = millis();
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.