Ambilight для World of Tanks — Новогодняя подсветка ;)

Для начала видео. (Это не совсем Ambilight — это цветовой индикатор здоровья танка)
Видео качается и трясется из за того что одной рукой снимаю, второй пытаюсь играть.


В изготовлении все вышло очень просто.
Необходимые ингредиенты:
1. Arduino — какая есть.
2. Светодиоды WS2812B (Я использовал кольцо — купил давно, сейчас решил применить)
3. Мод для танков
Мод для моего проекта написал товарищ Kotyarko_O с форума koreanrandom, за что ему отдельное спасибо. В архиве с модом приложены исходники
4. Приложение для ПК. — в архиве исходники и приложение в папке bin

Выглядит все это не очень красиво, к монитору приклеил на двухсторонний скотч.
image
НО! деталей минимум.
За код прошу строго не судить, он кривой косой :) Я программист копипастер :) Кому сильно не понравится, можете переделать под себя красиво и практично.

Код ардуино
#include 
#ifdef __AVR__
  #include 
#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


Программа для ПК, написана на C#

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 Всех с наступающим!

© Geektimes