Salve a tutti,
sto tentando di passare dei valori di luminosita provenienti da una app scritta in processing ad un arduino con un Tlc5940 e 5 led rgb.
Da premettere che i dati che ricevo sono corretti (ho controllato tramite monitor seriale e questo sketh)
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(38400);
mySerial.begin(38400);
}
void loop()
{
if (mySerial.available())
Serial.println(int(mySerial.read()));
if (Serial.available())
mySerial.println(Serial.read());
}
Il problema vero e proprio è attribuire l'inizio dell'array in primis, in tal modo sono sicuro della corrispondenza tra posizione dell'array e canale del Tlc.
Questo è lo sketh di arduino:
#include <Tlc5940.h>
int arr[15];
//int val;
int channel;
void setup(){
Tlc.init();
Serial.begin(38400);
for (channel=0;channel<15;channel++){
Tlc.set(channel,0);
}
delay(2000);
}
void loop(){
if (Serial.available()){
Tlc.clear();
for(int channel=0; channel<15;channel++){
int val=Serial.read();
val=map(val,0,255,0,4095);
Tlc.set(channel,val);
}
Tlc.update();
}
}
Altro problema è la perdita di dati durante il trasporto oltre la corrispondenza.
Praticamente anche se imposto tutti i valori di processing a 0 tranne uno comunque visualizzo l'accensione di tutti i canali dallo 0 al 14.
E' come se perdessi un elemento dell'array per cui mi si sposta tutta la corrispondenza.
Allego anche lo sketh di processing (non si sa mai...)
import processing.serial.*;
import controlP5.*;
ControlP5 Cp5;
Serial myPort;
int [] rgb1 = new int[15];
Slider r1, r2, r3, r4, r5, g1, g2, g3, g4, g5, b1, b2, b3, b4, b5;
void setup() {
size(800, 800);
Cp5= new ControlP5(this);
String portName = "COM5";
myPort = new Serial(this, portName, 9600);
r1 = Cp5.addSlider("R1", 0, 255, 40, 10, 10, 255, 10);
Cp5.controller("R1").setColorForeground(#FC0000);
Cp5.controller("R1").setColorActive(#000000);
g1 = Cp5.addSlider("G1", 0, 255, 60, 10, 30, 255, 10);
Cp5.controller("G1").setColorForeground(#0BFC00);
b1 = Cp5.addSlider("B1", 0, 255, 80, 10, 50, 255, 10);
Cp5.controller("B1").setColorForeground(#002CFC);
r2 = Cp5.addSlider("R2", 0, 255, 40, 10, 70, 255, 10);
Cp5.controller("R2").setColorForeground(#FC0000);
Cp5.controller("R2").setColorActive(#000000);
g2 = Cp5.addSlider("G2", 0, 255, 60, 10, 90, 255, 10);
Cp5.controller("G1").setColorForeground(#0BFC00);
b2 = Cp5.addSlider("B2", 0, 255, 80, 10, 110, 255, 10);
Cp5.controller("B2").setColorForeground(#002CFC);
r3 = Cp5.addSlider("R3", 0, 255, 40, 10, 130, 255, 10);
Cp5.controller("R3").setColorForeground(#FC0000);
Cp5.controller("R3").setColorActive(#000000);
g3 = Cp5.addSlider("G3", 0, 255, 60, 10, 150, 255, 10);
Cp5.controller("G3").setColorForeground(#0BFC00);
b3 = Cp5.addSlider("B3", 0, 255, 80, 10, 170, 255, 10);
Cp5.controller("B3").setColorForeground(#002CFC);
r4 = Cp5.addSlider("R4", 0, 255, 40, 10, 190, 255, 10);
Cp5.controller("R4").setColorForeground(#FC0000);
Cp5.controller("R4").setColorActive(#000000);
g4= Cp5.addSlider("G4", 0, 255, 60, 10, 210, 255, 10);
Cp5.controller("G4").setColorForeground(#0BFC00);
b4 = Cp5.addSlider("B4", 0, 255, 80, 10, 230, 255, 10);
Cp5.controller("B4").setColorForeground(#002CFC);
r5 = Cp5.addSlider("R5", 0, 255, 40, 10, 250, 255, 10);
Cp5.controller("R5").setColorForeground(#FC0000);
Cp5.controller("R5").setColorActive(#000000);
g5 = Cp5.addSlider("G5", 0, 255, 60, 10, 270, 255, 10);
Cp5.controller("G5").setColorForeground(#0BFC00);
b5 = Cp5.addSlider("B5", 0, 255, 80, 10, 290, 255, 10);
Cp5.controller("B5").setColorForeground(#002CFC);
}
void draw() {
rgb1[0]= int(r1.getValue());
rgb1[1]=int(g1.getValue());
rgb1[2]=int(b1.getValue());
rgb1[3]=int(r2.getValue());
rgb1[4]=int(g2.getValue());
rgb1[5]=int(b2.getValue());
rgb1[6]=int(r3.getValue());
rgb1[7]=int(g3.getValue());
rgb1[8]=int(b3.getValue());
rgb1[9]=int(r4.getValue());
rgb1[10]=int(g4.getValue());
rgb1[11]=int(b4.getValue());
rgb1[12]=int(r5.getValue());
rgb1[13]=int(g5.getValue());
rgb1[14]=int(b5.getValue());
printArray(rgb1);
//myPort.write("255");
for (int i=0; i<15; i++) {
myPort.write(rgb1[i]);
}
background(100, 100, 100);
println(Serial.list());
println(second());
}