Arduino RTC modul with a motor problem

Hello, I have a little problem with this project. In the first case, it turns on exactly, but in the second case, it turns on with a delay, not at the set time.

#include <DS3231.h>

int Relay = 8;

DS3231  rtc(SDA, SCL);
Time t;

const int NumOfTimePoints = 3; // Number of time points managed
const int OnHours[NumOfTimePoints] = {14, 14, 14}; // Array of activation hours
const int OnMins[NumOfTimePoints] = {05, 06, 07}; // Array of activation minutes
const int OnSecs[NumOfTimePoints] = {0x00, 0x10, 0x20}; // Array of activation seconds
const int OffHours[NumOfTimePoints] = {14, 14, 14}; // Array of deactivation hours
const int OffMins[NumOfTimePoints] = {05, 06, 07}; // Array of deactivation minutes
const int OffSecs[NumOfTimePoints] = {0x05, 0x15, 0x25}; // Array of deactivation seconds

bool executed[NumOfTimePoints] = {false}; // Array indicating whether timed events have been executed

void setup() {
  Serial.begin(9600);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
}

void loop() {
  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.print(t.sec);
  Serial.print(" second(s)");
  Serial.println(" ");
  delay (1000);
  
  for (int i = 0; i < NumOfTimePoints; i++) {
    if(t.hour == OnHours[i] && t.min == OnMins[i] && t.sec == OnSecs[i]){
      digitalWrite(Relay,HIGH);
      Serial.println("MOTOR ON");
      executed[i] = true; // Indicates that the event has been executed
    }
    else if(t.hour == OffHours[i] && t.min == OffMins[i] && t.sec == OffSecs[i]){
      digitalWrite(Relay,LOW);
      Serial.println("MOTOR OFF");
      executed[i] = true; // Indicates that the event has been executed
    }
  }

}

You are doing this in a complicated way.

If you calculate secondsOfDay as

secondsOfDay = t.hour * 3600 + t.min * 60 + t.sec;

you simply compare the actual secondsOfDay with the point in time as
secondsOfDayOn
secondsOfDayOff

1 Like

Agree.
And I'd like to note also that "executed[i]" is always set to "true"...

You are defining the seconds as hexadecimal numbers.

0x is the indicator for hexadecimal numbers

As the ontimes are pretty short just a few seconds is this for testing or for the real application?

1 Like

Here is a code-version with secondsOfday
I do not have your DS3231.h-library and there is no comment saying which one of the dozens DS3231.h-libraries it is.

This means I can't compile your code
still here it is

#include <DS3231.h>
#include <time.h>

unsigned long MyTestTimer = 0;  // Timer-variables MUST be of type unsigned long
const byte    OnBoard_LED = 13; // onboard-LED uno, mega

const byte Relay_pin = 8;

DS3231  rtc (SDA, SCL);
Time t;

const byte NumOfTimePoints = 3;

const unsigned long OnSecsOfDay[NumOfTimePoints] = {
  (14UL * 3600 + 5 * 60 +  0),
  (14UL * 3600 + 6 * 60 + 10),
  (14UL * 3600 + 7 * 60 + 20)
};

const unsigned long OffSecsOfDay[NumOfTimePoints] = {
  (14UL * 3600 + 5 * 60 +  5),
  (14UL * 3600 + 6 * 60 + 15),
  (14UL * 3600 + 7 * 60 + 25)
};

unsigned long secondsOfDay;
/*
  const int OnHours[NumOfTimePoints] = {14, 14, 14}; // Array of activation hours
  const int OnMins[NumOfTimePoints] = {05, 06, 07}; // Array of activation minutes
  const int OnSecs[NumOfTimePoints] = {0x00, 0x10, 0x20}; // Array of activation seconds
  const int OffHours[NumOfTimePoints] = {14, 14, 14}; // Array of deactivation hours
  const int OffMins[NumOfTimePoints] = {05, 06, 07}; // Array of deactivation minutes
  const int OffSecs[NumOfTimePoints] = {0x05, 0x15, 0x25}; // Array of deactivation seconds
*/


bool executedOn[NumOfTimePoints]  = {false, false, false}; // Array indicating whether timed events have been executed
bool executedOff[NumOfTimePoints] = {false, false, false}; // Array indicating whether timed events have been executed


void setup() {
  Serial.begin(115200);
  Serial.println("Setup-Start");
  PrintFileNameDateTime();

  rtc.begin();
  digitalWrite(Relay_pin, LOW);
  pinMode(Relay_pin, OUTPUT);
}


