Стиль форума обновлен, нажмите Ctrl + F5 (PC), либо Cmd + Shift + R (Mac) для синхронизации

Кнопко-ящик (ButtonBox)

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#1by morganchik » 13.11.2016, 00:41

Видимо страсть ко всякого рода доработкам и устройствам для симрейсинга и не только, подтолкнула меня сделать кнопко-ящик. Пока мне почти хватает кнопок на бороде кпп Logitech G27, но когда-нибудь я всеже перейду на Thrustmaster и вот там то этот кнопко-ящик будет просто необходим. Цели у меня были следующие:
1. Цена устройства должна быть в разумных пределах. (хотя я не сильно экономил, на всяких радио-рынках и интернет магазинах можно купить все дешевле, в китайских магазинах тем паче, но мне не терпелось взяться за работу)
2. Наличие не менее 10-ти кнопок.
3. Устройство должно быть приятно для меня как визуально, так и тактильно.
4. Все это должно иметь возможность как крепиться к кокпиту (которого у меня нет =)), так и просто устойчиво лежать на столе.
5. Устройство должно быть достаточно мобильно, чтобы иметь возможность храниться на краю стола, за мониторами, короче там, где не будет мне мешать.
Покупать подобный девайс я категорически отказался, во-первых хочется сделать самому, во-вторых цены, стартующие с отметки в $100.
Здесь же я хочу вам рассказать и показать как все сделано, ну и некое краткое, но цельное руководство. Так же буду указывать где, почем и что покупал. Никакой рекламы.
Итак поехали.
За основу устройства я взял геймпад. Так как от него нужна была только плата, то выбор пал на самый дешевый без аналоговых стиков, которые ну никак не нужны. Цена вопроса 390 рублей.
Spoiler
Image
Image
Далее все комплектующие я покупал в одном магазине.
Корпус 420 руб. (есть серые, расположение как портретное, так и альбомное). Качество этого корпуса просто восхитительное. Очень качественный пластик, все подогнанно, пластик толщиной в 3мм!
Spoiler
Image
http://www.chipdip.ru/product/g1188b/
Ножки для корпуса 150 руб.
Spoiler
Image
http://www.chipdip.ru/product/sj5003-black-16pcs/
Кнопки 14 шт. 654 руб. На кнопках не экономил от слова вообще.
Spoiler
Image
Многие используют в своих кнопко-ящиках очень симпатичные переключатели типа вот таких,
Spoiler
Image
но я откзался от этой затеи, так как все они достаточно жесткие, что может быть крайне неудобным для использования устройства на столе без крепления.
Соединительные провода. Взял два метра витой пары (4 пары). 68 руб.
Spoiler
Image
Светодиоды 3мм, 12 штук = 84 руб. Брал тусклые, 25 мКд вроде, специально. При включенном свете чтобы не отвлекали (их практически не видно), в темноте чтобы не отвлекали. Красные 1,8мм пришлось заменить на теже 3мм, слишком маленькие.
Spoiler
Image
Все обошлось в 1376 рублей. Больше тысячи - это корпус и кнопки. Так что есть куда экономить.
Процесс изготовления.
Разобрал геймпад (Ботик не расстраивайся). Просверлил на плате те места, от куда планировал брать контакт на кнопки и припаял провода примерно 30 см - это с запасом. Для фиксации "залил" термоклеем.
Spoiler
Image
Image
Image
Распечатал макет для кнопок, наложил на корпус и накернил центры под сверления для кнопок и светодиодов. Для D-Pad использую маленькие синие кнопки и красные светодиоды.
Spoiler
Image
Рассверлил отверстия под кнопки и светодиоды.
Spoiler
Image
Тут стоит упомянуть о том, что под некоторые кнопки необходимы были отверстия в 12мм и 16мм. Так как в шуруповерт как правило входят сверла до 10мм включительно, да и сверла на 16мм у меня нет, купил ступенчатое сверло. Работал с ним впервые и могу сказать однозначно - вещь просто шикарная и почти необходимая в хозяйстве.
Spoiler
Image
Установил кнопки, посадил светодиоды на капельку цианоакрилата (суперклей), припаял контакты к кнопкам.
Spoiler
Image
Распаял выводы от платы геймпада.
Spoiler
Image
Мини гравером (типа Dremel) выбрал углубление для фиксации провода USB на обоих крышках корпуса.
Spoiler
Image
Image
Прикрепил плату к корпусу термоклеем. Всала плата как родная.
Spoiler
Image
Наклил ножки на тыльную сторону корпуса. По три штуки на угол, для усилиния противоскользящего эффекта.
Spoiler
Image
Вот так выглядит устройство в сборе. По мне так очень аккуратно. Сделаной работой доволен. По времени все можно сделать за половину дня, день. Ну и как говорится подписывайтесь, ставьте лайки, комментируйте =)
Spoiler
Image
Image

