Помогите с кодом

TynuK
Offline
Зарегистрирован: 05.02.2017

а на что тогда надо заменить чтоб в формате 2 цифр было?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

TynuK почитай, может поможет

TynuK
Offline
Зарегистрирован: 05.02.2017

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

TynuK
Offline
Зарегистрирован: 05.02.2017

Все готово теперь работает, вот код может кому пригодится

#include <EEPROM.h> // для записи во внутреннию память
// датчики температуры
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8 // подключаем ds18b20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);// стартуем датчик температуры
//ЧАСЫ
#include <RTC.h>
RTC   time;
//IR-приемник
#include <IRremote.h>
#define RECV_PIN 11
uint32_t val; // для обнуления
IRrecv irrecv(RECV_PIN);
decode_results results;
// Библиотека работы с экраном
#include <Wire.h>
#include <LCD_1602_RUS.h>
LCD_1602_RUS lcd(0x27, 20, 4);
// порт включения сигнала аварии
#define alarm 10
//кнопка на перемешивание
const int mix_button = 7;
//реле насосов на перемешивание
const int mix = 4;
//ПИНЫ дальномеров
const int Trig1 = 9;
const int Trig2 = 5;
const int Echo1 = 3;
const int Echo2 = 6;
//обьявим переменные для дальномеров
unsigned int time_us1 = 0;
unsigned int time_us2 = 0;
unsigned int distance_sm1 = 0;
unsigned int distance_sm2 = 0;
//переменные для пересчета в литры
int litr1;
int litr2;
//подключаем датчи газа mq9
#define MQ_PIN A0
float mqValue;// переменная для хранения значения, полученного с датчика MQ9
float ch4; // переменная для хранения уровня газа в процентах
//
boolean mix_status = false; // состояние перемешивания
int mix_count = 0; // количество циклов перемешивания
long previousMillis = 0; // стек переменной времени
//  Переменные для меню
int ch4_volume = 10; // значение датчика утечек метана
int mix_period = 1; // интервал между перемешиваниями, час
int mix_time = 2; // время перемешивания в минутах
int Sound_control = 0;// работа контроллера со звуковым сигналом
int mik = 1200; // звук
int ho;
int mi;
int hor;
int mir;
int h;
int m;
int win;       //Номер экрана меню
unsigned long temp[2]; //Массив для задержек меню
//адреса датчиков ds18b20
DeviceAddress barrel1_temp, barrel2_temp, room_temp;
void setup()
{
  //Установка  часов для запуска-
  time.begin(RTC_DS1302, 2, 13, 12);
  //time.settime(0,27,2,18,3,17,5);  // 0  сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
  // инициализируем экран
  Wire.begin();
  lcd.init();
  lcd.backlight();
  // Приветствие
  lcd.setCursor(1, 1);
  lcd.print("UMIUM BCS-01");
  delay (3000);
  lcd.clear();// очищаем экран
  // перемешивание
  pinMode(mix_button, OUTPUT); // Инициируем порт кнопки перемешивания
  pinMode(mix, OUTPUT); // термореле на включение насосов перемешивания  //настраиваем порты дальномеров
  //дальномеры
  pinMode(Trig1, OUTPUT);
  pinMode(Trig2, OUTPUT);
  pinMode(Echo1, INPUT);
  pinMode(Echo2, INPUT);
  // присвоим соответствующие адреса температурным датчикам
  sensors.getAddress(barrel1_temp, 0);
  sensors.getAddress(barrel2_temp, 2);
  sensors.getAddress(room_temp, 1);
  // установим максимальную точность снятия температуры 12 бит
  sensors.setResolution(barrel1_temp, 12);
  sensors.setResolution(barrel2_temp, 12);
  sensors.setResolution(room_temp, 12);
  //скорость порта
  Serial.begin(9600);
  //пульт
  irrecv.enableIRIn();
  //запишем в память
  mix_period = EEPROM.read(1); // период перемешивания
  mix_time = EEPROM.read(2); // время перемешивания
  Sound_control = EEPROM.read(3); //звуковой сигнал
  ch4_volume = EEPROM.read(4); // предельное значение датчика утечек газа
  mik = EEPROM.read(5);// звук
}
//+++++++++++++++++++++++Программа управления перемешиванием+++++++
void mix_process(float time_mixing, float period_mixing)
{
  hor = ho + mix_period;
  if (hor > 23) hor = 0; //Ограничиваем значения
  Serial.print(" hor>  ");
  Serial.print(hor);
  Serial.print(" <hor  ");

  if (digitalRead(mix) == LOW)
  {
    ho = time.Hours;
  }

  if (time.Hours == hor && time.minutes == mi) // Включается реле 
  {
    digitalWrite(mix, HIGH);
    mir = mi +  mix_time;
    if (mir > 59) mir = 0; //Ограничиваем значения
  Serial.print(" mir>  ");
  Serial.print(   mir   );
  Serial.print(" <mir  ");
    //выводим время
    lcd.clear();
    lcd.setCursor(0, 0); // отступ первой строки слева 0 .
    lcd.print(time.gettime("H:i:s"));    //  час:минуты:секунды
    lcd.setCursor(10, 0); // отступ
    lcd.print("on ");
   mix_status = true;// статус перемешивания - включено
  }

  if (time.Hours == ho && time.minutes == mir) // Выключатся реле
  {
    digitalWrite(mix, LOW);
    mir = mi -  mix_time;
    lcd.clear();
 mix_count++; // прибавляем счетчик числа процессов перемешивания
  mix_status = false; // статус перемешивания - выключено
  }
  //принудитльное перемешивание
  if (digitalRead(mix_button) == HIGH) {
    digitalWrite(mix, HIGH);// включаем перемешивание
    mix_status = true;// статус перемешивания - включено
    mir = mi +  mix_time;
    lcd.clear();
    lcd.setCursor(0, 0); // отступ первой строки слева 0 .
    lcd.print(time.gettime("H:i:s"));    //  час:минуты:секунды
    lcd.setCursor(10, 0); // отступ
    lcd.print("on ");
  }

  if (time.Hours == ho && time.minutes == mir) // Выключатся реле
  {
    digitalWrite(mix, LOW);
    mir = mi -  mix_time;
    lcd.clear();
  mix_count++; // прибавляем счетчик числа процессов перемешивания
  mix_status = false; // статус перемешивания - выключено
  }
}
//обработкакнопок пульта
byte key() {
  if (irrecv.decode(&results)) {
    val = results.value;   //Сверяем значение из переменной val
    irrecv.resume();
  }
  if (val == 16761405) return 5; //в право
  if (val == 16754775) return 4; //в низ
  if (val == 16736925) return 3; //вверх
  if (val == 16720605) return 2; //в лево
  if (val == 16712445) return 1; // ok для входя в меню,сохранения и выхода
  else  return 0;
}
//меню
//1 экран
void set0() {
  byte pos = 8;
  //Считываем записанные значения таймеров.
  ch4_volume = EEPROM.read(4); //
  lcd.clear();

  while (key() != 1) //Крутим цикл пока не будет Setup
  {
    byte KEY = key(); // читаем состояние кнопок
    val = 0;
    lcd.setCursor(1, 1);
    lcd.print(L"ок/соxранить");
    // выводим инфу
    lcd.setCursor(3, 0);
    lcd.print("CH4  ");
    if (ch4_volume > 0){lcd.print("  ");}
      lcd.setCursor(8, 0);
      lcd.print(ch4_volume);
    lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции

    if (pos == 8 && KEY == 3) ch4_volume++;
    if (ch4_volume > 50) ch4_volume = 1; //Ограничиваем значения
    if (pos == 8 && KEY == 4) ch4_volume--;
    if (ch4_volume < 1) ch4_volume = 50; //Ограничиваем значения
  }// конец цикла
  lcd.clear();
  //Записываем значения
  EEPROM.write(4, ch4_volume);

  lcd.setCursor(0, 0);
  lcd.print(L"соxраняем");
  delay(1500);

}// 2 экран
void set1() {
  byte pos = 3;
  //Считываем записанные значения таймеров.
  mix_period = EEPROM.read(1); //
  mix_time = EEPROM.read(2);
  lcd.clear();

  while (key() != 1) //Крутим цикл пока не будет Setup
  {
    byte KEY = key(); // читаем состояние кнопок
    val = 0;
    lcd.setCursor(1, 1);
    lcd.print(L"ок/соxранить ");
         // выводим инфу
    lcd.setCursor(2, 0);
    if (mix_period < 10) 
    lcd.setCursor(2, 0);
    lcd.print("  ");
    lcd.setCursor(2, 0);
    lcd.print(mix_period);
    lcd.print(":");
    if (mix_time > 0) 
    lcd.print(mix_time);
    lcd.print("  ");

    lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции

    if (pos < 3) pos = 3;
    if (KEY == 5 && pos < 6) pos += 3; // крутим позицию право-лево
    else if (KEY == 2 && pos > 3) pos -= 3;

    else if (pos == 3 && KEY == 3)mix_period++; // крутим значения
     if ( mix_period > 23)  mix_period = 0; //Ограничиваем значения
    
    else if (pos == 3 && KEY == 4) mix_period--;
    if ( mix_period < 0)  mix_period = 23; //Ограничиваем значения
    
    else if (pos == 6 && KEY == 3) mix_time+=5;
    if ( mix_time > 55)  mix_time = 0; //Ограничиваем значения
   
    else if (pos == 6 && KEY == 4) mix_time-=5;   
    if ( mix_time < 0)  mix_time = 55; //Ограничиваем значения
  }// конец цикла
  lcd.noBlink();
  lcd.clear();

  EEPROM.write(1, mix_period);
  EEPROM.write(2, mix_time);
  lcd.setCursor(0, 0);
  lcd.print(L"соxраняем");
  delay(1500);
}
// 3 экран
void set2() {
  byte pos = 0;

  //Считываем время с модуля.
  h = time.Hours;
  m = time.minutes;
  lcd.clear();

  while (key() != 1) //Крутим цикл пока не будет Setup
  {
    byte KEY = key(); // читаем состояние кнопок
    val = 0;
    lcd.setCursor(1, 1);
    lcd.print(L"ок/соxранить");
    lcd.setCursor(0, 0);
    lcd.print(pos / 3, DEC); //Печатаем номер прогр.таймера.

    lcd.setCursor(2, 0);     // выводим инфу
    if (h < 10) lcd.print("0");
    lcd.print(h, DEC);
    lcd.print(":");
    if (m < 10) lcd.print("0");
    lcd.print(m, DEC);

    lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции

    if (pos < 3) pos = 3;
    if (KEY == 5 && pos < 11) pos += 3; // крутим позицию право-лево
    else if (KEY == 2 && pos > 3) pos -= 3;

    else if (pos == 3 && KEY == 3) h++; // крутим значения
    else if (pos == 3 && KEY == 4) h--;
    else if (pos == 6 && KEY == 3) m++;
    else if (pos == 6 && KEY == 4) m--;

    if (h > 23) h = 0;  //Ограничиваем значения
    if (h < 0) h = 23;  //Ограничиваем значения
    if (m > 59) m = 0;
    if (m < 0) m = 59;
  }// конец цикла
  lcd.clear();
  time.settime(0, m, h, -1, -1, -1, -1);
  lcd.print(L"cоxраняем");
  delay(1500);
}
// 4 экран
void set3() {
  byte pos = 7;

  //Считываем записанные значения.
  Sound_control = EEPROM.read(3);
  mik = EEPROM.read(5);

  lcd.clear();
  while (key() != 1) //Крутим цикл пока не будет Setup
  {
    byte KEY = key(); // читаем состояние кнопок
    val = 0;
    lcd.setCursor(1, 3);
    lcd.print(L"ок/соxранить");
    ////////////////////////////
    lcd.setCursor(0, 0);    // выводим инфу
    lcd.print(L"    звук аварии    ");
    if (Sound_control < 2)

      if (pos == 7 && KEY == 3)Sound_control++;
    if (pos == 7 && KEY == 4)Sound_control--;

    lcd.setCursor(pos, 1); // устанавливаем курсор согласно позиции
    if (Sound_control >= 2)Sound_control = 0;
    if (Sound_control >= 1)mik = 1200;
    if (Sound_control >= 1)lcd.print(L"вкл. ");
    if (Sound_control < 0 )Sound_control = 1;
    if (Sound_control <= 0 )mik = 0;
    if (Sound_control <= 0)lcd.print(L"откл.");
    //Serial.println(mik);
  }// конец цикла
  lcd.clear();

  EEPROM.write(3, Sound_control);
  EEPROM.write(5, mik);
  lcd.setCursor(0, 0);
  lcd.print(L"cоxраняем");
  delay(1500);
}///
//_________________________________________________________________
void menu()
{
  //Массив с наименованиями для экрана
  char menuTxt[4][20] = {"CH4_control >>", "mix_period >>>", "set_clokc     >>>", "Sound_control >>"};
  byte pos = 0;
  byte KEY;

  while (1) //Бесконечный цикл
  {
    KEY = 0;
    if (temp[1] < millis()) KEY = key(); //Если прошел интервал, читаем код
    val = 0;
    lcd.setCursor(0, 0);
    lcd.print(pos + 1); //Печатаем номер.
    lcd.print(".");
    lcd.print(menuTxt[pos]); //Печатаем название
    // Уменьшить увеличить + блокировка кнопки
    if (KEY == 3 && pos > 0) {
      pos--;
      temp[1] = millis() + 400;
    }
    if (KEY == 4 && pos < 3) {
      pos++;
      temp[1] = millis() + 400;
    }
    // Сейчас можно перейти на разные подменю.
    if (KEY == 5 && pos == 0) set0();
    if (KEY == 5 && pos == 1) set1();
    if (KEY == 5 && pos == 2) set2();
    if (KEY == 5 && pos == 3) set3();
    //Выход из меню с проверкой и установкой блокировки от возврата
    if (KEY == 1 && temp[0] < millis())
    {
      temp[0] = millis() + 2000;
      lcd.clear();
      break;
    }
  }
}
//_________________________________________________________________
void loop()
{
  //***ВХОД В МЕНЮ и проверка блокировки от возврата.
  byte KEY = key();          //Принимаем код клавиши
  val = 0;
  //Serial.println(KEY,DEC);
  if (KEY == 1 && temp[0] < millis())
  {
    temp[0] = millis() + 2000;
    lcd.clear();
    menu();
  }
  mix_process(mix_time, mix_period);// проверяем, не пора ли перемешивать
  //Если setup идем в меню
  //____________________________________________________________
  digitalWrite(Trig1, HIGH); // Подаем сигнал на выход микроконтроллера
  digitalWrite(Trig1, LOW); // Затем убираем
  time_us1 = pulseIn(Echo1, HIGH);

  digitalWrite(Trig2, HIGH);
  digitalWrite(Trig2, LOW);
  time_us2 = pulseIn(Echo2, HIGH);

  // вызываем на экран информацию
  //выводим время
  lcd.setCursor(0, 0); // отступ первой строки слева 0 .
  lcd.print(time.gettime("H:i:s"));    //  час:минуты:секунды
  // температура помещения
  sensors.requestTemperatures();
  float tem = sensors.getTempC(barrel1_temp);
  lcd.setCursor(0, 1);
  lcd.print(L"В помещении ");
  lcd.print(String(tem, 1));
  lcd.print(L" °");
  lcd.print("C");
  // температура 1 ферментера
  lcd.setCursor(0, 2);
  float fer1 = sensors.getTempC(barrel2_temp);
  lcd.print(String(fer1, 1));
  lcd.print(L" °");
  lcd.print("C");
  // температура 2 ферментера
  lcd.setCursor(0, 3);
  float fer2 = sensors.getTempC(room_temp);
  lcd.print(String(fer2, 1));
  lcd.print(L" °");
  lcd.print("C");
  //обьем ферментеров
  //1 реактор
  distance_sm1 = time_us1 / 58 + 0.8; // Пересчитываем в сантиметры
  litr1 = (70 - distance_sm1) * 14.3;
  //пересчитываем в литры
  //  Serial.println(distance_sm1);
  lcd.setCursor(9, 2);
  lcd.print(litr1);
  lcd.print(L"л.");
  //2 реактор
  distance_sm2 = time_us2 / 58 + 0.8;
  litr2 = (70 - distance_sm2) * 14.3;
  // пересчитыаем в литры
  // Serial.println(distance_sm2);
  lcd.setCursor(9, 3);
  lcd.print(litr2);
  lcd.print(L"л.");
  // выведем показания датчика газа
  //ПЕРЕВОДИМ В ПРОЦЕНТЫ
  mqValue = analogRead(MQ_PIN);
  ch4 = mqValue / 1024 * 100 - 2;
  // Serial.print(ch4);
  lcd.setCursor(10, 0);
  lcd.print("CH4");
  lcd.setCursor(14, 0);
  lcd.print(String(ch4));
  lcd.print("%");
  if (ch4 < ch4_volume) {
  }
  else {
    lcd.clear();// очищаем экран
    lcd.setCursor(1, 1);
    lcd.print(L"CH4 Высокий Уровень");
    lcd.setCursor(2, 2);
    lcd.print(String(ch4));
    lcd.print(" %");
    analogWrite (alarm, mik); // включаем на пьезодинамик
    delay (3000);
    analogWrite (alarm, 0);
    lcd.clear();// очищаем экран
  }
}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Не поможет. Тема началась почти два месяца назад, а ТС как задавал детские вопросы, так и задаёт. Похоже, - не читатель.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