void loop() {
  BlinkHeartBeatLED(OnBoard_LED, 250); // non-blocking blinking

  // non-blocking timing
  // check if 1000 milliseconds of time have passed by
  if ( TimePeriodIsOver(MyTestTimer, 1000) ) {
    // when REALLY 1000 milliseconds of time HAVE passed by
    // execute code below
    //t = rtc.getTime();
    t = rtc.getDateTime();
    
    Serial.print(t.hour);
    Serial.print(" hour(s), ");
    Serial.print(t.min);
    Serial.print(" minute(s)");
    Serial.print(t.sec);
    Serial.print(" second(s)");
    Serial.println();

    secondsOfDay = t.hour * 3600UL + t.min * 60 + t.sec;
    // delay (1000); // no blocking delay needed
  }

  for (int i = 0; i < NumOfTimePoints; i++) {
    if (secondsOfDay >= OnSecsOfDay[i] ) {
      digitalWrite(Relay_pin, HIGH);
      Serial.println("MOTOR ON");
      executedOn[i]  = true; // Indicates that the event has been executed
      executedOff[i] = false; // Indicates that the event has been executed
    }

    if (secondsOfDay >= OffSecsOfDay[i] ) {
      digitalWrite(Relay_pin, LOW);
      Serial.println("MOTOR OFF");
      executedOn[i]  = false; // Indicates that the event has been executed
      executedOff[i] = true; // Indicates that the event has been executed
    }
  }
}


// helper-functions
void PrintFileNameDateTime() {
  Serial.println( F("Code running comes from file ") );
  Serial.println( F(__FILE__) );
  Serial.print( F("  compiled ") );
  Serial.print( F(__DATE__) );
  Serial.print( F(" ") );
  Serial.println( F(__TIME__) );
}


// easy to use helper-function for non-blocking timing
// explanation see here
// https://forum.arduino.cc/t/example-code-for-timing-based-on-millis-easier-to-understand-through-the-use-of-example-numbers-avoiding-delay/974017
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
  unsigned long currentMillis  = millis();
  if ( currentMillis - startOfPeriod >= TimePeriod ) {
    // more time than TimePeriod has elapsed since last time if-condition was true
    startOfPeriod = currentMillis; // a new period starts right here so set new starttime
    return true;
  }
  else return false;            // actual TimePeriod is NOT yet over
}



void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
  static unsigned long MyBlinkTimer;
  pinMode(IO_Pin, OUTPUT);

  if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
    digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
  }
}
1 Like

GitHub - rodan/ds3231: arduino library for DS3231 RTC

The program essence is a clock relay. I insert some hour when the motor turns on and turns off after a few seconds(for example 10 seconds).

I want 5 hour what can manage this program.

Not clear what you want to know.

The code uses SecondsOfDay
starting at 0:00 AM with SecondsOfDay = 0
ending at 23:59:59 ending with 23* 3600 + 59 * 60 + 59 = 86399 seconds and as the clock turns over to 0:00 AM SecondsOfDay becomes 0 again.

This means as long as switching on and switching off again is in the same day you can use any time and any time-intervall starting from 1 second up 86399 seconds and it will work

If you want switching on on
06th April 2024 01:00 AM and switching of 07th April 24 24 5 PM this is over midnight
which would require including the date
As unsigned longs can count up to 2^32-1 = 4.294.967.295

Let's say we use year 2000 as the reference-point in time
These are 8760 hours per year * 3600 seconds per hour * 24 years = 756.864.000 seconds fits easy into an unsigned long

4.294.967.295
  756.864.000  

So adding anything below a year does not exceed the maximum-number

1 Like

Now i understand the code, but have problem code.

Compilation error: exit status 1

Now i have this problem code, but when i write over this part

