Ambilight for World of Tanks - Lampu Tahun Baru

Untuk memulai video. (Ini bukan Ambilight - ini adalah indikator warna kesehatan tangki). Video berayun dan bergetar karena fakta bahwa saya memotret dengan satu tangan, saya mencoba bermain dengan yang kedua.


Dalam pembuatan semuanya ternyata sangat sederhana.

Bahan-bahan yang diperlukan:

1. Arduino - apa itu;
2. LED WS2812B (Saya menggunakan cincin - membeli waktu yang lama, sekarang saya memutuskan untuk menerapkan);
3. Mod untuk tank . Mod untuk proyek saya ditulis oleh seorang teman Kotyarko_O dari forum koreanrandom, yang berkat khusus untuknya. Dalam arsip dengan kode sumber mod terlampir;
4. Aplikasi untuk PC. - dalam arsip sumber dan aplikasi dalam folder bin.

Itu tidak terlihat sangat indah, saya menempelkannya ke monitor pada pita dua sisi.

gambar

TAPI! Detail minimum. Saya meminta Anda untuk tidak menilai secara ketat untuk kodenya, itu adalah kurva miring :) Saya seorang programmer copy-paste :) Siapa pun yang tidak begitu menyukainya, Anda dapat membuat ulang dengan indah dan praktis untuk diri Anda sendiri.

Kode 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(); 
    }
  }
}


Program untuk PC yang ditulis dalam 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-
}

Yah, itu saja, masing-masing. Ini bekerja dengan cara paling sederhana. Mod untuk tank menambahkan semua informasi yang diperlukan ke file xml, dan aplikasi PC, pada gilirannya, membaca xml dan mentransfer semua informasi ke arduine, yang pada gilirannya mengontrol warna.

PS Semua ini bisa diselesaikan, selesai, selesai, ditingkatkan ... Tapi sudah saya ingin tidur :)

PPS Semua dengan kedatangan!

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


All Articles