hallo,
als erstes solltest du dir die funktion Pollswitch() noch einmal genauer ansehen (asuro manual abschnitt 9.2.12.). dann solltest du sehen dass im anfangspost der ausdruck
PollSwitch()==1
nicht dann wahr ist wenn irgendein taster gedrückt ist, sondern nur wenn K6 (und kein anderer gleichzeitig) gedrückt ist. der else block (vorwärtsfahrt) sollte also eigentlich entgegen deiner angabe auch ohne drücken eines tasters ausgeführt werden...!?
weiters siehst du dass PollSwitch ein unsigned char als ergebnis liefert, das sollte dich bei den 'letzten unklarheiten im code' weiterbringen.
Wieso schreibt man eigendlich
if (t1==0 && t1==t2)
das ist eine gute frage auf deren antwort ich auch gespannt bin. eigentlich sollte
if (t1==0 && t2==0)
performanter sein. du kannst auch
if (PollSwitch() == 0 && PollSwitch() == 0)
schreiben, dann sparst du dir die (expliziten) variablen.
Und warum kürzt ir PollSwitch mit t ab was hat das für ein sinn
t steht vermutlich kurz für temp, eine beliebte möglichkeit fehleranfälligen code zu provozieren. man sollte besser möglichst aussagekräftige variablennamen wählen um den code möglichst les- und wartbar zu halten. auch ist temp ansich wenig aussagekräftig. trotzdem ist die verwendung von solchen nicht-aussagekräftigen bezeichnern in codeschnipseln eines forumsbeitrags üblich und auch praktikabel, da es sich ja meist um eine überschaubare anzahl an codezeilen handelt.
EDIT:
ich sehe gerade dass der code immer noch nicht funktioniert. und ich hätte da eine vermutung warum das so ist:
da PollSwitch ja beim ersten aufruf (t1) vermutlich einen falschen wert leifert wird PollSwitch ein weiteres mal aufgerufen (t2), was den korrekten wert liefern soll. also können t1 und t2 nur dann gleich sein, wenn beide ergebnisse richtig, oder beide falsch sind, und dem ist offenbar nicht so.
also sollte man so vorgehen:
Code:
PollSwitch(); //das erste ergebnis interessiert nicht, da ohnehin falsch
if (PollSwitch() == 0)
{
//...
}
Anmerkung: da ein richtiges ergebnis von PollSwitch vom ladezustand eines kondensators abhängt, kann es laut asuro manual auch mehrere PollSwitch aufrufe benötigen um ein korrektes ergebnis zu erhalten. ggf also so etwas:
Code:
for (int i = 0; i < 4; i++)
{
PollSwitch();
}
if (PollSwitch() == 0)
{
//...
}
oder auch so:
Code:
PollSwitch();
PollSwitch();
PollSwitch();
PollSwitch();
if (PollSwitch() == 0)
{
//...
}
lg
Lesezeichen