-
        

Ergebnis 1 bis 5 von 5

Thema: STK500 - Taster lnger drcken -> Schneller hochzhlen

  1. #1
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    17.09.2005
    Beitrge
    102

    STK500 - Taster lnger drcken -> Schneller hochzhlen

    Anzeige

    Hallo,

    zugegeben... Ich wei nicht welchen Titel ich whlen soll

    Ich habe hier eine Aufgabe aus unserem Kurs bei der ich nicht so recht weiterkomme:

    Der Wert einer Variablen vom Typo unsigned int soll auf einem Display angezeigt werden. Mit 2 Tasten soll dieser Wert erhht bzw. erniedrigt werden knnen.
    Kurzes drcken: +1 bzw. -1.
    Wird eine Taste etwas lnger gedrckt soll sich der Wert mit einer gegebenen Frequenz in einerschritten verndern bis die Taste losgelassen wird
    Was ich machen soll ist mir (glaube ich ) klar.
    Ich verstehe jedoch nicht was mit dem fett-markierten Satz genau gemeint ist.
    Frequenz....
    Soll ich hier mit irgendeinem Timer arbeiten? - oder wie stellen sich die Herren das vor


    Mein Ansatz ist der folgende:


    Code:
     
    // includes etc.
    
    int main() {
       DDRC = 0xFF;
       lcd_init();
       unsigned int val = 0;
       while(1){
          lcd_setcursor(0, 0);
          lcd_putdez_uint(val);
          _delay_ms(100);
     
          while ((PINA) == 0xff);
     
          if (PINA & _BV(7)){
             val+=1000;
          }
          if (PINA & _BV(6)){
             val-=1000;
          }
          return 0;
       }
    }
    Danke im Voraus
    kesandal

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beitrge
    656
    Mit Timern arbeiten ist immer gut, damit kannst du die Taste auch gleich entprellen. Ich htte das einfach ungefhr so gemacht:

    while(1)
    {
    if(Taste1)
    var++;
    else if(Taste2)
    var--;

    _delay_ms(150);
    WertAnzeigen();
    }
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beitrge
    4.556
    Zitat Zitat von Kesandal Beitrag anzeigen
    Hallo,

    zugegeben... Ich wei nicht welchen Titel ich whlen soll

    Ich habe hier eine Aufgabe aus unserem Kurs bei der ich nicht so recht weiterkomme:



    Was ich machen soll ist mir (glaube ich ) klar.
    Ich verstehe jedoch nicht was mit dem fett-markierten Satz genau gemeint ist.
    Frequenz....
    Soll ich hier mit irgendeinem Timer arbeiten? - oder wie stellen sich die Herren das vor


    Mein Ansatz ist der folgende:


    Code:
     
    // includes etc.
    
    int main() {
       DDRC = 0xFF;
       lcd_init();
       unsigned int val = 0;
       while(1){
          lcd_setcursor(0, 0);
          lcd_putdez_uint(val);
          _delay_ms(100);
     
          while ((PINA) == 0xff);
     
          if (PINA & _BV(7)){
             val+=1000;
          }
          if (PINA & _BV(6)){
             val-=1000;
          }
          return 0;
       }
    }
    Danke im Voraus
    kesandal
    1:Wenn Taste gedrckt dann Wert = Wert +/- 1
    2: Wait xyz s, = Zhlfrequenz
    3: Taste immer noch gedrckt dann bei 1 Weitermachen
    4: .......................

    Das wre die einfachste Form, man kann das natrlich auch mittels Timer IRQ machen und dort die Taste abfragen. Man sollte aber darauf achten gengend Zeit fr "einen" Tastendruck zu lassen, sonst zhlt das immer gleich mehrmals . Vorteil des IRQ, der Prozessor kann nebenbei noch andere Aufgaben erledigen.

    Gru Richard

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Sdpfalz
    Alter
    43
    Beitrge
    2.240
    ich hab das gerade bei einem Projekt so gemacht:

    Tastenabfrag im Timer Int, der alle 10ms kommt.
    Wenn Taste gedrckt, dann werden beide Variablen hochgezhlt, die erste bis 4, dann wird die Taste als gedrckt erkannt und der Tastenwert
    wird in eine globale Variable geschrieben. Die zweite Variable kann hoch bis 200 zhlen, das sind dann 2 Sekunden, sprich die Taste lange gedrckt und es wird ebenfalls ein globales Flag gesetzt.
    Wird zwischendurch keine Taste als gedrckt gelesen werden beide Zhlariablen auf 0 gesetzt, Das FLag gelscht, der Tastenwert auf 0 und die
    Aufwrtszhlerei beginnt beim nchsten Tastendruck von vorne.

    Dann habe ich in der Mainloop nur noch die Abfrage ob ein Tastenwert >0 da ist, wenn Tastenwert gesetzt, dann erhhe / erniedrige um 1, wenn Langzeitflag gesetzt dann eben nochmal 3 dazu oder herunter.
    Vor den Erfolg haben die Gtter den Schwei gesetzt

  5. #5
    Moderator Robotik Visionr Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beitrge
    5.782
    Blog-Eintrge
    8
    Eine Version fr die bee:

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include "lcd_lib.c"
    
    #define taster_auf (lcd_getkeys()&1) // true wenn Taster gedrckt
    #define taster_ab  (lcd_getkeys()&2)
    
    uint16_t val = 0; // globale Variable fr den Wert
    
    void lcd_put_val(void) // val auf LCD ausgeben
    {
    	// lcd_setcursor(0, 0);
    	// lcd_putdez_uint(val);
    	lcd_locate(0, 0);
    	lcd_writeInteger(val, 10);
    	lcd_writeString("  ");
    }
    
    int main(void) {
    
    	lcd_init();
    	lcd_writeString("Hello");
    	while(!taster_auf && !taster_ab);
    	lcd_cls();
    	while(taster_auf || taster_ab);
            lcd_put_val();
       
    	while(1)
    	{
    		if(taster_auf && !taster_ab && (val<999))
    		{
    			val++;
    			lcd_put_val();
    			_delay_ms(300); // Startdelay
    			while(taster_auf && !taster_ab && (val<995))
    			{
    				val+=5;
    				lcd_put_val();
    				_delay_ms(200); // Wiederholung
    			}
    		}
    
    		if(!taster_auf && taster_ab && (val>0))
    		{
    			val--;
    			lcd_put_val();
    			_delay_ms(300);
    			while(!taster_auf && taster_ab && (val>5))
    			{
    				val-=5;
    				lcd_put_val();
    				_delay_ms(200);
    			}
    		}
    	}
    	return 0;
    }

    Atmels products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

hnliche Themen

  1. toggle wenn lnger wie
    Von voll-milch im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 17.01.2010, 21:39
  2. suche Bauteil das Druck ausbt um Tasten zu drcken
    Von flubbyeick im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 10.03.2009, 00:08
  3. Taster / Schalter drcken
    Von pyrox im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 17.09.2008, 00:55
  4. Lnger zurckfahren
    Von Lync im Forum Asuro
    Antworten: 13
    Letzter Beitrag: 24.07.2007, 21:39
  5. Abfragen aller 8 Taster am STK500, wie mach ich das?
    Von Edi im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 09.11.2006, 16:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •