8 Kanal Lauflicht

Hallo
Ich bin absoluter Arduino Neuling, und mochte mich mit 8 Kanal Lauflicht Probieren.
Nun mein vorhaben.

const byte b1=B00000001;
const byte b2=B00000010;
const byte b3=B00000100;
const byte b4=B00001000;
const byte b5=B00010000;
const byte b6=B00100000;
const byte b7=B01000000;
const byte b8=B10000000;

jetzt hätte ich gerne das b1-b8 durchläuft. also die Les´s bei b1 OOOOOOOX und bei b2 OOOOOOOXO und so weiter
aufleuchten ich bin nun schon seit 5h am googeln und komme nicht weiter.

kann mier BITTE BITTE jemand HELFEN.

Danke uwefeld

Teus72:
kann mier BITTE BITTE jemand HELFEN.

Ungetestet hingeschrieben, vielleicht magest Du es ausprobieren und ggf. anpassen:

byte ledPins[]={2,3,4,5,6,7,8,9}; // wo die LEDs angeschlossen sind

byte laufLicht[]={ B00000001, B00000010, B00000100, B00001000, B00010000,
                   B00100000, B01000000, B10000000}; // Lauflicht Phasen

void setup(){
  for (int i=0;i<sizeof(ledPins);i++)  // LED-Pins auf OUTPUT setzen
    pinMode(ledPins[i],OUTPUT);
}

void loop(){
  for (int i=0;i<sizeof(laufLicht);i++) // Alle Lauflicht-Phasen hintereinander
  {
    for (int j=0;j<(sizeof(ledPins);j++) // Alle LEDs setzen
      digitalWrite(ledPins[j],bitRead(laufLicht[i],j));
    delay(250); // Wenn alle 8 Bits einer Phase gesetzt, kleine Pause vor der nächsten Phase
  }
}

Top Danke ich Probier mein Glück :~

Alternative mit direkter Port-Manipulation:

Intuitiver geht das wenn man die Pins des Prozessors direkt anspricht. Diese sind in Ports zu je 8 Bit aufgeteilt, die über das Ausgangs-Register PORTn angesprochen werden können.
Der Haken dabei ist dass nur von Port D alle 8 Pins herausgeführt sind und darauf sitzt mit Pins 0 und 1 die serielle Schnittstelle. Die könnte man zwar deaktivieren, aber das ist auch nicht so toll.

Aber man kann es auch leicht über zwei Ports aufteilen.

Erst mal das eigentliche Pin Mapping:
http://www.pighixxx.com/pgdev/Temp/ARDUINO_V2.png

Nehmen wir PD2 bis PD7 (Arduino Pins 2 - 7) und PB0 bis PB1 (Pins 8 und 9)

Nicht getestet:

void setup()
{
    for(int i = 2; i <= 9; i++)
       pinMode(i, OUTPUT);
}

void loop()
{
    static byte lauflicht = 1;
  
    PORTD = PORTD | (lauflicht << 2);    //untere 6 Bits auf PD2-PD7
    PORTB = PORTB | (lauflicht >> 6);    //obere 2 Bits auf PB0-PB1

    lauflicht = lauflicht << 1;    //Variable nach links schieben
    if(lauflicht == 0)
         lauflicht = 1;       //wieder von vorne anfangen

    delay(300);
}

Wir fangen auf Port D mit Pin PB2 an. Deshalb muss der Wert da 2 mal nach links geschoben werden. So wird z.B. aus 0001 → 0100.

Auf Port B müssen Bits 6 und 7 auf Pins 0 und 1 des Ports. Also wird 6 mal nach rechts geschoben.

Die Zählvariable selbst schiebt man auch immer einmal nach links. Und wenn der Wert 8 mal geschoben ist, hat man 0 und fängt wieder bei 1 an. So kannst du auch einfach die Richtung umkehren wenn du in die andere Richtung schiebst.

Fielen Dank jurs

Die antwort war ja Flott, aber ich komme immer noch nicht weiter
den in der Zeile //Alle LEDs setzen

byte ledPins[]={2,3,4,5,6,7,8,9}; // wo die LEDs angeschlossen sind

byte laufLicht[]={ B00000001, B00000010, B00000100, B00001000, B00010000,
                   B00100000, B01000000, B10000000}; // Lauflicht Phasen

void setup(){
  for (int i=0;i<sizeof(ledPins);i++)  // LED-Pins auf OUTPUT setzen
    pinMode(ledPins[i],OUTPUT);
}

void loop(){
  for (int i=0;i<sizeof(laufLicht);i++) // Alle Lauflicht-Phasen hintereinander
  {
    for (int j=0;j<(sizeof(ledPins);j++) // Alle LEDs setzen
      digitalWrite(ledPins[j],bitRead(laufLicht[i],j));
    delay(250); // Wenn alle 8 Bits einer Phase gesetzt, kleine Pause vor der nächsten Phase
  }
}

komt ein Fehler den ich nich weg bekomme. =(

Teus72:
komt ein Fehler den ich nich weg bekomme. =(

Die Zeile hat eine Klammer zuviel, die Anzahl der linken und rechten Klammern stimmt nicht überein.
Nimm die überzählige Klammer weg:

    for (int j=0;j<sizeof(ledPins);j++) // Alle LEDs setzen

:slight_smile: :slight_smile: :slight_smile:
TOP DANKE
Jetzt läuft es.

Danke Danke Danke

Teus72:
:slight_smile: :slight_smile: :slight_smile:
TOP DANKE
Jetzt läuft es.

Danke Danke Danke

Na bravo!
Aber dann schaue Dir den Code auch an und versuche ihn zu verstehen, was da abläuft!

Arrays, Schleifen und so weiter.
Das ist tägliches Handwerkszeug beim Programmieren.

Ist mir klar das es eine Kleinichkeit ist für jemanden der das schon länger macht.
Aber ich habe den Arduino UNO erst seit 6 Tagen und fange erst an zu Programieren.
Und mein RIESEN Problem ist ich kann kein Englich.