Очень любопытный факт. Мы с Дэнчиком не сговариваясь начали делать баттон боксы практически в один день. Думаю в ближайшее время он выложит свой buttonbox, там есть на что посмотреть. Сделан он немного иначе и используются там другие компоненты.
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары

Xeno-man M
Avatar
Xeno-man M
Reputation: 706
Real name: Илья
Controller: Logitech G27
Steam ID

#2by Xeno-man » 13.11.2016, 00:48

А ничего так выглядит, хоть сейчас в массовое производство :ninja:
Идентифицирую себя как Chevrolet Camaro Z/28 RS 1968 модельного года

GMTR M
Avatar
GMTR M
Age: 32
Reputation: 1084
Real name: Евгений
Controller: Logitech G27
Location: Пенза
Steam ID

#3by GMTR » 13.11.2016, 00:49

Маньячина! :shock:
ps: а вообще молодец :D

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#4by morganchik » 13.11.2016, 00:50

Xeno-man wrote:А ничего так выглядит, хоть сейчас в массовое производство :ninja:
Отпускная цена никому не понравится :D
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары

бабай M
Avatar
бабай M
Reputation: 524
Real name: Игорь
Controller: Logitech G27
Location: г.Королёв, М.О.
Steam ID YouTube

#5by бабай » 13.11.2016, 01:29

Голь на выдумки хитра!
Только как его к компу подключить? Вернее, как его комп распознает?
И как с Майкрософтом будешь связываться, чтобы дрова написали ? :?

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#6by morganchik » 13.11.2016, 01:31

бабай wrote:Голь на выдумки хитра!
Только как его к компу подключить? Вернее, как его комп распознает?
И как с Майкрософтом будешь связываться, чтобы дрова написали ? :?
Это обычный геймпад, никаких дров не надо.
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары

Eugene Gajkin M
Супермодератор
Супермодератор
Avatar
Eugene Gajkin M
Супермодератор
Супермодератор
Age: 33
Reputation: 845
Real name: Евгений
WMD (CARS 1): Team Member
WMD (CARS 2): Bronze
Controller: Logitech G25
Location: Дедовск
Steam ID Facebook Skype Twitter YouTube

#7by Eugene Gajkin » 13.11.2016, 01:42

morganchik, вот эта штука может джостик заменить
phpBB [media]

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#8by morganchik » 13.11.2016, 02:16

Evgeniy Gaykin, я вкурсе за ардуино, вообще начал собирать buttonbox прочитав эту статью. Но во-первых, программа для данного "сетапа" составляет 354 строки
Spoiler
#include "LedControl.h"
#include <rotary.h>
#include <Keyboard.h>


// PINS for LED
#define DINPIN 10 //PIN to DIN
#define CSPIN 16 //PIN to CS
#define CLKPIN 14 //PIN to CLK

// 1st encoder - for fuel
#define ROTARY_PIN1 3
#define ROTARY_PIN2 2
// 2nd encoder - for next/prev control
#define ROTARY_PIN3 0
#define ROTARY_PIN4 1
// 3rd encoder - for change value
#define ROTARY_PIN5 4
#define ROTARY_PIN6 5
// define to enable weak pullups.
#define ENABLE_PULLUPS


#define NumSwitches 4
#define ShortPressTime 200
#define ShowPressuresSwitchTime 2000

