Drehimpulsgeber / BIN Ausbabe - Fehler beim Abwärtz Zählen

Hallo,

noch einen kleinen Performance Hinweis.

void ausgabe(uint8_t w)
{
  // Ausgabe 1 - tubeland
  for (uint8_t p = 0; p < 8; p++)   // Bit tiefe
  {
    if (w & (0 << (0 - p)))
    {
      Serial.print('1');
    }
    else
    {
      Serial.print('0');
      digitalWrite(LED_PIN[p], w & 1 << (p));
    }
  }

  Serial.println();
  // Ausgabe 2 - agmue
  for (int8_t p = 7; p >= 0; p--)
  {
    if (w & (1 << p))
    {
      Serial.print('1');
    }
    else
    {
      Serial.print('0');
    }
  }
}

In beiden Schleifen wird hier beim 8Bit Datentyp jeweils 28 mal ein Bit verschoben. Das kostet etwas Zeit die man vermeiden kann wenn man nicht jedesmal aufs neue die Bits komplett verschieben lässt. Man merkt sich die aktuelle Bitposition und schiebt sie je Durchlauf nur eins weiter und damit je Schleife nur 7 mal. Verhältnis 56 zu 14. Das wäre eine Ausnahme wo man nicht alles im Schleifenkopf definiert und da es in einer Funktion steckt bleibt der Zähler sowieso lokal. Wollte ich mal zum Besten geben. :wink: