Hallo,
ich teste gerade ein wenig rum:
Habe mir TOUCH OSC füs iPhone geladen, auf meinem PC läuft Processing und am USB hängt ein xbee mit entsprechendem Shield.
Am anderem xbee hängt mein Arduino Mega, der ein TLC 5940 steuern soll.
Heißt: Ich möchte gerne die 12 bit des TLCs mittels iPhone und xbee steuern.
Soweit so gut klappt alles außer dass ich ausgangsseitig in Processing nur 0-255 übertragen kann und nicht 0-4095.
Heißt ich muss im Arduino 0-255 auf 0-4095 mappen, da gehen natürlich einige Bits verloren.
Seh ich das denn richtig dass nur 8Bit gehen oder mach ich was falsch?
Processing code:
import oscP5.*;
import netP5.*;
import processing.serial.*;
Serial myPort;
OscP5 oscP5;
float [] fader = new float [3];
float x;
void setup() {
oscP5 = new OscP5(this,8000);
myPort = new Serial(this, "COM13", 19200);
}
void oscEvent(OscMessage theOscMessage) {
String addr = theOscMessage.addrPattern();
if(addr.indexOf("/1/fader") !=-1){
String list[] = split(addr,'/');
int xfader = int(list[2].charAt(5) - 0x30);
if(theOscMessage.get(0).floatValue() !=0){
fader[xfader] = theOscMessage.get(0).floatValue();
}
}
println(theOscMessage.toString());
}
void draw() {
if (fader[1] >= 0) x=fader[1]*255;
int a = (int) (x);
myPort.write(a);
println(a);
}
Arduino Code:
#include "Tlc5940.h"
unsigned long val = 0;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 2);
int i;
void setup()
{
Tlc.init(0);
Tlc.update();
mySerial.begin(19200);
Serial.begin(19200);
}
void loop()
{
if (mySerial.available()) {
val=mySerial.read();
i = map(val,0,255,4095,0);
Tlc.set(1,i);
Tlc.update();
}
Serial.println(i, DEC);
}
Der Code ist noch nicht optimiert - kenne mich mit Processing und der OSC Library nicht so gut aus, daher liefert mir die App aktiuell floats zwischen 0 und 1 die ich dann mit 255 (oder gewünscht 4095) zum int multipliziere.
(Ich weiss noch nicht, wie ich das hier anpassen muss, dass die App auch Werte 0-4095 senden kann
void oscEvent(OscMessage theOscMessage) {
String addr = theOscMessage.addrPattern();
if(addr.indexOf("/1/fader") !=-1){
String list[] = split(addr,'/');
int xfader = int(list[2].charAt(5) - 0x30);
if(theOscMessage.get(0).floatValue() !=0){
fader[xfader] = theOscMessage.get(0).floatValue();
}
}
println(theOscMessage.toString());
}
)
Gruß