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;
}