Работа с кнопками. В помощь новичку.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Ви таки пытаетесь угадать букву в слове?  С такими вариациями, до миллиса еще как до китаю раком вдоль забора. Начните с изучения синтаксиса. ИМХО.

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

не осилил всю тему.... может кто поздскажет, делал кто управление одной кнопкой на 3 режима... длинное, короткое, и двойное нажатие.Заранее благодарен

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

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

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

qwone пишет:

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

да мне чтобы сэкономить место надо сократить количество кнопок вместо 4-х сделать 3. Значит не судьба, всем спасибо

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

qwone пишет:

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

да мне чтобы сэкономить место надо сократить количество кнопок вместо 4-х сделать 3. Значит не судьба, всем спасибо

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

Xumuk пишет:

да мне чтобы сэкономить место надо сократить количество кнопок вместо 4-х сделать 3. Значит не судьба, всем спасибо

Химик, а вам какое надо место сократить? физическое на панели (кнопки не входят) или место в памяти на код?

Сделать-то одинарное, двойное и длинное - не проблема, только место в памяти это наверняка займет больше, чем код для отдельных кнопок...

А вы в какой области химик :) а то я тоже...

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

b707 пишет:

Химик, а вам какое надо место сократить? физическое на панели (кнопки не входят) или место в памяти на код?

вводные меняются #648: теперь у него луп продолжительностью более 200 миллисекунд и дабл клики не работают. 

 

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

Клапауций 298 пишет:

b707 пишет:

Химик, а вам какое надо место сократить? физическое на панели (кнопки не входят) или место в памяти на код?

вводные меняются #648: теперь у него луп продолжительностью более 200 миллисекунд и дабл клики не работают. 

 

я отказался от велосипеда, делаю через пример кода из этой темы, пытаюсь сделать medium и long нажатия , голову можно сломать с этими дабл кликами=)))

P.S. да для экономии места на панели делаю, места у ардуинки хватает_)))

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

Xumuk пишет:

я отказался от велосипеда, делаю через пример кода из этой темы, пытаюсь сделать medium и long нажатия , голову можно сломать с этими дабл кликами=)))

ну, ты, всё-таки, имей совесть - на тебя народ почти сутки человеко-часов потратил, я тебе рабочий код написал.

теперь иди в тему велосипеда и пиши объяснительную в свободной форме примерно так: я ползатель форума дуино точка ру в связи с семейными обстоятельствами вынужден отказаться от пердложеных мне бездвозмезно консультационных услуг и готового кода в связи с тем, что обнаружил у велосипеда следующие недостатки... далее список недостатков.

О_О

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

Клапауций 298 пишет:

Xumuk пишет:

я отказался от велосипеда, делаю через пример кода из этой темы, пытаюсь сделать medium и long нажатия , голову можно сломать с этими дабл кликами=)))

ну, ты, всё-таки, имей совесть - на тебя народ почти сутки человеко-часов потратил, я тебе рабочий код написал.

теперь иди в тему велосипеда и пиши объяснительную в свободной форме примерно так: я ползатель форума дуино точка ру в связи с семейными обстоятельствами вынужден отказаться от пердложеных мне бездвозмезно консультационных услуг и готового кода в связи с тем, что обнаружил у велосипеда следующие недостатки... далее список недостатков.

О_О

=) мне нужно обновление экрана как-то сделать ,чтобы был один раз за цикл loop?

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

Xumuk пишет:

=) мне нужно обновление экрана как-то сделать ,чтобы был один раз за цикл loop?

откуда я знаю, что тебе нужно? - по велосипеду у тебя сейчас точнопроблем нет, хоть с дабл кликами, хоть без них.

создай свою тему в разделе "Программирование" под названием примерно так "время цикла loop экран(модель экрана) библиотека(версия библиотеки)" опубликуй там свой код и опиши суть проблемы - народ подтянется.

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

Клапауций 298 пишет:

Xumuk пишет:

=) мне нужно обновление экрана как-то сделать ,чтобы был один раз за цикл loop?

откуда я знаю, что тебе нужно? - по велосипеду у тебя сейчас точнопроблем нет, хоть с дабл кликами, хоть без них.

создай свою тему в разделе "Программирование" под названием примерно так "время цикла loop экран(модель экрана) библиотека(версия библиотеки)" опубликуй там свой код и опиши суть проблемы - народ подтянется.

понял, спасибо

ELITE
Offline
Зарегистрирован: 11.01.2018

зачем тебе экран обновлять 1 раз за цикл?

обновляй 25 раз в секунду - выше вообще бред....

