Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2014, 14:53   #11
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
этого мало - я уже ранее писал -да написания программы нужно продумать алгоритм действий. Его ты так и не описал. Допустим у тебя нагреватели включаются и выключаются по температуре. Кнопкой ты принудительно его включаешь - а дальше что? когда автомат снова должен включиться?
Нагреватели включаются и выключаются по температуре. Кнопкой мне надо принудительно его выключить, а затем например через час включить, чтобы он в течении этого часа оставался выключенным независимо от температуры. После того как я его включу кнопкой он должен дальше работать по температуре.
kirex вне форума   Ответить с цитированием
Старый 28.03.2014, 15:55   #12
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

Ну вот например, кнопками включаются и выключаются нагреватели - т.е. после нажатия на кнопку состояние нагревателя меняется на противоположное левая -нагреватель 1, правая -нагреватель 2. Вывод режима на экран. Кнопкой select возвращается автоматический режим и отключается. Аналогично можно сделать и со светом
PHP код:
#include <Wire.h>//Подключаем библиотеку для использования I2C интерфейса с модулем RTC 
#include "RTClib.h"//Подключаем библиотеку для использования модуля часов реального времени RTC

#include <OneWire.h>
#include <DallasTemperature.h>

#include "LiquidCrystal.h" // библиотека экрана
LiquidCrystal lcd(894567);

OneWire  ds(53);  // Подключаем датчик к 53 цифровому пину

int lcd_key     0;
int adc_key_in  0;
int reg=0;// вводим флаг для автоматического (при значении-0) или ручного регулирования -1

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 
adc_key_in analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 142, 328, 504, 741
 // we add approx 50 to those values and check to see if we are close
 
if (adc_key_in 1000) return btnNONE// We make this the 1st option for speed reasons since it will be the most likely result

 
if (adc_key_in 50)   return btnRIGHT;  
 if (
adc_key_in 250)  return btnUP
 if (
adc_key_in 400)  return btnDOWN
 if (
adc_key_in 600)  return btnLEFT
 if (
adc_key_in 850)  return btnSELECT;  
 return 
btnNONE;  // when all others fail, return this...
}


#define PWM_LW_MIN 0 //Если необходим ток покоя на LED - изменить эту константу
#define PWM_LW_MAX 128//Если необходимо ограничить максимальную яркость - уменьшить значение
#define PWM_LW_PIN 11 //Пин порта, где будет ШИМ LW

#define PWM_LR_MIN 0 //Если необходим ток покоя на LED - изменить эту константу
#define PWM_LR_MAX 200//Если необходимо ограничить максимальную яркость - уменьшить значение
#define PWM_LR_PIN 3 //Пин порта, где будет ШИМ LR

#define PWM_LB_MIN 0 //Если необходим ток покоя на LED - изменить эту константу
#define PWM_LB_MAX 235 //Если необходимо ограничить максимальную яркость - уменьшить значение
#define PWM_LB_PIN 12 //Пин порта, где будет ШИМ LB

#define mn 60UL  //Дополнительные константы для удобства
#define hr 3600UL //Отражают соответствующие количества секунд 
#define d 86400UL

int Relay_Off HIGH;
int Relay_On LOW;

RTC_DS1307 RTC;          