#define FT B00100010 // BOTH FRONT TIRES
#define RT B00010100 // BOTH REAR TYRES
#define WDS B00000001 // WINDSCREEN
#define FRP B01000000 // FAST REPAIR


#define KeysPin1 A3
#define KeysPin2 A2
#define NumAnalogWires 2

int FrontTiresPress=0, RearTiresPress=0;
long TimeTmp;//,TTmpKeys;
boolean ShowPressuresFlag = 0;
boolean ChangeFlag = 0;


struct AnalogKeysStruct {
int PIN;
int AnalogKeyValue;
int PrevAnalogKeyValue;
long TTmpKeys;
};

AnalogKeysStruct buttons[NumAnalogWires] = {
{KeysPin1, 0, 0, 0},
{KeysPin2, 0, 0, 0},
};


Rotary r1 = Rotary(ROTARY_PIN1, ROTARY_PIN2);
Rotary r2 = Rotary(ROTARY_PIN3, ROTARY_PIN4);
Rotary r3 = Rotary(ROTARY_PIN5, ROTARY_PIN6);


volatile unsigned int encoderPos = 0; // a counter for the dial


struct SwitchStates { // struct's def for holding states of our switches
int PIN; // switch's PIN
boolean State;
boolean PrevState;
long TimePressed;
boolean ShortPress;
};

SwitchStates Switches[] = {
{6,false,false,0,false},
{7,false,false,0,false},
{8,false,false,0,false},
{9,false,false,0,false},
};



byte PitCombo,PrevPitCombo = 0;


LedControl lc=LedControl(DINPIN,CLKPIN,CSPIN,1);




void setup() {
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);

for (byte i=0;i<NumSwitches;i++) {
pinMode(Switches[i].PIN, INPUT_PULLUP);
}

pinMode(ROTARY_PIN1, INPUT_PULLUP);
pinMode(ROTARY_PIN2, INPUT_PULLUP);
pinMode(ROTARY_PIN3, INPUT_PULLUP);
pinMode(ROTARY_PIN4, INPUT_PULLUP);
pinMode(ROTARY_PIN5, INPUT_PULLUP);
pinMode(ROTARY_PIN6, INPUT_PULLUP);

Keyboard.begin();

TimeTmp = millis();
}



void loop() {

CheckSwitches(); //check current switches' states and populate structure

ProcessSwitches(); //process switches' structure and show corresponding pictograph

CheckFuelEncoder(); //check position of fuel encoder and show requested number of fuel

CheckControlEncoder(); //check and process control encoder

CheckChangeEncoder(); //check and process change encoder

CheckButtons();

ShowPressures();

}


void ProcessPitCombo(void) {
String StrResult = "#clear";
String tmp;
Keyboard.write('t');
delay(500);
// Keyboard.print("#clear");
// delay (50);
if (FrontTiresPress) {
FrontTiresPress > 0 ? tmp = "+" : tmp = "";
StrResult = String(StrResult + " lf " + tmp + FrontTiresPress + " rf " + tmp + FrontTiresPress);
}
if (RearTiresPress) {
RearTiresPress > 0 ? tmp = "+" : tmp = "";
StrResult = String(StrResult + " lr " + tmp + RearTiresPress + " rr " + tmp + RearTiresPress);
}
if (PitCombo) {
if (PitCombo & FT && !FrontTiresPress) {
StrResult = String(StrResult + " lf rf");
}
if (PitCombo & RT && !RearTiresPress) {
StrResult = String(StrResult + " lr rr");
}
}
if (encoderPos) {
StrResult = String(StrResult + " fuel " + encoderPos);
}
if (PitCombo) {
if (PitCombo & FRP) {
StrResult = String(StrResult + " fr");
}
if (PitCombo & WDS) {
StrResult = String(StrResult + " ws");
}
}

// StrResult = String(StrResult + "$");
Keyboard.print(StrResult);
delay(ShortPressTime);
Keyboard.write(KEY_RETURN);
// delay(ShortPressTime);
}