if ( TimePeriodIsOver(MyTestTimer, 1000) ) {
    // when REALLY 1000 milliseconds of time HAVE passed by
    // execute code below
    //t = rtc.getTime();
    t = rtc.getDateTime();

To this

 if ( TimePeriodIsOver(MyTestTimer, 1000) ) {
    // when REALLY 1000 milliseconds of time HAVE passed by
    // execute code below
    t = rtc.getTime();
    //t = rtc.getDateTime();

And I upload this, then the relay goes crazy and turns on and off several times in a second, you can say in a millisecond.

This is the code I mentioned above.

C:\Users\oxtro\OneDrive\Asztali gép\arduino\Lehel_motor\Lehel_motor.ino: In function 'void loop()':
C:\Users\oxtro\OneDrive\Asztali gép\arduino\Lehel_motor\Lehel_motor.ino:61:13: error: 'class DS3231' has no member named 'getDateTime'; did you mean 'getTime'?

exit status 1

Compilation error: 'class DS3231' has no member named 'getDateTime'; did you mean 'getTime'?
In file included from C:\Users\oxtro\OneDrive\Asztali gép\arduino\Lehel_motor\Lehel_motor.ino:1:0:
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected identifier before numeric constant
 #define SUNDAY  7
                 ^
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected '}' before numeric constant
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected unqualified-id before numeric constant
In file included from C:\Users\oxtro\OneDrive\Asztali gép\arduino\Lehel_motor\Lehel_motor.ino:2:0:
c:\users\oxtro\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\time.h:506:1: error: expected declaration before '}' token
 }
 ^

exit status 1

Compilation error: exit status 1

Sorry for my bad english. And for my mistakes, i am new in the arduino world.

It is not the english. You have to provide detailed information.
as a general rule:

always post your complete sketch


FQBN: arduino:avr:uno
Using board 'uno' from platform in folder: C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core 'arduino' from platform in folder: C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Detecting libraries used...
C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard C:\Users\oxtro\AppData\Local\Temp\arduino\sketches\4BF59FFE07CD513D95B966F8A1870040\sketch\Lehel_motor2.ino.cpp -o nul
Alternatives for DS3231.h: [DS3231@1.1.2]
ResolveLibrary(DS3231.h)
  -> candidates: [DS3231@1.1.2]
C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -IC:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231 C:\Users\oxtro\AppData\Local\Temp\arduino\sketches\4BF59FFE07CD513D95B966F8A1870040\sketch\Lehel_motor2.ino.cpp -o nul
C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -IC:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231 C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231\DS3231.cpp -o nul
Generating function prototypes...
C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -IC:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231 C:\Users\oxtro\AppData\Local\Temp\arduino\sketches\4BF59FFE07CD513D95B966F8A1870040\sketch\Lehel_motor2.ino.cpp -o C:\Users\oxtro\AppData\Local\Temp\941950619\sketch_merged.cpp
C:\Users\oxtro\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\oxtro\AppData\Local\Temp\941950619\sketch_merged.cpp
Compiling sketch...
"C:\\Users\\oxtro\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\oxtro\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\oxtro\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-IC:\\Users\\oxtro\\OneDrive\\Documents\\Arduino\\libraries\\DS3231" "C:\\Users\\oxtro\\AppData\\Local\\Temp\\arduino\\sketches\\4BF59FFE07CD513D95B966F8A1870040\\sketch\\Lehel_motor2.ino.cpp" -o "C:\\Users\\oxtro\\AppData\\Local\\Temp\\arduino\\sketches\\4BF59FFE07CD513D95B966F8A1870040\\sketch\\Lehel_motor2.ino.cpp.o"
In file included from C:\Users\oxtro\OneDrive\Documents\Arduino\Lehel_motor2\Lehel_motor2.ino:1:0:
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected identifier before numeric constant
 #define SUNDAY  7
                 ^
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected '}' before numeric constant
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected unqualified-id before numeric constant
In file included from C:\Users\oxtro\OneDrive\Documents\Arduino\Lehel_motor2\Lehel_motor2.ino:2:0:
c:\users\oxtro\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\time.h:506:1: error: expected declaration before '}' token
 }
 ^

Using library DS3231 at version 1.1.2 in folder: C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231 
exit status 1

Compilation error: exit status 1

If you serach through the compiler-log for "

: error:"

in words double-point space "error" doublepoint
You find the lines that caused thecompiler-error.

In the log you hav posted this are the lines
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/DS3231.h:53:17: error: expected identifier before numeric constant
#define SUNDAY 7
^
C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/
DS3231.h:53:17: error: expected '}' before numeric constant

C:\Users\oxtro\OneDrive\Documents\Arduino\libraries\DS3231/
DS3231.h:53:17: error: expected unqualified-id before numeric constant

c:\users\oxtro\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include
time.h:506:1: error: expected declaration before '}' token

These are very unusual errors
I guess you try to use very old outdated / deprecated versions of the libraries named
DS3231.h
time.h

the compiler-log says you are using an Arduino Uno
Using board 'uno' from platform in folder: C:\Users\oxtro\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Is this correct?
or
do you use a different microcontroller?

I repeat myself:

If you really want help.
Then write a detailed description in your motherlanguage and let do google-translate the translation.

It is REALLY IMPORTANT to have DETAILED information.

Such english like

Does say nothing what the problem is.

So please If you really want help.
Then write a detailed description in your motherlanguage and let do google-translate the translation.

I enter the given code

 #include <DS3231.h>
#include <time.h>

unsigned long MyTestTimer = 0;  // Timer-variables MUST be of type unsigned long
const byte    OnBoard_LED = 13; // onboard-LED uno, mega

const byte Relay_pin = 8;

DS3231  rtc (SDA, SCL);
Time t;

const byte NumOfTimePoints = 3;