а на что тогда надо заменить чтоб в формате 2 цифр было?

чтобы в формате двух цифр, надо использовать функцию printf но она похоже не реализована

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Ворота пишет:

Не поможет. Тема началась почти два месяца назад, а ТС как задавал детские вопросы, так и задаёт. Похоже, - не читатель.

похоже )))
похоже у ТС с булевой агеброй очень большие проблемы

Ладно дело, ну не задалось у меня с С сразу, лет 30 назад, не лёг на мой мозг так же легко как ASM, осваиваю по мере необходимости

Nitroski
Offline
Зарегистрирован: 19.03.2017

Цитата:
Ну. что-то подобное я и предпо[]лагал. В этой строке написан бред сивой кобылы, но Вы этого не понимаете потому, что не знаете языка, на котором он написан. Точно так же Вы не понимаете, что написано в тех строках, что мы обсуждали раньше. И не надо писать:

Очень жаль, что олдфаги так охотчи до сарказма и заработка на ньюфагах, чем помочь, подсказать и воспитать нового камрада в своих рядах.

 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Nitroski пишет:

Очень жаль, что олдфаги так охотчи до сарказма и заработка на ньюфагах, чем помочь, подсказать и воспитать нового камрада в своих рядах.

Дак это на всех рассейских форумах так. Вместо помащи, тебя каждый рас наровят в авно натыкать. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