//и да с кнопками - там ничего сложного нет, я себе сделал по таймеру отсчет и по 2 переменных булевых для запоминаний, итого номально работает короткое (0.1с) среднее (1с) и длиное (10с) нажатие (время можно любое для любой задать

const int interval4 = 99; // таймер 4 - таймер кнопок
int BTN[8] = {2,3,4,5,6,7,8,13};/*пины кнопок - у меня их 8*/
bool btn_b[8]={0,0,0,0,0,0,0,0};/*переменная для запоминания событий нажатия кнопок*/
bool stb[12] = {0,0,0,0,0,0,0,0,0,0,0,0};/*временный статус кнопок*/
int btn_timer[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; /*время нажатия кнопки*/

void setup() {
/*кнопки*/
 for (int i = 0; i < 8; i++) {pinMode(BTN[i], INPUT); digitalWrite(BTN[i], HIGH);} 
  Serial.begin(9600);
}
bool button[12]; // кнопки - это уже которые действовать в коде будут - программные


void loop() {
  tm = millis(); //текущий таймер
//  Serial.println(tm);
  tm1 = tm-timer1; /*время таймера 1*/ /*  if(tm1>interval1)  {        Serial.println(tm1);    timer1=tm;  }*/
  tm2 = tm-timer2; /*время таймера 2*/
  tm3 = tm-timer3;
  tm4 = tm-timer4;
/*--------------- кнопки физические ---------------*/
 button[0] =0;    /* 0 - тумблер ---     */
 button[1] =0;    /* 1 - тумблер +++     */
 button[2] =0;    /* 2 - СБРОС           */
 button[3] =0;    /* 3 -                 */
 button[4] =0;    /* 4 - ОК              */
 button[5] =0;    /* 5 - РЕЖИМ           */
 button[6] =0;    /* 6 - /с фиксатором/  */
 button[7] =0;    /* 7 - датчик оборотов */  
 /*--------------- кнопки виртуальные ---------------*/
 button[8] =0;    /* 8  -  +10            */  
 button[9] =0;    /* 9  -  +100           */
 button[10]=0;    /* 10 -  короткий сброс (1сек)     */ 
 button[11]=0;    /* 11 -  полный сброс (5сек)       */
 /*--------------------------------------------------*/

for (int i = 0; i < 8; i++) {  btn_b[i]=!digitalRead(BTN[i]);   }   /*опрос физических кнопок*/

/*кнопки с фиксацией нажатия (вкл/выкл - типа тумблеров - где она или нажата или нет)*/
if(btn_b[0]){button[0]=1;}else{button[0]=0;};   // ---
/*кнопки без фиксации (факт нажатия) - зафиктирует срабатывание и отпустит кнопку, но если кнопка нажата остается - повторного срабатывания не будет*/
if(btn_b[7]){ if(!stb[7]){stb[7]=1; button[7]=1; }; }else{ stb[7]=0; };    // датчик оборотов
/*кнопка с запоминанием статуса - триггерные - тоесть первое нажатие включит - второе выключит*/
if(btn_b[4]){ if(!stb[4]){stb[4]=1; if(!button[4]){button[4]=1;}else{button[4]=0;} }; }else{ stb[4]=0; }; /*кнопка ОК*/
/*таймерные кнопки*/
if(btn_b[5]){ if(!stb[5]){stb[5]=1; button[5]=1; }; }else{ stb[5]=0; btn_timer[5]=0; };      // режимы

if(tm4 > interval4) {  timer4=tm; /*таймер кнопок 10ms*/
  if(btn_b[5]){btn_timer[5]++;  /* режим калибровки 8 секунд, режим протого нажатия 0.1с*/
                if(btn_timer[5]>=2){  /*простое нажатие чере 0.1с */                
                     if(!stb[9]){stb[9]=1; menu++;if(menu==5){menu=1;} }  
                }else{stb[9]=0;}                
                if(btn_timer[5]>=80){ btn_timer[5]=80;      /*через 8 секунд будет считать сдинным*/          
                    if(!stb[8]){stb[8]=1; if(!settings){settings=1;}else{settings=0;}; }   
                }else{stb[8]=0;}  
                if(btn_timer[5]>=10){ menu=0;}  /*а через 1 секунду - среднее*/ //отображение на экране полосы ожидания режима калибровки
                                               
  }else{btn_timer[5]=0;}

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

//и да, код порезан - оставил только для примера по 1 действию с кнопками - поэтому не смотрите на массивы с избыточностью - они всё задейтсвованны )

и да - по таймерной кнопке - я в неё сразу код своих действий оставил - вы же можете подставить туда просто виртуальные кнопки и в дальнейшем проверять их статус по коду программы

ELITE
Offline
Зарегистрирован: 11.01.2018

кстати, я и забыл, что еще и даблклик можно делать :) надо тоже подумать, может и себе допишу.. тока что им делать пока не придумалось :)

а логика даблклика проста - при клике запоминать время (millis()
а при втором клике сравнивать его с запомненым и ЕСЛИ оно меньше Х (заданного например 500мс) - то считать, что был даблклик (выполнять заданный код), ИНАЧЕ опять запоминать текущее время (millis())

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

ELITE пишет:

обновляй 25 раз в секунду - выше вообще бред....

почему 25-ть, а не 24?

откуда ты, вообще, знаешь, что у него происходит - я же запретил гадание на хрустальных шарах под страхом отлучения от Церкви Святаго Электричества и расстрела из катушки Тесла?

ELITE
Offline
Зарегистрирован: 11.01.2018

Клапауций 298 пишет:

ELITE пишет:

обновляй 25 раз в секунду - выше вообще бред....

почему 25-ть, а не 24?

откуда ты, вообще, знаешь, что у него происходит - я же запретил гадание на хрустальных шарах под страхом отлучения от Церкви Святаго Электричества и расстрела из катушки Тесла?

в СССР было 25 - и это не спотолка взяли! - значит так оно правильно!

а 24 - это буржуйские

да и на деле выше 15 глаз уже почти не видит

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

ELITE пишет:

в СССР было 25 - и это не спотолка взяли! - значит так оно правильно!

ты - совкодрочер?

как же так вышло, что СССР с правильными 25 низвергнулся в АдЪ ?

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

ELITE пишет:

зачем тебе экран обновлять 1 раз за цикл?

обновляй 25 раз в секунду - выше вообще бред....

 

спасибо большое помогло обновлять один раз в 25 секунд, велосипед начал ехать=)))

