В изготовлении все вышло очень просто.
Необходимые ингредиенты:
1. Arduino — какая есть;
2. Светодиоды WS2812B (Я использовал кольцо — купил давно, сейчас решил применить);
3. Мод для танков. Мод для моего проекта написал товарищ Kotyarko_O с форума koreanrandom, за что ему отдельное спасибо. В архиве с модом приложены исходники;
4. Приложение для ПК. — в архиве исходники и приложение в папке bin.
Выглядит все это не очень красиво, к монитору приклеил на двухсторонний скотч.
НО! Деталей минимум. За код прошу строго не судить, он кривой косой :) Я программист копипастер :) Кому сильно не понравится, можете переделать под себя красиво и практично.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define NUMPIXELS 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
String ser;
int red = 0;
int green =0;
void setup() {
pixels.begin(); // This initializes the NeoPixel library.
Serial.begin(9600);
while (!Serial) {
; // wait for port to be ready
}
Serial.setTimeout(100);
}
void loop() {
if (Serial.available() > 0)
{
ser = Serial.readString();
if (ser != "end")
{
green = ser.toInt()*2;
red = green-100;
for(int i=0;i<NUMPIXELS;i++)
{
pixels.setPixelColor(i, pixels.Color(red,green,0));
}
pixels.show();
}
else
{
for(int i=0;i<NUMPIXELS;i++)
{
pixels.setPixelColor(i, pixels.Color(0,0,0));
}
pixels.show();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
SerialPort serialPort1 = new SerialPort();
doc.Load(@«C:\World_of_Tanks\res_mods\0.9.17.0.1\scripts\client\gui\mods\mod_ArduinoHP.xml»);
string maxHealth = doc.DocumentElement.ChildNodes[0].InnerText;
string currentHealth = doc.DocumentElement.ChildNodes[1].InnerText;
string healthProgress = doc.DocumentElement.ChildNodes[2].InnerText;
serialPort1.PortName = «COM13»; //задаем имя COM-порта, с которым работает Arduino
serialPort1.Open(); //открываем COM-порт
if (healthProgress != "")
{
serialPort1.Write(healthProgress);
}
else
serialPort1.Write(«end»);
serialPort1.Close(); //закрываем COM-порт
}
Ну вот соответственно и все. Работает простейшим образом. Мод для танков складывает в xml файл всю необходимую информацию, а приложение для ПК в свою очередь читает xml и передает всю информацию ардуине, та в свою очередь управляет цветом.
P.S. Все это можно доработать, доделать, допилить, улучшить… Но уже хочется спать :)
P.P.S Всех с наступающим!
Комментарии (50)
lenz1986
29.12.2016 23:11+2Мдааа… Мне в итоге высказали про срач на столе, про плохое видео… И слили рейтинг.
melchermax
30.12.2016 00:44+3Не переживайте, это местные питекантропы шалят. А статья отличная, после всякого рекламного кала просто праздник какой-то.
MTyrz
31.12.2016 23:42Понял, свой стол я здесь показывать не буду…
Хорошая статья, не переживайте попусту.
Rumlin
30.12.2016 06:47Видео продемонстрировало только два состояния — зеленый и красный. В демках также работает?
lenz1986
30.12.2016 07:47На самом деле светодиод использован RGB. Соответственно цвет можно получить почти любой, но в моем случае в коде этого не реализовано
Rumlin
30.12.2016 11:36как-то мало информативно. Ожидал, что будет «зеленый-желтый-красный» и погаснет при отправке в ангар.
lenz1986
30.12.2016 11:40Видео не полное. Работает именно так как вы говорите. Зеленый — Желтый — Красный, а если выходишь в ангар то гаснет. Просто если снимать полное видео то оно слишком длинное.
Rumlin
30.12.2016 12:56Смонтировать. Особенно если реплеи поддерживаются, то выбрать для проигрывания тот, где потеря хп более заметна по цветам.
maaGames
30.12.2016 10:32Вот забацать что-нибудь похожее для Quake, я б сыграл.)
lenz1986
30.12.2016 10:45Скорее всего возможно, но я в кваку не играю, поэтому точно не скажу, надо смотреть как можно просто и без особых проблем вытащить информацию из игры. Аппаратно без разницы откуда информацию брать. Можете хоть визуализацию музыки сделать.
maaGames
30.12.2016 10:54В электронике я рукожоп.(
Но сделал «светомузыку» на смартфоне, чтобы он микрофоном слушал и в такт музыке подмигивал экраном.lenz1986
30.12.2016 11:03Конкретно в этой реализации знать электронику не надо от слова совсем. Главное паяльник с правильной стороны уметь держать, и осилить спаять 6 проводков, по 3 с каждой стороны. :)
bagdyunov
30.12.2016 10:43+1Можно сделать эмбилайт по рамке монитора, и подсвечивать откуда снаряд прилетел.
lenz1986
30.12.2016 10:46Насчет этой реализации у разработчика мода я спросил, пока жду ответа. Да и для полной реализации надо прикупить ленту из таких светодиодов, а не одно колечко как у меня.
madf
30.12.2016 11:54-4Я что-то уже ничего не понимаю, уровень статей на гиктаймсе скатился уже до такого уровня — жуть.
Народ тупо как живую ленту выплёвывает и всё.
Это я не говорю уже о качестве самого материала/идеи.lenz1986
30.12.2016 12:00+3Пост был выложен просто чтобы разнообразить гиктаймс. Три месяца что я его читаю с перерывами основная масса статей обзоры и красивые теоретические выкладки. Чего то простого интересно и повторяемого уже мало. да не спорю, есть специализированные ресурсы под такие вещи. Но захотелось сюда. Тем более выложено в хаб Diy или сделай сам, который как бы подразумевает наличие подобных статей, а иначе для чего он нужен?
madf
30.12.2016 12:59-3Ну для этого есть ЖЖ или просто соц сети.
Я вот всё "мучился" не выкладывал, считал надо подготовить, аргументировать, интересно придумать, а оказывается можно вот так просто, что-то накидать из средничка. :D
В этом конечно резон есть, не так обидно становится, когда начинают в комментах поливать всякие умники (включая меня).
На счет качества: я конечно понимаю, что всё зависит от взятой основы, но и в этом можно было решить ряд задач, более радикально. А так по существу, какое-то вялое, еле заметное изменение цвета относительно картинки и вообще непонятно относительно чего красит. И надо было как-то особо сильно не лениться и сделать хотя бы на 3 стороны по одному WS… а то эффекта никакого.
lenz1986
30.12.2016 13:14Чисто из практики игры динамику изменения цвета я и так не замечаю. А вот когда меня подбивают и становится все плохо, тогда переход на красный становится очень видим :) А за счет плавности перехода нет рывков. За ночь игры я два раза только видел желтый цвет :) но и то на него внимания не обращал.
lenz1986
30.12.2016 12:04+1А насчет качества идеи и реализации… Ну сделаю я красивую коробочку, оформлю это как реальный продукт, а практический толк от этого? Вероятность того что кто то повторит его в таком виде крайне мала, да и большая часть людей сразу начнут думать… 3D принтер… лазер… а у нас нет… и с такими мыслями проходить дальше. Я и сам точно так же читал подобные статьи. У меня не было доступа ни к чему… Хотелось но возможностей не было. ДА сейчас у меня есть почти весь парк техники, и могу сделать все что угодно. Телефон который в моей старой статье делался изначально из фанеры, обзавелся корпусом из цельного дуба и выглядит как премиальная вещь. Но он один и в единственном экземпляре и никто его не повторит. А подобную вещь, которая собрана на коленке повторить сможет даже тот кто в этом абсолютно не разбирается, приложив минимальное количество усилий и знаний.
melchermax
30.12.2016 13:31+1Телефон который в моей старой статье делался изначально из фанеры, обзавелся корпусом из цельного дуба и выглядит как премиальная вещь.
Фото — в студию!
Sirikid
30.12.2016 13:14Хмм, я бы сделал цвет соответсвующим температуре седалища — прошла минута боя а счет уже 0:5? желтенький; не пробил шотного совка? заоранжевело; ваншотнула арта блайндом на разъезде? полыхает оттенками красного :)
А если серьезно, планируешь делать что-нибудь ещё? Было бы прикольно сделать что-то вроде этого мода, только с ambilight, да и индикаторы попаданий/пробитий можно туда перенести.
lenz1986
30.12.2016 13:18С кодером мода я пообщался, сделать можно все что угодно. Плюс варгейминг это не считает запрещенным модом. Теперь осталось дождаться когда придет лента, сегодня заказал с али. И уже с ней делать полный амбилайт с местами выстрелов, и если получится то еще и с подсветкой земли.
Sirikid
30.12.2016 15:05А пока идет лента можно вместо индикатора HP прикрутить текущий WN8, тоже забавно будет.
Kotyarko_O
30.12.2016 20:58Можно даже переключалку для этого забацать =)
Зашёл в бой — индикатор по оставшейся прочности (по-умолчанию); нажал хот-кей (или, например, менюшка в боевом интерфейсе) — всё переключилось на рейтинг (тот же WN8), а ещё лучше — рейтинг текущей цели.
В общем, идей тут можно народить как китайцев.lenz1986
30.12.2016 21:00Эммм… сударь если это вы :) то Вы можете и реализовать все как надо ) А код потестить эт мы запросто )
foundout
30.12.2016 16:30Это может быть крутым направлением для игр — скажем, в том же WoW на подобную подсветку можно подвесить множество функций, значительно улучшив HCI. Здоровье, которое Вы уже реализовали, вспышки при готовности ключевых способностей, элемент таймера для таймранов (мигание подсветки при подходе времени к концу), индикатор боя — включаем подсветку только при нахождении в бою, выключаем при выходе.
Нравится подход — ничего лишнего, нравится вау-эффект, нравится полезность, идея и статья.
Спасибо, что написали. Надеюсь, Вы будете развивать концепцию и дальше — забегая вперёд, мне такие штуки кажутся интересными и для аудитории массового пользователя :)
andrex77
31.12.2016 08:04лучше сделайте ambilight для настроения жены во время игры в WoT: завелась, закипела(с)
MiDoS
02.01.2017 11:20+1В ноутбуках Alienware это реализовано из коробки, правда не понятно, нужен ли специальный мод, или всю необходимую информацию можно вытащить из игры напрямую. Примерное видео https://www.youtube.com/watch?v=AYPkTo2YIzE
lenz1986
02.01.2017 11:22Там реализовано через ихнее спец приложение, и в самих танках тоже что то добавлено. НО стоят такие ноутбуки мама не горюй. И именно из за них я и захотел себе такую подсветку )
отличие моей реализации в копеечной стоимости и возможности использовать на компьютере )MiDoS
02.01.2017 11:47Совершенно верно, только мне так и не удалось откопать способ и протокол, по которому из танков можно информацию получать. Логитековская клавиатура тоже как-то может на экранчике показывать статы, неужели каждый производитель железа свой костыль делает? Может, кто-нибудь знает как это реализовано?
lenz1986
02.01.2017 12:39А для чего это необходимо? основная масса этих экранчиков и подсветок уже вроде бы разобраны чуть ли не до винтиков, на кого то свободное апи и сдк есть.
Rumlin
02.01.2017 21:01Может спросить автора статьи о GUI WoT Dichkovsky https://habrahabr.ru/company/wargaming/blog/229261/
Zonzen
А можно просто подключить комп к телеку philips с ambilight и искомый получать эффект везде и всегда.
lenz1986
Для этого надо иметь телек с ambilight, а он ощутимо дороже ардуинки. да и не променяю я сейчас свой монитор со 120гц на телек.
ClearAirTurbulence
В самом начале же написано — это не ambilight, а цветовой healthbar.
Кроме того, в русском языке уменьшительно-ласкательный суффикс — "-ик". Извините.
bastie
"-ик", говорите? И как же будет уменьшительно-ласкательный "овраг", к примеру?
agriiii
овражИК
Zonzen
Вы плохо знаете русский язык.
Чтобы правильно написать суффиксы существительных ЕК и ИК, надо просклонять слова.
Если гласный выпадает, то надо писать Е, если не выпадает, то надо писать букву И.
Например:
овражЕк — овражка,
сыночЕк — сыночка,
мячИк — мячИка,
карандашИк — карандашИка
Что же касается телЕКа, то дело тут в корне «теле», а не «тел», поэтому именно телЕК.