DetSimen пишет:

Дак это на всех рассейских форумах так. Вместо помащи, тебя каждый рас наровят в авно натыкать. 

Вот. Не ходите на Расейские Форума. Лучше устройтесь золотарем. У будете различать эту субстанцию на вкус.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

дак я уже 49 лет как эту субстанцию различаю.  И не хожу. 

TynuK
Offline
Зарегистрирован: 05.02.2017

да с булевой алгеброй не просто проблема, я воопще первый раз слышу такое)))

то что я хотел работает да и ладно, а остальное буду осваивать по мере необходимости.

TynuK
Offline
Зарегистрирован: 05.02.2017

когда переключал с 1 назад то должен был переключить на максиму,а это 50, но переключал на 10, а то и вообще не переключал,я зделал так и стало как нужно

 // выводим инфу
    lcd.setCursor(3, 0);
    lcd.print("CH4  ");
    if (ch4_volume > 0) {
      lcd.print("  ");

 

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

Nitroski пишет:

чем помочь, подсказать и воспитать нового камрада в своих рядах.

Попытка помочь была, был дан единственно полезный для ТС совет (см. пост №9). Но ТС проигнорировал совет и даже не понял, что это и есть помощь, т.к. под помощью понимает написание кода вместо него. Такие "камрады" мне как-то совсем не "камрады". А воспитывать их ... так тем и занимаемся.

 

TynuK
Offline
Зарегистрирован: 05.02.2017

интересно и в каком месте была просьба что то делать за кого то?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

да с булевой алгеброй не просто проблема, я воопще первый раз слышу такое)))