andycat
andycat аватар
Онлайн
Зарегистрирован: 07.09.2017

Xumuk пишет:

ELITE пишет:

зачем тебе экран обновлять 1 раз за цикл?

обновляй 25 раз в секунду - выше вообще бред....

 

спасибо большое помогло обновлять один раз в 25 секунд, велосипед начал ехать=)))

Это шутка?
- ещё в обед же написано было что бессмысленно и вредно часто обновлять. Зачем 25 раз в секунду?

Обновлять вообще надо когда меняется информация на экране, тогда и не только велосипед поедет.

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

andycat пишет:
Xumuk пишет:

ELITE пишет:

зачем тебе экран обновлять 1 раз за цикл?

обновляй 25 раз в секунду - выше вообще бред....

 

спасибо большое помогло обновлять один раз в 25 секунд, велосипед начал ехать=)))

Это шутка? - ещё в обед же написано было что бессмысленно и вредно часто обновлять. Зачем 25 раз в секунду? Обновлять вообще надо когда меняется информация на экране, тогда и не только велосипед поедет.

у меня он 1 раз за цикл лупа обновлялся

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

andycat пишет:
Зачем 25 раз в секунду?

Обновлять вообще надо когда меняется информация на экране, тогда и не только велосипед поедет.

а, если меняется чаще, чем 25 раз в секунду, то что делать?

*откуда вы все знаете, что ему нужно делать, если не видели его кода?

andycat
andycat аватар
Онлайн
Зарегистрирован: 07.09.2017

Клапауций 298 пишет:

andycat пишет:
Зачем 25 раз в секунду?

Обновлять вообще надо когда меняется информация на экране, тогда и не только велосипед поедет.

а, если меняется чаще, чем 25 раз в секунду, то что делать?

*откуда вы все знаете, что ему нужно делать, если не видели его кода?

Согласен, был не прав, 

Но любопытно что там можно обновлять так часто

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

andycat пишет:

Но любопытно что там можно обновлять так часто

где "там"? отож. не знаем мы, что там подключено.

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

ну рас так инетересно, то там все достаточно примитивно))) вольтметр=)))+прозвонка + генератор меандра 1гц

Xumuk
Xumuk аватар
Онлайн
Зарегистрирован: 03.03.2016

Xumuk пишет:

ну рас так инетересно, то там все достаточно примитивно))) вольтметр=)))+прозвонка + генератор меандра 1гц

п.с. забегая вперед отвечу сразу " делаев нету" все сделано на mils

пардон не туда нажал и процитировал самого себя)

Клапауций 298
Клапауций 298 аватар
Offline
Зарегистрирован: 25.01.2018

bwn пишет:

Опять торпедируют, а ты нам нужен.

