if will nicht

Gast #77721
Hi, ich habe untenstehende funktion geschrieben und wollte diese nun mit
dem Simulator von AVR studio simulieren, doch irgendwie überspringt er
einfach die if(bit_is_set(PIND,button1)) if schleifen!! hat jemand ne
idee woran das liegt ???

void get_keys(void)
{
static unsigned char keypress = 0;
unsigned char key;

if (keypress)
{
    if(bit_is_set(PIND,button1))
    {
      if (keytime < 8 && keytime > 0)
      {
      aufgabe = play;
        keypress = 0;
      }
    }
    else
    {
      if (keytime > 8)
      {
      aufgabe = stop;
      keypress = 0;
      }
    }
}
else
{
    if (bit_is_clear(PIND,button1))
    {
    key = 1;
      if (keypress && keytime > 0)
      {
      keypress = key;
      }
      if (key == 0)
      {
      keytime = 0;
      }
    }
}
Gast #77722
Hallo Jörn!

>doch irgendwie überspringt er einfach die if(bit_is_set(PIND,button1))
>if schleifen!

Was heist denn "überspringt"?

Gruß,
Patrick...
Gast #77723
Wann wird den die Variable "keypress" auf 1 gesetzt. Wenn Du die am
Anfang der Funktion neu initialisierst wird der erste Teil nie
ausgeführt.

Werner
Gast #77724
Hi,

 mit überspringt meine ich, das er das was in der if schleife steht
nicht ausführt auch wenn z.b keypress auf 1 ist und portd, button1 auf
1 ist

Ich dachte wenn ich schreibe static char keypress schreibe wird die
variable nur einmal initialisiert oder ist das falsch?

MFG Jörn
Gast #77726
Nö, eine statische Variable in der Funktion hat die gleiche Wirkung.

Funktioniert's denn nur im Simulator nicht, oder auch in der realen
Welt?

Allerdings erscheint mir die Logik im obersten `else' suspekt: Du
setzt key auf 1 und hast weiter unten ein `if (key == 0)', das
folglich nie erreicht werden kann.
Gast #77727
Hi,

@Jörg Wunsch

Also in der realen Welt läufts auch nicht!!!

Stimmt das macht wirklich keinen sinn, das if(key == 0) muss in die
untere else schleife.

MFG Jörn
Gast #77728
Hi,

erstmal Danke für eure Hilfe!!!!

Mein Prog läuft nun einwandfrei!!! Im Simulator sowie in der Realen
Welt!!

Wo genau das Prob war weiß ich nicht so genau, könnte es denn daran
gelegen haben das ich mitten in einer endlosschleife eine variable
initialisiert habe??

Nun kann ich endlich Tasten per interrupt abfragen!!!

MFG Jörn

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.