Adleo
29.12.2009, 13:05
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:
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;
}
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:
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;
}