Я строю светодиодную сетку в форме восьмиугольника. У этого есть 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();
}
}
Спасибо, ребята!