Left Shift and Right Shift Operators

Hallo zusammen, hab hier den folgenden code :

int lightPin = 0;
int latchPin = 11;
int clockPin = 9;
int dataPin = 12;

int leds = 0;
int reading;
void setup() 
{
 pinMode(latchPin, OUTPUT);
 pinMode(dataPin, OUTPUT);  
 pinMode(clockPin, OUTPUT);
 Serial.begin (9600);
}
 
void updateShiftRegister()
{
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, leds);
  digitalWrite(latchPin, HIGH);
}
void loop() 
{
 
 reading  = analogRead(lightPin);
 int numLEDSLit = reading / 57;  //1023 / 9 / 2
;
 if (numLEDSLit > 8)  numLEDSLit = 8;
 leds = 0;   // no LEDs lit to start
 for (int i = 0; i < numLEDSLit; i++)
 {
   leds = leds + (1 << i);  // sets the i'th bit                                      Dazu die frage 
 Serial.println (leds,BIN);
 updateShiftRegister();
 
}


leds =0

versteh jetzt nicht wieso ich als Ergebnis 11111 raus bekomme. leds = leds + (1 << i); wenn jetzt i = 6 ist, wird die eins um 6 stellen verschoben also 100000. was hat jetzt die variable leds auf sich die ist grade 0. wie es aussieht ist 100000 + 0 = 11111???

Dei Kode setzt alle Bits bis zu der angegebenen Nummer und fängt mit dem kleinsten Bit an.

led ist also nur 0 bevor es losgeht, wenn du bei dem sechsten Bit angekommen bist,
sind die Bits 0 bis fünf schon alle gesetzt.

Ich würde das Folgende an Stelle der gesamten for Schleife verwenden:

 leds = 0xFF >> (8 - numLEDSLit);

Hallo, erst mal der übliche Hinweis :
Setze bitte deine Code in Code-Tags, dann kann man den besser lesen und
es tauchen keine Smileys drin auf.

Zum Thema,

soweit ich es verstanden habe möchtest du das in “led” genau ein Bit
für die entsprechende LED gesetzt wird ?

Du schreibst aber "led = led + (1 << i);

D.h. du addierst Bit für bit hinzu. Am Ende der Schleife hast du natürlich alle Bits gesetzt.
Also nur "led = (1 << i);

Ulli

@beeblebrox

Ich glaube schon ein Leuchtbalken und kein einzelner Punkt gewünscht ist.
(Vielleicht aber nur vom Author des Kodes und nicht von dem der ihn kopierte.)