Zehplusplus
11.04.2010, 20:02
Ich habe ein Problem mit dem Taster auf der Snake-Platine. Zur Absicht: Ich möchte 2 Betriebsarten (Vor der Wärmequelle flüchten, und ihr folgen) einrichten, die vor dem Abarbeiten des Programmes über die Kollisionstaster eingegeben werden (jeder Taster steht für ne Betriebsart) und mit dem Taster der Snake-Platine bestätigt werden. Dafür benutze ich eine Funktion, deren Quellcode ich angehängt habe. Diese funzt aber nicht, deshalb hab ich sie mal aufs simpelste zerlegt. Sie soll jetzt bei gedrücktem Taster ( if ((PIND&(1<<6))==1) ) die linke BackLED anmachen, bei nicht-gedrücktem Taster (if ((PIND&(1<<6))==0) ) die rechte. Wird ein Kollisionstaster gedrückt, werden beide ausgemacht. Der Asuro arbeitet allerdings folgendes ab:
Bei gedrücktem Taster macht er nicht, wie verlangt, die Linke an, sondern die Rechte. Bei gedrücktem Kollisionstaster macht er sie aus (braver Asuro).
Bei nicht gedrücktem Taster (und dieser Zustand herrscht zu Beginn der Schleife) leuchtet keine der beiden LED. Und diese Schleife wird auch NIE abgearbeitet!
Mysteriös, kann mir einer helfen???
int Betriebsart(int b) //ACHTUNG, was passiert, wenn keine Betriebsart ausgewählt wird, aber der Taster gedrückt wird???
{
int a,x,Taster;
for (x=0; x< 999; x++) //diese Schleife steht, um durch die rote LED zu signalisieren,
{ //dass der Prozessor die Schleife überhaupt abarbeitet
StatusLED(RED);
Sleep(216);
}
while (Taster==0) //solange der int Taster null ist, (und er ist es verdammt lange,
{ //diese Schleife abarbeiten
if ((PIND&(1<<6))==1) //falls der Schalter der Snake-Platine gedrückt ist, //Mit dem Taster der Snakeplatine wird hierdurch die Betriebsart bestätigt, um eine Korrektur der Wahl...
{ //... zu gewährleisten. Weiter wird verhindet, dass der Kollisionstaster noch gedrückt ist, wenn ins Programm gesprungen wird
BackLED(ON,OFF); //... die linke BackLED anschalten
}
if ((PIND&(1<<6))==0) //falls der Schalter nicht gedrückt ist,
{
BackLED(OFF,ON); //die rechte on
}
// BackLED(OFF,OFF);
a=PollSwitch(); //falls einer der Kollisionstaster gedrückt wird, //Bit0(1) Taster 6, Bit 5 (32) =Taster1
if (a!=0)
{
BackLED(OFF,OFF); //die BackLED`s wieder ausschalten
}
Bei gedrücktem Taster macht er nicht, wie verlangt, die Linke an, sondern die Rechte. Bei gedrücktem Kollisionstaster macht er sie aus (braver Asuro).
Bei nicht gedrücktem Taster (und dieser Zustand herrscht zu Beginn der Schleife) leuchtet keine der beiden LED. Und diese Schleife wird auch NIE abgearbeitet!
Mysteriös, kann mir einer helfen???
int Betriebsart(int b) //ACHTUNG, was passiert, wenn keine Betriebsart ausgewählt wird, aber der Taster gedrückt wird???
{
int a,x,Taster;
for (x=0; x< 999; x++) //diese Schleife steht, um durch die rote LED zu signalisieren,
{ //dass der Prozessor die Schleife überhaupt abarbeitet
StatusLED(RED);
Sleep(216);
}
while (Taster==0) //solange der int Taster null ist, (und er ist es verdammt lange,
{ //diese Schleife abarbeiten
if ((PIND&(1<<6))==1) //falls der Schalter der Snake-Platine gedrückt ist, //Mit dem Taster der Snakeplatine wird hierdurch die Betriebsart bestätigt, um eine Korrektur der Wahl...
{ //... zu gewährleisten. Weiter wird verhindet, dass der Kollisionstaster noch gedrückt ist, wenn ins Programm gesprungen wird
BackLED(ON,OFF); //... die linke BackLED anschalten
}
if ((PIND&(1<<6))==0) //falls der Schalter nicht gedrückt ist,
{
BackLED(OFF,ON); //die rechte on
}
// BackLED(OFF,OFF);
a=PollSwitch(); //falls einer der Kollisionstaster gedrückt wird, //Bit0(1) Taster 6, Bit 5 (32) =Taster1
if (a!=0)
{
BackLED(OFF,OFF); //die BackLED`s wieder ausschalten
}