const unsigned long OnSecsOfDay[NumOfTimePoints] = {
  (11UL * 3600 + 2 * 60 +  0),
  (11UL * 3600 + 3 * 60 + 10),
  (11UL * 3600 + 4 * 60 + 20)
};

const unsigned long OffSecsOfDay[NumOfTimePoints] = {
  (11UL * 3600 + 2 * 60 +  5),
  (11UL * 3600 + 3 * 60 + 15),
  (11UL * 3600 + 4 * 60 + 25)
};

unsigned long secondsOfDay;
/*
  const int OnHours[NumOfTimePoints] = {14, 14, 14}; // Array of activation hours
  const int OnMins[NumOfTimePoints] = {05, 06, 07}; // Array of activation minutes
  const int OnSecs[NumOfTimePoints] = {0x00, 0x10, 0x20}; // Array of activation seconds
  const int OffHours[NumOfTimePoints] = {14, 14, 14}; // Array of deactivation hours
  const int OffMins[NumOfTimePoints] = {05, 06, 07}; // Array of deactivation minutes
  const int OffSecs[NumOfTimePoints] = {0x05, 0x15, 0x25}; // Array of deactivation seconds
*/


bool executedOn[NumOfTimePoints]  = {false, false, false}; // Array indicating whether timed events have been executed
bool executedOff[NumOfTimePoints] = {false, false, false}; // Array indicating whether timed events have been executed


void setup() {
  Serial.begin(9600);
  Serial.println("Setup-Start");
  PrintFileNameDateTime();

  rtc.begin();
  digitalWrite(Relay_pin, LOW);
  pinMode(Relay_pin, OUTPUT);
}


void loop() {
  BlinkHeartBeatLED(OnBoard_LED, 250); // non-blocking blinking

  // non-blocking timing
  // check if 1000 milliseconds of time have passed by
  if ( TimePeriodIsOver(MyTestTimer, 1000) ) {
    // when REALLY 1000 milliseconds of time HAVE passed by
    // execute code below
    t = rtc.getTime();
    //t = rtc.getDateTime();
    
    Serial.print(t.hour);
    Serial.print(" hour(s), ");
    Serial.print(t.min);
    Serial.print(" minute(s)");
    Serial.print(t.sec);
    Serial.print(" second(s)");
    Serial.println();

    secondsOfDay = t.hour * 3600UL + t.min * 60 + t.sec;
    // delay (1000); // no blocking delay needed
  }

  for (int i = 0; i < NumOfTimePoints; i++) {
    if (secondsOfDay >= OnSecsOfDay[i] ) {
      digitalWrite(Relay_pin, HIGH);
      Serial.println("MOTOR ON");
      executedOn[i]  = true; // Indicates that the event has been executed
      executedOff[i] = false; // Indicates that the event has been executed
    }

    if (secondsOfDay >= OffSecsOfDay[i] ) {
      digitalWrite(Relay_pin, LOW);
      Serial.println("MOTOR OFF");
      executedOn[i]  = false; // Indicates that the event has been executed
      executedOff[i] = true; // Indicates that the event has been executed
    }
  }
}


// helper-functions
void PrintFileNameDateTime() {
  Serial.println( F("Code running comes from file ") );
  Serial.println( F(__FILE__) );
  Serial.print( F("  compiled ") );
  Serial.print( F(__DATE__) );
  Serial.print( F(" ") );
  Serial.println( F(__TIME__) );
}


// easy to use helper-function for non-blocking timing
// explanation see here
// https://forum.arduino.cc/t/example-code-for-timing-based-on-millis-easier-to-understand-through-the-use-of-example-numbers-avoiding-delay/974017
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
  unsigned long currentMillis  = millis();
  if ( currentMillis - startOfPeriod >= TimePeriod ) {
    // more time than TimePeriod has elapsed since last time if-condition was true
    startOfPeriod = currentMillis; // a new period starts right here so set new starttime
    return true;
  }
  else return false;            // actual TimePeriod is NOT yet over
}



void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
  static unsigned long MyBlinkTimer;
  pinMode(IO_Pin, OUTPUT);

  if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
    digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
  }
}

The program is now working, it also turns on at the first value

(11UL * 3600 + 2 * 60 +  0)

However, when it should be turned off, the relay starts clicking very quickly (turns on and off in milliseconds) and does not stop

The Serial monitor:

11 hour(s), 2 minute(s)57 second(s)
MOTOR OFF
MOTOR ON
MOTOR OFF
MOTOR ON
MOTOR OFF
MOTOR ON
MOTOR OFF
MOTOR OFF
MOTOR ON
MOTOR OFF
MOTOR ON
MOTOR OFF
MOTOR ON
MOTOR OFF
11 hour(s), 2 minute(s)58 second(s)

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