Ambilight para World of Tanks - luzes de ano novo

Para iniciar o vídeo. (Este não é exatamente o Ambilight - é um indicador colorido da saúde do tanque). O vídeo está oscilando e tremendo devido ao fato de que estou filmando com uma mão, estou tentando jogar com a segunda.


Na fabricação de tudo acabou muito simples.

Ingredientes necessários:

1. Arduino - o que é;
2. LEDs WS2812B (usei o anel - comprei há muito tempo, agora decidi aplicar);
3. Modificação para tanques . O mod para o meu projeto foi escrito por um amigo Kotyarko_O do fórum koreanrandom, pelo qual agradecemos especialmente a ele. No arquivo com os códigos-fonte mod estão anexados;
4. O aplicativo para o PC. - no arquivo, a origem e o aplicativo na pasta bin.

Não parece muito bonito, colei-o em um monitor em uma fita dupla face.

imagem

MAS! Detalhes mínimos. Peço que você não julgue estritamente o código, é uma curva inclinada :) eu sou um programador de cópia pasteur :) Quem não gosta muito, pode refazê-lo de maneira bonita e prática.

Código Arduino
#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(); 
    }
  }
}


Um programa para PC escrito em 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-
}

Bem, isso é tudo, respectivamente. Funciona da maneira mais simples. O mod para tanques adiciona todas as informações necessárias ao arquivo xml, e o aplicativo para PC, por sua vez, lê o xml e transfere todas as informações para o arduino, que por sua vez controla a cor.

PS Tudo isso pode ser finalizado, completado, finalizado, aprimorado ... Mas já quero dormir :)

PPS Tudo com a vinda!

Source: https://habr.com/ru/post/pt400461/


All Articles