PROBLEM GELÖST.
Vielleicht kann ja jemand den Code nutzen um seine Ikea Dioder mittels OSC zu steuern.
Hallo,
Ich habe vor meine Ikea Dioder leisten mit einem Arduino und mehreren ULN2003A zu steuern.
Angeschlossen habe ich sie nach folgenden Schema auf einer Webseite: Daniel Kennett - Nerd++: Controlling Dioder RGB LED Strips with Arduino, Pt. 1 - Getting Started
Immer wenn ich versuche eine weiße Farbe einzustellen, also alle Werte für Rot, grün und blau dann leuchten sie nur ganz schwach. Hat jemand eine Idee? Liegt es am ULN2003A? Angeschlossen ist das ganze an einen Arduino Mega mit Ethernet Shield an den Pins 2-4.
/***************************************/
/*libraries*/
/***************************************/
#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>
/***************************************/
/*defines*/
/***************************************/
#define SERVER_PORT 9000
#define DESTINATION_PORT 8000
#define PIN_R 2
#define PIN_G 3
#define PIN_B 4
/***************************************/
/*variables*/
/***************************************/
OSCServer server;
OSCClient client;
byte myMac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte myIp[] = {192, 168, 1, 177};
int rgb_r=0;
int rgb_g=0;
int rgb_b=0;
int hsv_h=0;
int hsv_s=255;
int hsv_v=0;
/***************************************/
/*setup*/
/***************************************/
void setup(){
//start serial
Serial.begin(115200);
//set pin modes
pinMode(PIN_R, OUTPUT);
pinMode(PIN_G, OUTPUT);
pinMode(PIN_B, OUTPUT);
//start ethernet
Ethernet.begin(myMac ,myIp);
//start OSC server
server.begin(SERVER_PORT);
//set callback function & oscaddress
server.addCallback("/1/push1",&func_onoff);
server.addCallback("/1/hue",&func_hue);
server.addCallback("/1/saturation",&func_saturation);
server.addCallback("/1/value",&func_value);
}
/***************************************/
/*loop for ever*/
/***************************************/
void loop(){
if(server.aviableCheck()>0){
//Serial.println("alive! ");
}
HSV2RGB(hsv_h, hsv_s, hsv_v, rgb_r, rgb_g, rgb_b);
setLedColor(rgb_r, rgb_g, rgb_b);
}
/***************************************/
/*additional functions*/
/***************************************/
void setLedColor(int red, int green, int blue) {
analogWrite(PIN_R,red);
analogWrite(PIN_G,green);
analogWrite(PIN_B,blue);
}
// hue 0...360
// saturation 0...255
// value 0...255
void HSV2RGB(int h, double s, double v, int &r_int, int &g_int, int &b_int) {
double r=0;
double g=0;
double b=0;
if(s==0)
{
r_int = v;
g_int = v;
b_int = v;
return;
}
s /= 255;
v /= 255;
double hf=h/60.0;
int i=(int)floor(h/60.0);
double f = h/60.0 - i;
double pv = v * (1 - s);
double qv = v * (1 - s*f);
double tv = v * (1 - s*(1 - f));
switch (i)
{
case 0:
r = v;
g = tv;
b = pv;
break;
case 1:
r = qv;
g = v;
b = pv;
break;
case 2:
r = pv;
g = v;
b = tv;
break;
case 3:
r = pv;
g = qv;
b = v;
break;
case 4:
r = tv;
g = pv;
b = v;
break;
case 5:
r = v;
g = pv;
b = qv;
break;
}
r_int=constrain((int)255*r,0,255);
g_int=constrain((int)255*g,0,255);
b_int=constrain((int)255*b,0,255);
}
EDIT:
Ich hab jetzt nochmal getestet. Immer wenn ich 3 PWM Ausgänge am Megaansteuere werden alle 3 relativ schwach wenn der gesetzte Wert überall gleich ist.
Setze ich unterschiedliche PWM Werte (50,60,70) setzt immer dejenige Pin aus der den geringen PWM Wert erhält. Kann es sein das mein Mega ein Problem hat oder ist es ein generelles Problem?
EDIT2:
Ich konnte das Problem lösen, indem ich 12V an den Vin Pin angelegt habe. Scheinbar bricht die Spannung teilweise zusammen wenn 3 Pins auf HIGH gesetzt werden.