Hallo,
ich möchte über die PWM Pins des Arduino UNO folgende Sachen ansteuern:
1x RGB LED
1x Servo
Das Ganze soll wie folgt ablaufen:
Nach 2 sek die LED einschalten und die Farbe und Helligkeit per Zufall auswählen und nach kurzer Zeit wieder wechseln
Nach 3 sek soll der Servo dazukommen und sich auf eine gewünschte Position einstellen (hier 180°)
Die LED geht nach 7 sek Gesamtzeit aus, der Servo nach 9 und kehrt dann in die Position 0 zurück.
Der Servo verfügt über eine extra Stromversorgung, die LED wird über den Arduino versorgt.
Ich habe für beide Objekte jeweils eine Klasse angelegt, in der allle wichtigen Funktionen geregelt sind:
Servo:
class motor
{
Servo servo;
int pos;
int increment;
unsigned long motoran;
unsigned long motoraus;
public:
motor(unsigned long on, unsigned long off)
{
increment = 1;
motoran = on;
motoraus = off;
}
void Attach(int pin)
{
servo.attach(pin);
}
void Detach()
{
servo.detach();
}
void Updatemotor()
{
unsigned long zeit3 = millis();
if((zeit3 >= motoran) && (zeit3 <= motoraus))
{
for(pos == 0; pos <= 180; pos += 1)
{
servo.write(pos);
}
}
else
{
pos = 0;
servo.write(pos);
}
}
};
RGB LED:
class rgb
{
int ledpinr;
int ledpinb;
int ledping;
unsigned long an;
unsigned long aus;
public:
rgb(int pinr, int pinb, int ping, unsigned long mystart, unsigned long mystop)
{
ledpinr = pinr;
ledpinb = pinb;
ledping = ping;
an = mystart;
aus = mystop;
}
void Attach()
{
pinMode(ledpinr, OUTPUT);
pinMode(ledpinb, OUTPUT);
pinMode(ledping, OUTPUT);
}
void setcolor(int rot, int blau, int gruen)
{
analogWrite(ledpinr, rot);
analogWrite(ledpinb, blau);
analogWrite(ledping, gruen);
}
void Update()
{
unsigned long zeit2 = millis();
if((zeit2 >= an) && (zeit2 <= aus))
{
if(zeit2 - an > random(0,200))
{
setcolor(random(0,255), random(0,255), random(0,255));
}
}
else
{
setcolor(0,0,0);
}
}
};
Hier die Ablaufroutine:
rgb rgb1(11,10,9, 2000,7000);
motor motor1(3000, 9000);
void setup()
{
motor1.Attach(3);
rgb1.Attach();
}
void loop()
{
motor1.Updatemotor();
rgb1.Update();
}
Das Problem ist jetzt folgendes:
Sobald die LED geschaltet wird fängt auch der Motor an sich plötzlich zu bewegen bzw. zu zittern. Die LED bleibt bei der Farbe rot stehen.
Wennich entweder
motor1.Updatemotor();
oder
rgb1.Update();
alleine ausführe läuft alles so wie es sollte, nur wenn ich beide zusammen ausführe gibts Probleme.
Ich habe mal an allen Pins die Spannung gleichzeitig gemessen. Komischerweise ist dann nur eine Spannung auf dem Pin für Rot der LED und scheinbar noch eine völlig zufällige Spannung auf der Datenleitung des Servos...
Die anderen beiden Pins scheinen Tot zun sein....
Das Problem kann auch hier nachvollzogen werden: https://123d.circuits.io/circuits/1980304-testaufbau
(Die Schaltung mit dem Transistor einfach ignorieren...)
Einfach oben links auf "Start Simulation" klicken...
Hat wer von euch ne Idee woran das liegen könnte?
Grüße
Hoffma0901