DetSimen пишет:

Да. Ты единственный среди нас, как сказали, кто очень добрый, чуткий и отзывчивый к новичкам.  Я аш всплакнул. Жалка будет, када тебя опять на 10 суток за хулиганство закроют. 

да, ладно - нафик я вам такой буду нужен. причинно-следственные связи нужно правильно воспринимать.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Andrew.vodny пишет:

нажимаю на кнопку реле срабатывает , отжимаю реле выключается.

а нужно при нажатие что бы включалось , при повторном нажатие выключалось

Вот Вам для одной кнопки. Остальные я думаю сделаете по аналогии

#define BUTTON1_PIN 2
#define RELAY1_PIN 3
boolean blStatus1 = false;                     //логический флаг предыдущего состояния реле включено/выключено. По умолчанию при старте программы выключено
bool temp_kn1;

void setup() {
  // инициализируем подключения
  pinMode(BUTTON1_PIN, INPUT);                 //задаем пин 2 как вход кнопки
  pinMode(RELAY1_PIN, OUTPUT);                 //задаем пин 3 как выход на реле
}
void loop() {
  // основная программа. Разовое нажатие на кнопку будет включать или отключать реле без удержания кнопки
  if (digitalRead(BUTTON1_PIN) == HIGH && !temp_kn1) {   //проверяем, нажата ли кнопка (если на 2-м пине есть сигнал)
    temp_kn1 = 1;
    blStatus1 = !blStatus1;                 //меняем логический флаг на противоположный от установленного предыдущим нажатием
    digitalWrite(RELAY1_PIN, blStatus1);     //меняем состояние выхода соответственно логическому флагу
    delay (50);
  }
  else if (digitalRead(BUTTON1_PIN) == 0 && temp_kn1)temp_kn1 = 0;


  // Serial.println(blStatus);               //выводим состояние реле в серийный порт
}

 

Andrew.vodny
Andrew.vodny аватар
Offline
Зарегистрирован: 02.02.2018
#define BUTTON2_PIN 2
#define RELAY2_PIN 3
boolean blStatus2 = true;      //логический флаг предыдущего состояния реле включено/выключено. По умолчанию при старте программы выключено
void setup() {
  // инициализируем подключения
  pinMode(BUTTON2_PIN, INPUT);     //задаем пин 2 как вход кнопки
  pinMode(RELAY2_PIN, OUTPUT);     //задаем пин 3 как выход на реле
}
void loop() {
if (digitalRead(BUTTON2_PIN)==HIGH){  //если кнопка нажата 
 blStatus2 = !blStatus2;        // инвертируем значение
 digitalWrite(RELAY2_PIN, blStatus2); // пишем инвертированное значение в порт
 delay (5000);   
    }
}

 вот , дотрагиваюсь до кнопки реле включается , работает 5 сек и выключается , при этом сенсор приходитсья 0,2 сек подержать

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А скопировать код с поста №1472 и проверить  НЕ!

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

Andrew.vodny пишет:
нажимаю на кнопку реле срабатывает , отжимаю реле выключается.а нужно при нажатие что бы включалось , при повторном нажатие выключалось
Ну если вам нужны "шашечки" то это .

