Mehrere PWM Signale getrennt voneinander nicht möglich

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

Am Anfang und nach Ablauf der ersten 9 Sekunden wird permanent servo.write(0); ausgeführt.

Das sollte das Zittern verursachen, oder?

rgb1.setcolor(0,0,0); sollte man beliebig oft machen können ohne dass etwas "passiert" ...

Servo zittert allerdings nur, wenn die drei LED PWM angesteuert werden?
Das sollte eigentlich eher ein Stromversorgungsproblem sein?

Zu deiner Schaltung:
Ist es ok, einen einzigen Widerstand in die common Leitung zu legen und RGB mit drei 5V PWM Signalen anzufeuern ?
Wenn du noch zwei Widerstände hast, probiers mal andersrum.

Also wie sich herrausgestellt hat, lag es nicht am Code, sondern an einer veralteten Servo.h.
Nach einem manuellen Update auf eine neuere Version lief dann alles so wie gewünscht!1