void ShowPressures(void) {
if ((millis() - TimeTmp) > ShowPressuresSwitchTime) {
TimeTmp = millis();
ShowPressuresFlag = ShowPressuresFlag ^ 1;
}

if ((FrontTiresPress != 0) && (RearTiresPress == FrontTiresPress)) {
ShowNumber(RearTiresPress,4);
lc.setRow(0,7,RT|FT);
return;
}

if (ShowPressuresFlag && FrontTiresPress) {
ShowNumber(FrontTiresPress,4);
lc.setRow(0,7,FT);
ChangeFlag = 0;
return;
}

if (!ShowPressuresFlag && RearTiresPress) {
ShowNumber(RearTiresPress,4);
lc.setRow(0,7,RT);
ChangeFlag = 0;
return;
}

if ((FrontTiresPress == 0) && (RearTiresPress == FrontTiresPress)) {
//ShowNumber(RearTiresPress,4);
lc.setRow(0,7,0);
lc.setRow(0,6,0);
lc.setRow(0,5,0);
lc.setRow(0,4,0);
return;
}
}

void CheckButtons(void) {
for (int i=0;i<NumAnalogWires;i++) {
buttons[i].AnalogKeyValue = analogRead(buttons[i].PIN);

if (buttons[i].AnalogKeyValue>150 && buttons[i].PrevAnalogKeyValue>150 && (millis() - buttons[i].TTmpKeys) > ShortPressTime) {
buttons[i].TTmpKeys = millis();
if (buttons[i].AnalogKeyValue > 600 && buttons[i].PrevAnalogKeyValue > 600) {
if (!i) FrontTiresPress --; ShowPressuresFlag=1;
if (i) Keyboard.write(KEY_ESC);
delay(ShortPressTime);
}
if (buttons[i].AnalogKeyValue > 350 && buttons[i].AnalogKeyValue <= 600 && buttons[i].PrevAnalogKeyValue > 350 && buttons[i].PrevAnalogKeyValue <= 600) {
if (!i) FrontTiresPress ++; ShowPressuresFlag=1;
if (i) Keyboard.write(KEY_TAB);
delay(ShortPressTime);
}
if (buttons[i].AnalogKeyValue > 250 && buttons[i].AnalogKeyValue <= 350 && buttons[i].PrevAnalogKeyValue > 250 && buttons[i].PrevAnalogKeyValue <= 350) {
if (!i) RearTiresPress --; ShowPressuresFlag=0;
if (i) Keyboard.write(0x20);
delay(ShortPressTime);
}
if (buttons[i].AnalogKeyValue > 200 && buttons[i].AnalogKeyValue <= 250 && buttons[i].PrevAnalogKeyValue > 200 && buttons[i].PrevAnalogKeyValue <= 250) {
if (!i) RearTiresPress ++; ShowPressuresFlag=0;
if (i) ProcessPitCombo();
delay(ShortPressTime);
}
if (!i) TimeTmp = millis();
}

if (buttons[i].AnalogKeyValue>150 && buttons[i].PrevAnalogKeyValue<150) {
buttons[i].TTmpKeys = millis();
}

if (buttons[i].AnalogKeyValue != buttons[i].PrevAnalogKeyValue) buttons[i].PrevAnalogKeyValue = buttons[i].AnalogKeyValue;
}
}



void CheckChangeEncoder(void) {
unsigned char result = r3.process();
if (result) {
Keyboard.write(result == DIR_CCW ? KEY_LEFT_ARROW : KEY_RIGHT_ARROW );
}

}


void CheckFuelEncoder(void) {
unsigned char result = r1.process();
if (result) {
if (result == DIR_CCW && encoderPos < 999) encoderPos++ ;
if (result == DIR_CW && encoderPos > 0) encoderPos--;
ShowNumber(encoderPos,0);
}
}

void CheckControlEncoder(void) {
unsigned char result = r2.process();
if (result) {
Keyboard.write(result == DIR_CCW ? KEY_UP_ARROW : KEY_DOWN_ARROW);
}
}

