-         

Ergebnis 1 bis 5 von 5

Thema: Problem mit M32 und Tastern

  1. #1

    Problem mit M32 und Tastern

    Anzeige

    Hallo,

    kann mir jemand Tipps zu dem folgenden Problem geben?

    Wenn ich Taster 1 sehr schnell hintereinander drücke, führt mein Programm dann auf einmal Taster 2 aus und nicht nocheinmal den Teil von Taster 1.

    Grüsse an Alle
    Adleo

    Mein Master-Code:
    Code:
    int main(void)
    {
    	initRP6Control();
    	initLCD();
    	I2CTWI_initMaster(100); // Als Master initialisieren und Frequenz 100 einstellen
    	
    	uint8_t key_abfrage=0;
    	uint8_t anzeige=1;
    	uint8_t Batterie;
    	uint16_t SpeedLight;
    
    	clearLCD();
    	showScreenLCD("Drucke einen","Taster!!!!!!!!!!");
    
    	while(true){
    		if(getStopwatch1()>2000){
    			clearLCD();
    			showScreenLCD("Drucke einen","Taster!!!!!!!!!!");
    			setStopwatch1(0);
    		}
    		
    		key_abfrage=0;
    		key_abfrage=getPressedKeyNumber();
    		
    		if (key_abfrage != 0){ //Taster gedrückt?
    			
    			anzeige=1;
    			
    			writeInteger(key_abfrage,DEC);
    			writeChar('\n');
    			
    			sound(180,80,25);
    			sound(220,80,0);
    			
    			switch(key_abfrage){ //Welcher Taster gedrückt....
    				
    				case 1:
    					BaseADC(); //Auslesen
    					
    					Durchschnitt(LichtL,LichtR);
    					
    					SpeedLight=70+(80/950)*(DSchnitt-50);
    					
    					BaseMotorSpeed(SpeedLight);
    					
    					
    					
    					
    					clearLCD();
    					showScreenLCD("Geschwindigkeit:","");
    					setCursorPosLCD(1,0);
    					writeIntegerLengthLCD(SpeedLight, DEC, 4);
    					setStopwatch1(0);
    					startStopwatch1();
    					//mSleep(2000);
    					key_abfrage=0;
    					break;
    			
    				case 2:
    				clearLCD();
    				
    				BaseLEDS(0b000000);
    				
    				showScreenLCD("Die LED ist aus!","!!!!!!!!!!!!!!!!");
    				mSleep(2000);
    				clearLCD();
    				break;
    				
    				case 3:
    				clearLCD();
    				showScreenLCD("Batterie: ","ist das OK?");
    				
    				setCursorPosLCD(0, 10);
    				
    				if (!I2CTWI_isBusy())
    				{
    					I2CTWI_transmitByte(10, 1);
    					Batterie = I2CTWI_readByte(10); //Batterie auslesen
    				}
    				
    				writeIntegerLengthLCD(Batterie, DEC, 4); 
    				mSleep(2000);
    				break;
    				
    				case 4:
    				clearLCD();
    				showScreenLCD("Warnung! Der","Motor ist an!");
    				
    				BaseMotorStart(); //Motor starten
    				
    				clearLCD();
    				showScreenLCD("Motor lauft!","!!!!!!!!!!!!!!!!");
    				mSleep(2000);
    				break;
    				
    				case 5:
    				BaseMotorStop();
    				
    				clearLCD();
    				showScreenLCD("Motor wird","angehalten!!!!!!");
    				mSleep(2000);
    				break;
    			}
    			
    		}
    		
    	}
    	return 0;
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    17.12.2009
    Beiträge
    8
    Hallo Adle,
    das ist bei mir auch so
    man kan das alersings vverbessern indem man die werten in der controllib anpasst.

    ___________________

    Gruß Robotuner

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Virus
    Registriert seit
    15.09.2009
    Ort
    Duisburg
    Alter
    22
    Beiträge
    527
    hab ich auch das problem, aber nur wenn ich ganz schnell hintereinander einen taster drücke.

    warum musst du denn den taster sehr schnell hintereinander drücken?
    dafür sind sie garnicht ausgelegt.
    Mit hochohmigen Grüßen
    Virus

    Es lebe der Digitalkäse !

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    Die Taster sind ALLE über ein Widerstandsnetzwerk mit einem Analog/Digital Wandler verbunden um Pins zu sparen (s. Schaltplan). Würden ja sonst 5 I/O Pins dafür verschwendet...

    d.h. jeder Tastendruck resultiert in einer bestimmte Spannung die vom ADC gemessen wird und dem jeweiligen Taster zugeordnet werden kann. Die Taster müssen schon eine gewisse Zeit gedrückt sein damit die korrekt erkannt werden können. Und ja man kann die Werte in der Lib noch anpassen (mit den Messwerten Vergleichen die im Display angezeigt werden und ggf. erhöhen oder verringern). Und es bringt natürlich auch was über mehrere Messwerte zu mitteln.

    MfG,
    SlyD

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Virus
    Registriert seit
    15.09.2009
    Ort
    Duisburg
    Alter
    22
    Beiträge
    527
    ich hab es mal mit dem beispiel probiert, bei t1 kommt 0002 bis 0024 raus, bei T2 511-550, bei T3 680-720, bei T4 760-816 und T5 818-825.

    wenn ich die taster und den darunterliegenden platienenteil mit der hand erwärme verbessert sich die genauigkeit, das heist ein druck auf einem taster bringt mit deutlich höherer genauigkeit auch den dazugehöhrigen effekt am beeper und aufm display und die werte der unterschiedlichen taster distanzieren sich
    Mit hochohmigen Grüßen
    Virus

    Es lebe der Digitalkäse !

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •