Programm auf mehreren Pins ausgeben

Hallo,
ich habe ein Faderprogramm und möchte das über mehrere Pins gleichzeitig ausgeben und hab int ledpin die Pins zugewießen aber wenn ich das Programm hochlade passiert nichts. Was muss ich eingeben damit das funktioniert?

int value;
int ledpin = (3, 5, 6, 9, 10);
int period = 5000;

void setup()
{
Serial.begin(9600);
}

void loop() {
value = 128+127cos(2PI/period*millis());
analogWrite(ledpin, value);
Serial.print(millis());
Serial.print(" - ");
Serial.print(value);
Serial.println();
}

Du musst die Pins im setup als Output definieren.

mit for schleife.

So, hab jetzt die Pins als output deklariert aber da motzt die IDE rum 'outpu' was not declared in this scope.

Hab mir gerade auch mal die for Schleife angeschaut aber ich hab keine Ahnung wie ich das hier einfügen soll...

Das muss auch "Output" heißen.

pinMode(pin, OUTPUT);

for-Schleife ist auch schwierig, da nicht fortlaufende Nummern.

Was soll es bringen, das Gleiche auf mehreren Pins auszugeben?
Wenn Du uns sagst, was das werden soll, finden sich evtl. sinnvollere Lösungen.

Ansonsten wäre noch eine Variante die Pinnummern in ein Array zu schreiben und das durchlaufen. Ist aber nur geschätzt, weil das Ziel unbekannt ist.

byte pins[] = {3, 5, 6, 9, 10};
for(byte i=0;i<5;i++) pinMode(pins[i]),OUTPUT);

Gruß Tommy

Sowas geht nicht:

int ledpin = (3, 5, 6, 9, 10);

Das kompiliert wegen dem Komma Operator, aber macht was ganz anderes als du denkst. Ein int ist eine Zahl

Stimmt, der Verwendungszweck wäre von Vorteil. Werd langsam ungeduldig weil ich schon eine Weile daran rum mache. Ich möchte insgesamt 10 grüne Leds ansteuern, 2 pro Pin, und diese gleichzeitig faden lassen. Das ganze dient als Beleuchtung für einen Güterwagon.

Achso! Ich dachte der Befehl int heißt, das er den Pin ansteuert. Und wenn ich weitere Pins nutzen möchte, ich diese durch ein Komma hinzufüge.

Du solltest Dich evtl. etwas mit den elementarsten Grundlagen beschäftigen.
int ist an der Stelle ein Variablentyp.

Du kannst auch mit einem Pin über einen Transistor oder FET mehrere LED ansteuern. Ich vermute mal, wenn Du faden sagst, meinst Du PWM?

Gruß Tommy

int ist ein Datentyp (Integer mit Vorzeichen). Die absoluten Grundlagen der Programmierung musst du schon beherrschen wenn du sowas machen willst. Das ist nicht mal C/C++ spezifisch sondern recht universell.

Es bringt nichts dir Algorithmen mit Arrays und Schleifen zu zeigen wenn du nicht verstehst was "[Datentyp] [Variablenname]" macht

Hab mit dem programmieren erst angefangen.
Im grunde genommen sollen die Leds einfach nur pulsieren.

Faden oder pulsieren sind aber 2 ziemlich unterschiedliche Dinge.
Da musst Du Dich entscheiden.
Außerdem dürftest Du mi 2 LED pro Pin die Grenze pro Pin schon arg strapazieren.
40 mA pro Pin sind zwar als Grenzwert möglich, empfohlen sind aber 20 mA.

Zeige uns doch mal den Sketch, mit dem Du das mit einer LED getestet hast. Da sieht man eher ob es nun faden oder pulsieren ist.

Gruß Tommy

Hier mal der Sketch mit dem ich das getestet:

int value;
int ledpin = 9;
int period = 5000;

void setup()

{
Serial.begin(9600);
}

void loop() {
value = 128+127cos(2PI/period*millis());
analogWrite(ledpin, value);
Serial.print(millis());
Serial.print(" - ");
Serial.print(value);
Serial.println();
}

Also geht es um Faden. Du willst PWM (PulsWeitenModulation) mit analogWrite.
Das kannst Du auch mit einem Pin über einen FET steuern.
Es sollte ein LogigLevel-FET sein, damit er bei den Spannungen des Arduino sicher durchsteuert.
Wichtig ist, dass jede LED ihren eigenen Vorwiderstand bekommt - egal wie Du sie ansteuerst.

Gruß Tommy

Es gibt zwei grundsätzlich verschiedene Lösungen für dein Problem.

a) Hardware. Du steuerst mit einem Pin einen FET an, der den Strom für alle LEDs treiben kann.

b) Software.

Alle Pins deklarieren:
int LEDpin1 = 3;
int LEDpin2 = 6;
...

alle als Output definieren:
pinMode(LEDpin1 , OUTPUT);
pinMode(LEDpin2 , OUTPUT);
...

Und dann alle Pins in der Schleife ausgeben.

value = 128+127cos(2PI/period*millis());
analogWrite(LEDpin1 , value);
analogWrite(LEDpin2 , value);
...

Und wenn Du möchtest, daß der Compiler schön optimieren kann, sagst Du ihm, die Pinnummern sind Konstanten:

const int LEDpin1 = 3;
const int LEDpin2 = 6;

:slight_smile:

const int LEDpin1 = 3;

Wenn schon, dann so:

const byte LEDpin1 = 3;

(auch, wenn der Compiler das gleiche draus macht)
:sunglasses: :sunglasses: :sunglasses: :sunglasses:

So, dank euch läuft das Programm jetzt so, wie ich es möchte. Vielen Dank!

int value;
const byte LEDpin1 = 3;
const byte LEDpin2 = 5;
const byte LEDpin3 = 6;
const byte LEDpin4 = 9;
const byte LEDpin5 = 10;
int period = 5000;

void setup() {
pinMode(LEDpin1, OUTPUT);
pinMode(LEDpin2, OUTPUT);
pinMode(LEDpin3, OUTPUT);
pinMode(LEDpin4, OUTPUT);
pinMode(LEDpin5, OUTPUT);
Serial.begin(9600);
}

void loop() {
value = 128+127cos(2PI/period*millis());
analogWrite(LEDpin1, value);
analogWrite(LEDpin2, value);
analogWrite(LEDpin3, value);
analogWrite(LEDpin4, value);
analogWrite(LEDpin5, value);
Serial.print(millis());
Serial.print(" - ");
Serial.print(value);
Serial.println();
}

Gruß Steffen

So, hab endlich mal Zeit gefunden eine Platine zu ätzen und zu bestücken. Nach dem flashen habe ich gesehen das 3 der 5 LEDs flackern beim faden. Im nachhinein habe ich festgestellt das ich ja das Layout so erstellt habe das meine Ausgänge Eingänge sind. Darauf habe die Pins von OUTPUTs zu INPUTs umgestellt aber sie flackern immer noch. Hat jemand eine Vermutung was das sein könnte?

Gruß

Predator41:
So, hab endlich mal Zeit gefunden eine Platine zu ätzen und zu bestücken. Nach dem flashen habe ich gesehen das 3 der 5 LEDs flackern beim faden. Im nachhinein habe ich festgestellt das ich ja das Layout so erstellt habe das meine Ausgänge Eingänge sind. Darauf habe die Pins von OUTPUTs zu INPUTs umgestellt aber sie flackern immer noch. Hat jemand eine Vermutung was das sein könnte?

Wie stellst du das im Layout um ?

Die Pins kannst du im Sketch definieren, aber im Layout, das ist mir nicht bekannt.