то что я хотел работает да и ладно, а остальное буду осваивать по мере необходимости.

Тогда к LOGIKу - это он взял на себя такую смелость выбрав ник

TynuK
Offline
Зарегистрирован: 05.02.2017

самое главное что получается, что то запоминается, и совсем не обязательно "любителю" учить язык на котором это все пишется

Logik
Offline
Зарегистрирован: 05.08.2014

TynuK пишет:

и совсем не обязательно "любителю" учить язык на котором это все пишется

Нету тут логики!

Есть 2 варианта

1. Не учим язык и не пишем на нем

2. Пишем код, значить учим его язык.

Дано и 3-е. Но за бабки;)

TynuK
Offline
Зарегистрирован: 05.02.2017

а это уже кому как удобней

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

самое главное что получается, что то запоминается, и совсем не обязательно "любителю" учить язык на котором это все пишется

хочешь не хочешь а 200 слов выучить придётся

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

TynuK пишет:

а это уже кому как удобней

Так ото ж. Вам удобнее не учить, не знать, и не платить, а когда нужен код - побираться по форумам "Христа ради".  Отсюда и отношение к Вам.

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

Да ладно Вам, накинулись. В принципе почти все он сам разгреб, без воплей о нечутких форумных передастах.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

Да ладно Вам...

