Ausgabe bzw Ergebnis invertieren

Hallo liebe Freunde,

spiele gerade mit einem Schieberegister rum und möchte die Ergebnisse die er raus gibt invertieren da meine Relaikarte bei einem 0 schaltet, ich sie aber mit einer 1 schalten möchte, da sie öfter aus als an sein werden.

int latchPin = 3;
int clockPin = 2;
int dataPin = 4;

byte leds = 0;
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}
void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  updateShiftRegister();
  Serial.begin(9600);
  while (! Serial); // Wait untilSerial is ready - Leonardo
  Serial.println("Enter LED Number 0 to 7 or 'x' to clear");

 
}

void loop() 
{ 
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch >= '0' && ch <= '7')
    {
      int led = ch - '0';
      bitSet(leds, led);
      updateShiftRegister();
      Serial.print("Turned on LED ");
      Serial.println(led);
    }
    if (ch == 'x')
    {
      leds = 0;
      updateShiftRegister();
      Serial.println("Cleared");
    }
  }
}

vill kann mir auch einer sagen wieso die Relaikarte genau versetzt schaltet also von rechts nach links und nicht von links nach rechts beim tippen in den Serielen monitor ?

Könnte vielleicht so gehen:

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, MSBFIRST, ~leds);
   digitalWrite(latchPin, HIGH);
}

Lesestoff zum Verstehen:
shiftOut() und bitwisenot.

Ich würde mir das vorher schon anlegen - und mit sprechenden Namen - anstelle von 0 oder 1.

enum {an, aus};
byte leds = aus;

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.