/**/
unsigned long mill;// переменная для millis()
typedef void (*pDo)() ;// тип -функция обработчик
//------Cl_Led----------------------
// класс светодиод
class Cl_Led {
  protected:
    const byte pin;
    byte state; //0 выкл/ 1 вкл
    /*установить в состояние*/
    void stand(byte state_) {
      state = state_;
      switch (state) {
        case 0: // выкл
          digitalWrite(pin, LOW);
          break;
        case 1: // вкл
          digitalWrite(pin, HIGH);
          break;
      }
    }
  public:
    /*конструктор*/
    Cl_Led(byte pin_): pin(pin_) {}
    /*инициализация-вставить в setup()*/
    void init() {
      pinMode(pin, OUTPUT);
      OFF();
    }
    /*работа-вставить в loop()*/
    void run() {
    }
    /*включить*/
    void ON() {
      stand(1);
    }
    /*выключить*/
    void OFF() {
      stand(0);
    }
    /*переключить*/
    void invert() {
      if (state) stand(0);
      else stand(1);
    }
};
//------Cl_Btn----------------------
// класс кнопка
class Cl_Btn {
  protected:
    const byte pin;
    pDo Do;//обработчик
    bool bounce = 0;
    bool btn = 1, oldBtn;
    unsigned long past;
  public:
    /*конструктор*/
    Cl_Btn(byte pin_, pDo Do_): pin(pin_), Do(Do_) {}
    /*инициализация-вставить в setup()*/
    void init() {
      pinMode(pin, INPUT_PULLUP);
    }
    /*работа-вставить в loop()*/
    void run() {
      bool newBtn = digitalRead(pin);
      if (!bounce && newBtn != btn) {
        bounce = 1;
        past = mill;
      }
      if (bounce && mill - past >= 10) {
        bounce = 0 ;
        oldBtn = btn;
        btn = newBtn;
        if (!btn && oldBtn) Do();
      }
    }
};
//-----компоновка----------------------
Cl_Led Led1(/*пин*/13);
Cl_Led Led2(/*пин*/12);
Cl_Led Led3(/*пин*/11);
Cl_Led Led4(/*пин*/10);
void DoBtn1() {
  Led1.invert();
}
void DoBtn2() {
  Led2.invert();
}
void DoBtn3() {
  Led3.invert();
}
void DoBtn4() {
  Led4.invert();
}
Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1);
Cl_Btn Btn2(/*пин*/3,/*обработчик*/DoBtn2);
Cl_Btn Btn3(/*пин*/4,/*обработчик*/DoBtn3);
Cl_Btn Btn4(/*пин*/5,/*обработчик*/DoBtn4);
//-----main----------------------
void setup() {
  Led1.init();
  Led2.init();
  Led3.init();
  Led4.init();
  Btn1.init();
  Btn2.init();
  Btn3.init();
  Btn4.init();
}
void loop() {
  mill = millis();
  Led1.run();
  Led2.run();
  Led3.run();
  Led4.run();
  Btn1.run();
  Btn2.run();
  Btn3.run();
  Btn4.run();
}

/*Скетч использует 1446 байт (4%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 61 байт (2%) динамической памяти, оставляя 1987 байт для локальных переменных. Максимум: 2048 байт.
*/

А если просто повисеть на форуме. То читайте форум.

bwn
Онлайн
Зарегистрирован: 25.08.2014

АХТУНГ, прошу всех подписанных и заинтересованных в теме принять участие в опросе и высказать свое мнение по предложениям. Неофитам, не улавливающим разницы между работой с кнопкой и включением реле, просьба не утруждаться.

bwn
Онлайн
Зарегистрирован: 25.08.2014

ВСЕМ НЕОФИТАМ, ЖАЖДУЩИМ ЗАДАТЬ ВОПРОС!
ДАННАЯ ТЕМА НЕ ПРЕДНАЗНАЧЕНА ДЛЯ ОБУЧЕНИЯ ВАС ОСНОВАМ ЯЗЫКА И ПРИЕМАМ СОВОКУПЛЕНИЯ ДВУХ И БОЛЕЕ СКЕТЧЕЙ. В ТЕМЕ РАССМАТРИВАЮТСЯ СПОСОБЫ ПОДКЛЮЧЕНИЯ КНОПОК, ПОДАВЛЕНИЕ ДРЕБЕЗГА, ФИКСАЦИЯ СОБЫТИЙ.
ВСЕ ВЫХОДЯЩЕЕ ЗА ОЗНАЧЕННЫЕ РАМКИ К РАБОТЕ С КНОПКАМИ НЕ ОТНОСИТСЯ И ОБСУЖДАЕТСЯ ВО ВНОВЬ СОЗДАННЫХ ИЛИ ПОДХОДЯЩИХ ТЕМАХ.
ОТВЕТЫ НА ОСНОВНЫЕ ВОПРОСЫ, ПО КНОПКАМ, МОЖНО НАЙТИ НА ПЕРВЫХ ПЯТИ СТРАНИЦАХ ТЕМЫ, УЧИТЕСЬ ЧИТАТЬ.

Можете так же ознакомится с "Сагой окнопках".
Для желающих "быстрого" результата "Титановый велосипед".

Если кто то желает добавить свои способы, варианты, описание библиотек, вэлком.

ЕЩЕ РАЗ ВОПРОШАЮЩИМ: ВСЕ БАНАЛЬНЫЕ ВОПРОСЫ УДАЛЯЮТСЯ БЕЗ ОБСУЖДЕНИЯ.

P/S если кто то считает, что его права нарушены, вэлком в предыдущий пост.

P/P/S ЕЩЕ РАЗ, КТО ЖЕЛАЕТ ЗАЩИТИТЬ СВОИ ПРАВА И СВОБОДЫ, ССЫЛКА В ПРЕДЫДУЩЕМ ПОСТЕ. ТАМ КРОМЕ ХАМСТВА И ПОЛИТОТЫ НИЧЕГО НЕ УБИРАЮ.