// Shows 3 digit number beginning from _pos position
void ShowNumber (int _encoderPos, byte _pos) {
int tmp;

tmp = abs(_encoderPos);

// if (_encoderPos != 0) {
lc.setDigit(0,_pos,tmp%10,false);
// } else lc.setRow(0,_pos,0);

tmp /= 10;

if (tmp != 0) {
lc.setDigit(0,_pos+1,tmp%10,false);
tmp /= 10; //_encoderPos/100;
if (tmp != 0) {
lc.setDigit(0,_pos+2,tmp%10,false);
if (_encoderPos < 0) lc.setRow(0,_pos+3,WDS);
} else {
lc.setRow(0,_pos+2,0);
if (_encoderPos < 0) lc.setRow(0,_pos+2,WDS);
}
} else {
lc.setRow(0,_pos+1,0);
if (_encoderPos < 0) lc.setRow(0,_pos+1,WDS);
}
}


void ProcessSwitches(void) {
for (byte i=0;i<NumSwitches;i++) {
switch (i) {
case 0:
if (Switches[i].State) PitCombo |= FT; else PitCombo &= ~FT; // switch 0 - request to change front tyres
break;
case 1:
if (Switches[i].State) PitCombo |= RT; else PitCombo &= ~RT; // switch 1 - request to change rear tyres
break;
case 2:
if (Switches[i].State) PitCombo |= WDS; else PitCombo &= ~WDS; // switch 2 - request to clean wildscrean
break;
case 3:
if (Switches[i].State) PitCombo |= FRP; else PitCombo &= ~FRP; // switch 3 - request to make fast repair
}
}

if (PitCombo != PrevPitCombo) {
lc.setRow(0,3,PitCombo);
PrevPitCombo = PitCombo;
}

}

void CheckSwitches(void) {
long CheckTime;

for (byte i=0;i<NumSwitches;i++) {
if (digitalRead(Switches[i].PIN) == LOW) Switches[i].State = true;
else {
Switches[i].State = false;
}
}
}



в коих я вообще не разбираюсь, ну а во-вторых пришлось бы заливать на пекарс отдельную прошивку, на иракинг вторую, на, допустим, РР третью. Если вдруг приспичит освоить эту ардуину, то нет никаких проблем собрать еще один кнопко-ящик. А вообще вместо прошивок можно просто ящик подключать новый =)
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары

Eugene Gajkin M
Супермодератор
Супермодератор
Avatar
Eugene Gajkin M
Супермодератор
Супермодератор
Age: 33
Reputation: 845
Real name: Евгений
WMD (CARS 1): Team Member
WMD (CARS 2): Bronze
Controller: Logitech G25
Location: Дедовск
Steam ID Facebook Skype Twitter YouTube

#9by Eugene Gajkin » 13.11.2016, 02:26

не ты не прав, там загружается одна прошивка, её можно сделать чтобы она как геймпад определялась или как доп клава, и во всех играх будет одинаково определяться
phpBB [media]

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#10by morganchik » 13.11.2016, 02:46

Evgeniy Gaykin, я маленько про другое. В той статье, что я тебе привел в пример. Некоторые кнопки делают определнное действие. К примеру какие то увеличивают или уменьшают давление в шинах, какие то настраивают тактику пит-стопа (менять шины или не менять), переменные резисторы регулируют громкость игры и внутриигрового чата, и все это в иракинге. Т.е. написана прога специально для иракинга. Соответственно для пекарса нужна своя. А что касается геймпада, то у меня он и так как геймпад определяется. Не совсем понимаю о чем ты Жень. :?
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары

D.man M
Администратор
Администратор
Avatar
D.man M
Администратор
Администратор
Age: 32
Reputation: 5395
Real name: Дмитрий
WMD (CARS 1): Manager
WMD (CARS 2): Gold
Платформа: PC
Controller: Thrustmaster TX
Steam ID Skype Twitter YouTube VK Flickr

#11by D.man » 13.11.2016, 09:23

Отлично сделано! Вот что значит руки из правильного места. А я вот заинтересовался Adruino-вариантом. Пойду шерстить Ali в поисках всего необходимого у одного продавца
MB: ASUS Z87-PRO CPU: Intel Core i7-4770 GPU: MSI GeForce GTX1070 RAM: Hynix 16Gb DDR3-1333 OS: Windows 10 Pro x64

RSI M
Avatar
RSI M
Age: 37
Reputation: 399
Real name: Станислав
Controller: Logitech G27
Location: Сургут
Steam ID