long sunrise_start 17*hr+00*mn//Начало восхода в 9 - 45 
long sunrise_duration 3*mn;  //Длительность восхода 30 минут     
long sunset_start 22*hr+00*mn//начало заката в 21-15
long sunset_duration 3*mn//Длительность заката 30 минут 
long moonrise_start 22*hr+00*mn ;//Начало луны в 9 - 45
long moonrise_duration 3*mn;//Длительность восхода
long moonset_start 23*hr+00*mn;//Конец луны в 11
long moonset_duration 3*mn//Длительность заката луны
//********************************************************************************************
void setup(){

Serial.begin(9600);
     
lcd.begin(162); // запускаем библиотеку экрана
  
pinMode(40OUTPUT);  // Включаем кипятильник
  
pinMode(41OUTPUT);
  
digitalWrite(40Relay_On);  
  
digitalWrite(41Relay_On);
  
Wire.begin(); //Инициируем I2C интерфейс
  
RTC.begin();  //Инициирум RTC модуль
  
analogWrite(PWM_LW_PINPWM_LW_MIN); //Пишем в порт минимальное значение 
  
analogWrite(PWM_LR_PINPWM_LR_MIN); 
  
analogWrite(PWM_LB_PINPWM_LB_MIN);
  if (! 
RTC.isrunning()) {
           
Serial.println("RTC is NOT running!");
           
RTC.adjust(DateTime(201471222481));
           }
//RTC.adjust(DateTime(__DATE__, __TIME__));
}   // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//********************************************************************************************
void loop() // ПРОГРАММЫй безусловный ЦИКЛ 
{
  
analogWrite(10100);
  
lcd.setCursor(01);
    
long pwm_LW;
   
long pwm_LR;
  
long pwm_LB
    
DateTime myTime RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла
    
long Day_time myTime.unixtime() % 86400//сохраняем в переменную - время в формате UNIX
 
lcd.setCursor(11,0);
 if(
myTime.hour()<10)lcd.print(0);
 
lcd.print(myTime.hour(),DEC);
 
lcd.print(":"); 
 if(
myTime.minute()<10)lcd.print(0);
 
lcd.print(myTime.minute(),DEC);

//*********************************************************************************************
//           обработка интервала до восхода и после заката
//*********************************************************************************************
    
if ((Day_time<sunrise_start) ||//Если с начала суток меньше чем начало восхода 
        
(Day_time>=sunset_start+sunset_duration)) { //Или больше чем начало заката + длительность
                  
pwm_LW PWM_LW_MIN//Величина для записи в порт равна минимуму  
                  
pwm_LR PWM_LR_MIN;

//*********************************************************************************************
//           обработка интервала восхода 
//*********************************************************************************************
    
}else if ((Day_time>=sunrise_start) && //Если с начала суток больше чем начало восхода
              
(Day_time<sunrise_start+sunrise_duration)){ //И меньше чем начало восхода + длительность 

                  
pwm_LW =  ((Day_time sunrise_start)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration;   //Вычисляем для рассвета величину для записи в порт ШИМ
                  
pwm_LR =  ((Day_time sunrise_start)*(PWM_LR_MAX-PWM_LR_MIN)) / sunrise_duration;

//*********************************************************************************************
//           обработка интервала заката 
//*********************************************************************************************
    
}else if ((Day_time>=sunset_start) && //Если  начала суток больше чем начало заката и меньше чем  
              
(Day_time<sunset_start+sunset_duration)){//начало заката плюс длительность

                  
pwm_LW = ((sunset_start+sunset_duration Day_time)*(PWM_LW_MAX-PWM_LW_MIN)) / sunrise_duration;    //Вычисляем для заката величину для записи в порт ШИМ
                  
pwm_LR = ((sunset_start+sunset_duration Day_time)*(PWM_LR_MAX-PWM_LR_MIN)) / sunrise_duration;
 
//********************************************************************************************
//           обработка интервала от конца рассвета и до начала заката,
//           когда свет должен быть включен на максимальную яркость 
//********************************************************************************************
    
}else {
                  
pwm_LW PWM_LW_MAX//Устанавливаем максимальную величину для записи в порт ШИМ 
                  
pwm_LR PWM_LR_MAX;
    }
    
    
analogWrite(PWM_LW_PINpwm_LW);//Пишем в порт вычисленное значение      
    
analogWrite(PWM_LR_PINpwm_LR);    
   
  
//           обработка интервала до восхода луны и после заката
//*********************************************************************************************
    
if ((Day_time<moonrise_start) || //Если с начала суток меньше чем начало восхода 
        
(Day_time>=moonset_start+moonset_duration)) {//Или больше чем начало заката + длительность
                  
pwm_LB PWM_LB_MIN//Величина для записи в порт равна минимуму  

//*********************************************************************************************
//           обработка интервала восхода луны
//*********************************************************************************************
    
}else if ((Day_time>=moonrise_start) &&//Если с начала суток больше чем начало восхода
              
(Day_time<moonrise_start+moonrise_duration)){ //И меньше чем начало восхода + длительность 

                  
pwm_LB =  ((Day_time moonrise_start)*(PWM_LB_MAX-PWM_LB_MIN)) / moonrise_duration//Вычисляем для рассвета величину для записи в порт ШИМ

//*********************************************************************************************
//           обработка интервала заката луны
//*********************************************************************************************
    
}else if ((Day_time>=moonset_start) &&  //Если  начала суток больше чем начало заката и меньше чем  
              
(Day_time<moonset_start+moonset_duration)){//начало заката плюс длительность

                  
pwm_LB = ((moonset_start+moonset_duration Day_time)*(PWM_LB_MAX-PWM_LB_MIN)) / moonrise_duration;    //Вычисляем для заката величину для записи в порт ШИМ
 
//********************************************************************************************
//           обработка интервала от конца рассвета и до начала заката луны,
//           когда свет должен быть включен на максимальную яркость 
//********************************************************************************************
    
}else {
                  
pwm_LB PWM_LB_MAX;  //Устанавливаем максимальную величину для записи в порт ШИМ 
    
}
    
    
analogWrite(PWM_LB_PINpwm_LB); //Пишем в порт вычисленное значение 
  
byte i;
  
byte type_s;
  
byte data[12];
  
byte addr[8];
  
float celsiusfahrenheit;
  
  
// Ищем алрес датчика
  
if ( !ds.search(addr)) {
    
Serial.println("No more addresses.");
    
Serial.println();
    
ds.reset_search();
    
delay(250);
    return;
  }

  
// Проверяем не было ли помех при передаче
  
if (OneWire::crc8(addr7) != addr[7]) {
      
Serial.println("CRC is not valid!");
      return;
  }
  
Serial.println();
 
  
// Определяем серию датчика
  
switch (addr[0]) {
    case 
0x10:
      
Serial.println("  Chip = DS18S20");  
      
type_s 1;
      break;
    case 
0x28:
      
Serial.println("  Chip = DS18B20");
      
type_s 0;
      break;
    case 
0x22:
      
Serial.println("  Chip = DS1822");
      
type_s 0;
      break;
    default:
      
Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  
ds.reset();            
  
ds.select(addr);       // Выбираем адрес
  
ds.write(0x441);     // Производим замер, в режиме паразитного питания
  
delay(750);    
  
  
ds.reset();
  
ds.select(addr);    
  
ds.write(0xBE);         // Считываем оперативную память датчика

  
for ( 09i++) {           
    
data[i] = ds.read();  // Заполняем массив считанными данными
  
}

  
// Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число
  
unsigned int raw = (data[1] << 8) | data[0];
  
// Переводим температуру в шкалы по Цельсию и Фаренгейту  
  
if (type_s
  {
    
raw raw << 3
  }
  if (
data[7] == 0x10
  {
    
raw = (raw 0xFFF0) + 12 data[6];
  } else {
    
byte cfg =  (data[4] & 0x60);
    if (
cfg == 0x00
      
raw raw << 3
    else if  (
cfg == 0x20
      
raw raw << 2
    else if  (
cfg == 0x40) \
      
raw raw << 1;
  }  
  
  
// Вывод текущего значения температуры на дисплей
  
celsius = (float)raw 16.0;
  
lcd.setCursor(00);
  
lcd.print("T=");
  
lcd.setCursor(20);
  
lcd.print(celsius);
  
  
delay (10);
  
  
celsius =  (float)raw 16.0;
  
fahrenheit celsius 1.8 32.0;
  
Serial.print("Temp = ");
  
Serial.print(celsius);
  
Serial.print(" C, ");
  
Serial.print(fahrenheit);
  
Serial.println(" F");

  if (
reg=0){ // Если регулирование автоматическое -регулируем по температуре
  
lcd.setCursor(131);
  
lcd.print("Avt");
  
// Если температура достигает 28,3 (с погрешностью), отключаем кипятильник Н1
  
if (celsius 28.3)
  {
  
digitalWrite(40Relay_Off); 
  
lcd.setCursor(01);
  
lcd.print("H1-Off");   
  }
  
// Если температура достигает 28,5 (с погрешностью), отключаем кипятильник Н2
  
if (celsius 28.5)
  {
     
digitalWrite(41Relay_Off); 
  
lcd.setCursor(71);
  
lcd.print("H2-Off");
  }
  
// Если температура падает до 28 (с погрешностью), включаем оба кипятильника
  
if (celsius 28.0)
  {
     
digitalWrite(40Relay_On); 
  
lcd.setCursor(01);
  
lcd.print("H1-On ");
       
digitalWrite(41Relay_On); 
  
lcd.setCursor(71);
  
lcd.print("H2-On ");
  }
 else {
lcd.setCursor(131);lcd.print("Hnd");}



lcd_key read_LCD_buttons();  // read the buttons

switch (lcd_key)               // depending on which button was pushed, we perform an action
 
{
   case 
btnRIGHT:
     {
reg=1;
     if(
digitalRead(41)==1)
     {
digitalWrite(41Relay_Off); 
     
lcd.setCursor(71);
     
lcd.print("H2-Off");}
     else
     {
digitalWrite(41Relay_On); 
     
lcd.setCursor(71);
     
lcd.print("H2-On");}
      break;
     }
   case 
btnLEFT:
     {
reg=1;
     if(
digitalRead(40)==1)
     {
digitalWrite(40Relay_Off); 
     
lcd.setCursor(71);
     
lcd.print("H1-Off");}
     else
     {
digitalWrite(40Relay_On); 
     
lcd.setCursor(71);
     
lcd.print("H1-On");}
      break;
     }
   case 
btnUP:
     {
     
lcd.print("UP    ");
     break;
     }
   case 
btnDOWN:
     {
     
lcd.print("DOWN  ");
     break;
     }

     case 
btnSELECT:
     { if(
reg==1){reg=0} else {reg=1};
     break;
     }
   }
}
//------------Конец ЦИКЛА----------------------------- 
Bulatovor вне форума   Ответить с цитированием
Старый 28.03.2014, 17:34   #13
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Большое спасибо за ответ.

Только в этой строчке выдаёт ошибку:

{ if(reg==1){reg=0} else {reg=1};

Вот так без ошибок, но реле не срабатывает. if(reg==1){reg=0;}else {reg=1;}

Последний раз редактировалось kirex; 28.03.2014 в 17:46.
kirex вне форума   Ответить с цитированием
Старый 28.03.2014, 19:01   #14
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

по этой клавише и не должно реле срабатывать - только на экране меняться режим с автомата на ручной, а по кнопкам вправо влево реле срабатывает? А про точки с запятой действительно пропустил
Bulatovor вне форума   Ответить с цитированием
Старый 28.03.2014, 19:33   #15
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
по этой клавише и не должно реле срабатывать - только на экране меняться режим с автомата на ручной, а по кнопкам вправо влево реле срабатывает?
Режим не меняется, по кнопкам вправо влево реле не срабатывает.
kirex вне форума   Ответить с цитированием
Старый 28.03.2014, 23:49   #16
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Акваконтроллер

Цитата:
Извините, а что вы хотели этим сказать?
Вот это { if(reg==1){reg=0} else {reg=1}; и хотел сказать.

Цитата:
После того как я его включу кнопкой он должен дальше работать по температуре.
Цитата:
if((Т < Tвключения) && (переменная == 1))
{
D9_High;

}

else if(переменная == 0)
{
D9_Low;

}
Нажатие на вашу кнопку:

Если (переменная == 0) тогда (переменная = 1) иначе (переменная = 0)

переменная - это флаг состояния.

Ну и проверка на дребезг нужна.

Последний раз редактировалось stD; 29.03.2014 в 00:00.
stD вне форума   Ответить с цитированием
Старый 29.03.2014, 01:06   #17
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Акваконтроллер

И ещё, можно переменную записывать в память, тогда при ресете ваше устройство вернётся в рабочее состояние.

EEPROM.write(0, 1);

Вот тут http://cyber-place.ru/showpost.php?p=11639&postcount=1 у меня в архиве teplica4.rar можно позырить.

Последний раз редактировалось stD; 29.03.2014 в 01:08.
stD вне форума   Ответить с цитированием
Старый 29.03.2014, 03:28   #18
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от mebitek Посмотреть сообщение
Вот это { if(reg==1){reg=0} else {reg=1}; и хотел сказать.



Нажатие на вашу кнопку:

Если (переменная == 0) тогда (переменная = 1) иначе (переменная = 0)

переменная - это флаг состояния.

Ну и проверка на дребезг нужна.
Так ничего и не получается, не работает как надо.
kirex вне форума   Ответить с цитированием
Старый 29.03.2014, 09:54   #19
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1310
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Акваконтроллер

а как надо?
stD вне форума   Ответить с цитированием
Старый 29.03.2014, 10:05   #20
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

А примеры работают? чтоб проверить аппаратную часть
например вот такой
PHP код:
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// select the pins used on the LCD panel
LiquidCrystal lcd(894567);

// define some values used by the panel and buttons
int lcd_key     0;
int adc_key_in  0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 
adc_key_in analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 
if (adc_key_in 1000) return btnNONE// We make this the 1st option for speed reasons since it will be the most likely result
 // For V1.1 us this threshold
 
if (adc_key_in 50)   return btnRIGHT;  
 if (
adc_key_in 250)  return btnUP
 if (
adc_key_in 450)  return btnDOWN
 if (
adc_key_in 650)  return btnLEFT
 if (
adc_key_in 850)  return btnSELECT;  

 
// For V1.0 comment the other threshold and use the one below:
/*
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
*/


 
return btnNONE;  // when all others fail, return this...
}

void setup()
{
 
lcd.begin(162);              // start the library
 
lcd.setCursor(0,0);
 
lcd.print("Push the buttons"); // print a simple message
}
 
void loop()
{
 
lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 
lcd.print(millis()/1000);      // display seconds elapsed since power-up


 
lcd.setCursor(0,1);            // move to the begining of the second line
 
lcd_key read_LCD_buttons();  // read the buttons

 
switch (lcd_key)               // depending on which button was pushed, we perform an action
 
{
   case 
btnRIGHT:
     {
     
lcd.print("RIGHT ");
     break;
     }
   case 
btnLEFT:
     {
     
lcd.print("LEFT   ");
     break;
     }
   case 
btnUP:
     {
     
lcd.print("UP    ");
     break;
     }
   case 
btnDOWN:
     {
     
lcd.print("DOWN  ");
     break;
     }
   case 
btnSELECT:
     {
     
lcd.print("SELECT");
     break;
     }
     case 
btnNONE:
     {
     
lcd.print("NONE  ");
     break;
     }
 }


Bulatovor вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:30. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика