Port-manipulation und case-abfrage mit 3 button's 3 LED's (Mega 2560)

Hallo, :slight_smile:
Ich habe ein Problem... ich möchte 3 Buttons und 3 LED's mithilfe von Port-manipulation und case-abfrage verknüpfen, sodass jeder Pin eine LED zugewiesen bekommt und die in unterschiedlichen Kombinationen gedrückt werden können.
Ich habe dies mit Hilfe der digitalRead-, digitalWrite-Funktion und der caseabfrage schon bewältigt ... und es funtioniert wie ich das möchte!

int ledPin1 = 13;
int ledPin2 = 12;
int ledPin3 = 11;

int buttonPin1 = 2;
int buttonPin2 = 3;
int buttonPin3 = 4;
int x = 0;
int buttonstate1,buttonstate2,buttonstate3 = 0;


void setup ()

  {
    pinMode (ledPin1, OUTPUT);
    pinMode (ledPin2, OUTPUT);
    pinMode (ledPin3, OUTPUT);
    pinMode (buttonPin1, INPUT);
    pinMode (buttonPin2, INPUT);
    pinMode (buttonPin3, INPUT);
  }

void loop ()
{
  int x = 0;
  buttonstate1 = digitalRead(buttonPin1);
  buttonstate2 = digitalRead(buttonPin2);
  buttonstate3 = digitalRead(buttonPin3);
 
 
  if ((buttonstate1 == HIGH) && (buttonstate2 == LOW) && (buttonstate3 == LOW)) {
    x = 1;
  }
  
  if ((buttonstate1 == LOW) && (buttonstate2 == HIGH) && (buttonstate3 == LOW)) {
    x = 2;
  }
  
  if ((buttonstate1 == LOW) && (buttonstate2 == LOW) && (buttonstate3 == HIGH)) {
    x = 3;
  }
  
  if ((buttonstate1 == HIGH) && (buttonstate2 == HIGH) && (buttonstate3 == LOW)) {
    x = 4;
  }
  
  if ((buttonstate1 == HIGH) && (buttonstate2 == LOW) && (buttonstate3 == HIGH)) {
    x = 5;
  }
  
  if ((buttonstate1 == LOW) && (buttonstate2 == HIGH) && (buttonstate3 == HIGH)) {
    x = 6;
  }
  
  if ((buttonstate1 == HIGH) && (buttonstate2 == HIGH) && (buttonstate3 == HIGH)) {
    x = 7;
  }

      switch (x) 
       {
        case 1:
           digitalWrite(ledPin1, HIGH);
           digitalWrite(ledPin2, LOW);
           digitalWrite(ledPin3, LOW);
        break;
         
        case 2:
           digitalWrite(ledPin1, LOW);
           digitalWrite(ledPin2, HIGH);
           digitalWrite(ledPin3, LOW);
        break;
        
        case 3:
           digitalWrite(ledPin1, LOW);
           digitalWrite(ledPin2, LOW);
           digitalWrite(ledPin3, HIGH);
        break;
        
        case 4:
           digitalWrite(ledPin1, HIGH);           
           digitalWrite(ledPin2, HIGH);
           digitalWrite(ledPin3, LOW);
        break;
         
        case 5:
           digitalWrite(ledPin1, HIGH);
           digitalWrite(ledPin2, LOW);
           digitalWrite(ledPin3, HIGH);
        break;
        
        case 6:
           digitalWrite(ledPin1, LOW);
           digitalWrite(ledPin2, HIGH);
           digitalWrite(ledPin3, HIGH);
        break;
        
        case 7:
           digitalWrite(ledPin1, HIGH);
           digitalWrite(ledPin2, HIGH);
           digitalWrite(ledPin3, HIGH);
        break;

        default:
          digitalWrite(ledPin1,LOW);
          digitalWrite(ledPin2,LOW);
          digitalWrite(ledPin3,LOW);
        break;
       }                            
}

Nun möchte ich dies mithilfe der Port-manipulation hinbekommen... Ich habe mich bereits daran versucht aber komme nun nicht mehr weiter. :frowning:

Hier mein bisheriger Stand:

void setup()
  { 
  DDRB = B11111111;
  DDRC = B00000000;
  }

void loop()
  {
   int x = 0;
   x = digitalRead(PINC);
   
    if (PINC == B00000100); {
      x=1;
    }
    if (PINC == B00001000); {
      x=2;
    }
    if (PINC == B00010000); {
      x=3;
    }
    if (PINC == B00001100); {
      x=4;
    }
    if (PINC == B00010100); {
      x=5;
    }
    if (PINC == B00011000); {
      x=6;
    }
    if (PINC == B00011100); {
      x=7;
    }
        switch (x)
        {
          case 1:
          PORTB = B00100000;
          break;
          
          case 2:
          PORTB = B00010000;
          break;

          case 3:
          PORTB = B00001000;
          break;

          case 4:
          PORTB = B00011000;
          break;

          case 5:
          PORTB = B00101000;
          break;

          case 6:
          PORTB = B00110000;
          break;

          case 7:
          PORTB = B00111000;
          break;

          default:
          PORTB = B00000000;
          break; 
        }
  }

Ich habe das Gefühl das ich die Ports nicht genau definiert habe .... bisher habe ich mit dieser Website gearbeitet.

http://www.netzmafia.de/skripten/hardware/Arduino/programmierung.html

Ich bedanke mich für die Hilfe im Voraus!!! :slight_smile:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Register

wäre nicht einfacher:

loop() {
digitalWrite(ledPin1, digitalRead(buttonPin1);
digitalWrite(ledPin2, digitalRead(buttonPin2);
digitalWrite(ledPin3, digitalRead(buttonPin3);
}