#12by RSI » 13.11.2016, 09:32

morganchik, Андрюх где корпус брал, от чего это вообще и как он называется?
Stanislav Repakov

GMTR M
Avatar
GMTR M
Age: 32
Reputation: 1084
Real name: Евгений
Controller: Logitech G27
Location: Пенза
Steam ID

#13by GMTR » 13.11.2016, 11:31

RSI wrote:morganchik, Андрюх где корпус брал, от чего это вообще и как он называется?
morganchik wrote:http://www.chipdip.ru/product/g1188b/
:ninja:

Freid M
Супермодератор
Супермодератор
Avatar
Freid M
Супермодератор
Супермодератор
Age: 31
Reputation: 1914
Real name: Александр
WMD (CARS 1): Junior
WMD (CARS 2): Bronze
Controller: Logitech G27
Location: Великий Новгород
Steam ID Skype

#14by Freid » 13.11.2016, 12:33

Душа перфекциониста ликует!! :good:

Guncha M
Avatar
Guncha M
Age: 41
Reputation: 582
Real name: Гунча
WMD (CARS 1): Full Member
Controller: Thrustmaster T300 RS
Location: Latvia
Steam ID Skype VK

#15by Guncha » 13.11.2016, 13:29

Ай да молодец Андрюха, нет слов! :drinks:

Cake M
Avatar
Cake M
Age: 33
Reputation: 405
Real name: Николай
Controller: Thrustmaster T500 RS
Location: Moscow
Steam ID ICQ Skype VK

#16by Cake » 13.11.2016, 13:30

Неистово плюсую! Всегда завидовал таким самоделкиным, т.к. самому даже лампочку в доме вкрутить лень :)

бабай M
Avatar
бабай M
Reputation: 524
Real name: Игорь
Controller: Logitech G27
Location: г.Королёв, М.О.
Steam ID YouTube

#17by бабай » 13.11.2016, 17:29

morganchik wrote:Evgeniy Gaykin программа для данного "сетапа" составляет 354 строки
Spoiler
#include "LedControl.h"
#include <rotary.h>
#include <Keyboard.h>


// PINS for LED
#define DINPIN 10 //PIN to DIN
#define CSPIN 16 //PIN to CS
#define CLKPIN 14 //PIN to CLK

...
в коих я вообще не разбираюсь
phpBB [media]

HoRnet M
Avatar
HoRnet M
Age: 30
Reputation: 1812
Real name: Александр
Controller: Logitech G27
Location: Jvcr
Steam ID

#18by HoRnet » 13.11.2016, 17:42

Андрюшаааа молооодеец!!! :good:
Круто смотрится!
Тоже всегда завидовал таким ребятам, так как сам ничерта не могу.
MB: ASROCK Z68 Pro3 CPU: i7-2600k.4.5Ghz GPU: Inno3d GTX 1080 RAM: Hyper X 16Gb DDR3-1866 OS: Windows 10 Pro x64

DeNiSoN M
Avatar
DeNiSoN M
Age: 29
Reputation: 401
Real name: Денис
Controller: Thrustmaster TX
Location: Оренбург
Steam ID VK

#19by DeNiSoN » 13.11.2016, 23:36

Intel Core I7 6700K @ 4.5 GHz| MSI Z270 Tomahawk| Zotac GTX 1080 TI | 16gb Corsair Vengeance 4*4 DDR4 3000 Mhz| Thrustmaster TX

morganchik M
Avatar
morganchik M
Age: 36
Reputation: 2205
Real name: Андрей
Controller: Thrustmaster T300 RS
Location: Нижний Новгород
Steam ID Skype YouTube VK

#20by morganchik » 13.11.2016, 23:47

Den246ru, больше фоток давай.
дельта бесполезна за рулём, отвлекающий эффект. карс1- революция, карс2- эволюция. kapkan
ты первый, значит ты капитан. VADIK
Эй, где моя недоношенность, страдание и импотенция? thorax
Довороты по крену появляются при попытках остановить самораскачивание из за чего на руль приходят удары


Return to “Беседка”



Who is online (over the past 5 minutes)

Users browsing this forum: 2 guests