Непонятно как ))) сам озвучивает, что с элементарной логикой у него не в ладах, троллит видимо )))

TynuK
Offline
Зарегистрирован: 05.02.2017

вы видимо не очень внимательны,раз не заметили что я не просил делать за меня что либо

TynuK
Offline
Зарегистрирован: 05.02.2017

извините,но "булевая алгебра" что это? разве логика? если так то простите с логикой у меня все впорядке

TynuK
Offline
Зарегистрирован: 05.02.2017

так ведь проще выучить, чем сидеть и читать в попытках понять просто все перемешается,а когда на практике все запоминается само сабой

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

TynuK пишет:

извините,но "булевая алгебра" что это? разве логика? если так то простите с логикой у меня все впорядке

кратко так и, нельзя сделать конечный автомат не описав его переменные в уравнениях булевой алгебры,

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

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

ua6em пишет:

кратко так и, нельзя сделать конечный автомат не описав его переменные в уравнениях булевой алгебры,

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

О как, век живи, век учись, все равно дураком помрешь.))) Пользоваться, пользовался, еще со времен 155/555 серий. Что это "булевы" только сейчас узнал.((((

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

TynuK, подозреваю, это у Вас биореактор. Если не секрет, то можно фоточки оборудования с пояснениями, ну и личный опыт.

TynuK
Offline
Зарегистрирован: 05.02.2017

во блин тоже впервые слышу))

 

TynuK
Offline
Зарегистрирован: 05.02.2017

да вы правы он самый, можно как с вами связаться?\