www.mikrocontroller.net

Forum: Compiler & IDEs Taster Abfrage - Anfängerproblem


Autor: Dirk Küppers (Firma: ELK GmbH) (kiggster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hab vor kurzem die Ausbildungstelle gewechselt und beschäftige mich 
nun mit den AVR Controllern.

Habe hier ein Pollin EvoBoard bekommen mit dem ich erstmal etwas 
rumspielen kann.

Ich habe 2 Taster und 2 LED. Was ich eigentlich nur möchte ist: Wenn der 
Taster1 gedrückt ist soll die LED1 angehen und wenn er nochmal gedrückt 
wird soll er ausgehen. Das gleiche mit Taster2 und LED2. Die LED 
anzukriegen oder sie auch so lange anzukriegen wie einer der Taster 
gedrückt ist, ist kein Problem. Hier mein Code:
#include <avr/io.h>


int main()
{
/*Richtungsregister 01100000 nur die LED Ausgang(high) der Rest Eingang(low) -- DDRD = 0x60; */

  DDRD = _BV(PD6) | _BV(PD5);
    

  while(1)
  {
    
    if( bit_is_set(PIND, PIND2))
    {  
      
      //Wenn Taster1 gedrückt, LED1 an
      while(bit_is_set(PIND, PIND2))
      {
        PORTD |= (1<<PD5);
      }
      //LED1 wieder auschalten
      PORTD &= ~(1<<PD5);
    }
    else if(bit_is_set(PIND, PIND3))
    {  //Wenn Taster 2 gedrückt, LED2 an 
      while(bit_is_set(PIND, PIND3))
      {
        PORTD |= (1<<PD6);
      }
      //LED2 wieder ausschalten
      PORTD &= ~(1<<PD6);  
    }

    
    


  }
  return 0;
}



Wie zu sehen ist liegen die LED an PD5 und PD6 und die Schalter an PD2 
und PD3.

Nun will ich das ganze so umschreiben das LED1 an ist wenn man Taster1 
drückt und wieder ausgeht wenn man ihn erneut drückt.
Dazu werde ich mir irgendwie merken müssen ob der Schalter gedrückt 
wurde, nur leider hab ich momentan keine Ahnung wie man das macht.

Hat evtl einer von Euch einen Tipp dazu?

Hoffe das ist das richtige Forum dafür.

Danke und Gruß

kiggster

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTD ^= (1<<PD6); Exclusiv-Oder nennt man das.

Hubert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirk Küppers wrote:

> Dazu werde ich mir irgendwie merken müssen ob der Schalter gedrückt
> wurde, nur leider hab ich momentan keine Ahnung wie man das macht.

Um sich Dinge zu merken, werden Variablen benutzt.

Nur: In diesem Fall bringt dir das nicht viel, weil es da
noch einen überlagerten Effekt gibt: Dein Taster werden prellen.
Und um das Prellen los zu werden, ist schon etwas (nicht viel)
Aufwand notwendig.

Guck mal hier:
http://www.mikrocontroller.net/articles/Entprellung

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.