Варьируется при отправке сериалов в Arduino - PullRequest
0 голосов
/ 12 июня 2019

Я строю светодиодную сетку в форме восьмиугольника. У этого есть 8 сторон, которые вызваны осью X кого-то на Kinect.

Он посылает 8 сериалов в Arduino, чтобы активировать светодиоды на одной стороне восьмиугольника. Все эти светодиоды (255,0,0) красные.

Я хочу сделать так, чтобы я мог переключаться между синим, зеленым и красным при обработке. У кого-нибудь есть какие-нибудь советы, как сделать что-то подобное?

Я думал о том, чтобы, возможно, создать три кнопки (R, G, B) и использовать нажатие мыши для переключения между сериалами, которые отправляются в Arduino

Единственная проблема - я немного новичок в обработке. кто-то знает, как справиться с этим?

Вот мой код для обработки


import org.openkinect.freenect.*;
import org.openkinect.processing.*;
import processing.serial.*;


// The kinect stuff is happening in another class
KinectTracker tracker;
Kinect kinect;
Serial myPort;

void setup() {
  size(640, 480);
  kinect = new Kinect(this);
  tracker = new KinectTracker();
  String portName = Serial.list()[2]; //change the 0 to a 1 or 2 etc. to match your port
  myPort = new Serial(this, portName, 9600);
}

void draw() {

  tracker.track();
  tracker.display();

  PVector v1 = tracker.getPos();
  fill(50, 100, 250, 200);
  noStroke();
  ellipse(v1.x, v1.y, 50, 50);




   //1
    if (v1.x > 0 && v1.x < 80 ){
    println('8');
    //rect(0,200,200,200);
    myPort.write('8'); }
    //println('0'); }

    //2
  if (v1.x > 80 && v1.x < 160){
    println('7');
    myPort.write('7'); }   
 //3
   if (v1.x > 160 && v1.x < 240 ){
    println('6');
    myPort.write('6'); }

    //4
   if (v1.x > 240 && v1.x < 320 ){
    println('5');
   myPort.write('5'); }

    //5
   if (v1.x > 320 && v1.x < 400 ){
    println('4');
    myPort.write('4'); }

    //6
   if (v1.x > 400 && v1.x < 480 ){
    println('3');
    myPort.write('3'); }

    //7
   if (v1.x > 480 && v1.x < 560 ){
    println('2');
    myPort.write('2'); }

    //8
   if (v1.x > 560 && v1.x < 620 ){
    println('1');
    myPort.write('1'); }
}

Вот код Arduino:


#include <FastLED.h>

#define LED_PIN     6
#define NUM_LEDS    360

CRGB leds[NUM_LEDS];

void setup()
{
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

  Serial.begin(9600);

  FastLED.clear();
  FastLED.show();
}

void loop()
{

  if (Serial.available() > 0)
  {
    int incomingByte = Serial.read();

    if (incomingByte > '0' && incomingByte < '9')
    {
      FastLED.clear();   //  <-----<<<<    USE clear
    }


    if (incomingByte == '1')
    for(int i = 0; i<=44; i++){
          leds[i] = CRGB(255, 0, 0);
      }
    else if (incomingByte == '2')
    for(int i = 45; i<=89; i++){
          leds[i] = CRGB(255, 0, 0);
    } 
    else if (incomingByte == '3')
    for(int i = 90; i<=134; i++){
          leds[i] = CRGB(255, 0, 0);
    }

  else if (incomingByte == '4')
    for(int i = 135; i<=179; i++){
          leds[i] = CRGB(255, 0, 0);
    }
    else if (incomingByte == '5')
    for(int i = 180; i<=224; i++){
          leds[i] = CRGB(255,0, 0);
    }
    else if (incomingByte == '6')
    for(int i = 225; i<=269; i++){
          leds[i] = CRGB(255, 0, 0);
    }
    else if (incomingByte == '7')
    for(int i = 270; i<=314; i++){
          leds[i] = CRGB(255, 0, 0);
    }
    else if (incomingByte == '8')
    for(int i = 315; i<=359; i++){
          leds[i] = CRGB(255, 0, 0);

 }

    FastLED.show();
  }
}

Спасибо, ребята!

1 Ответ

0 голосов
/ 12 июня 2019

Если вам нужны ресурсы для создания графического интерфейса при обработке, мне повезло с ControlP5 .Есть множество примеров, и это действительно гладкая эстетика.Вы должны быть в состоянии использовать приведенные там примеры, чтобы изменить значение, которое вы отправляете по последовательному каналу, чтобы выбрать свой цвет.

...