Port Input Abfrage mit if - else (MEGA 2560)

Hallo,
ich möchte LEDs mit Hilfe von einer if - else Abfrage durch einen pull-down-Widerstand(mit Button) für 10 Sek. zum erlöschen bringen, wenn der Button nicht gedrückt ist sollen die LEDs blinken. Es soll durch Binärcodes ausgelesen werden.
Das was ich bisher erstellt habe funktioniert leider noch nicht.

Mein bisheriger Stand:

char buttonstate = 0;

void setup()
  { 
  DDRB = B11111111; // Output
  DDRD = B00000000; // Input
  }

void loop()
  {
   buttonstate = PIND;

        if (buttonstate == B10000000) {
          PORTB = B00000000;
          delay(10000);}
        else {  
          PORTB = B11111111;
          delay(500);
          PORTB = B00000000;
          delay(500);
      }
  }

Ich glaube das es an der direkten Abfrage der buttonstate scheitert ... habe schon lange und viel versucht das Problem zu lösen komme nun aber nicht mehr weiter und hoffe hier auf Hilfe.

Danke im Voraus! :slight_smile:

Um abzufragen ob ein bestimmtes Bit gesetzt ist verwenden man Schieben und ein logisches Und.

z.B. für Bit 3:

if(PIND & (1 << 3))
{
}

oder:

if((PIND >> 3) & 0x01)
{
}

Oder verwende bitRead():
http://arduino.cc/en/Reference/bitRead
Das ist nicht langsamer, da es ein Makro ist

Achte auch darauf dass du den richtigen Pin hast. PD7 ist Pin 38:
http://greentechhobby.com/images/Arduino/ArduinoMega.pdf

Auf dem Mega sind hier Port A und Port C oder F und K schöner. Da liegen die einzelnen Pins direkt hintereinander

ich möchte LEDs mit Hilfe von einer if - else Abfrage durch einen pull-down-Widerstand(mit Button) für 10 Sek. zum erlöschen bringen, wenn der Button nicht gedrückt ist sollen die LEDs blinken....
Das was ich bisher erstellt habe funktioniert leider noch nicht.

Warum machst du es nicht auf Arduino - Art mit digitalRead(ButtonPin) ?