Hallo
Es dürften bei einzeln gedrückten Tasten nur die sechs Werte 1, 2, 4, 8, 16 und 32 auftreten, alles andere würde bei Tastenabfragen ohne Überprüfung zu unerwarteten Effekten führen. Ganz anders sieht es auch aus wenn man PollSwitch() häufiger ausführt. Dann sind es nicht einzelne Ausreiser sondern ganze Serien!
Das Programm prüft bei laufenden Motoren einen von PollSwitch() gelieferten Wert auf die einzelnen Tasten. Bei unsinnigen Werten werden diese zum Terminal gesendet. K5 (Wert 2) ist Testtaste:
Code:
#include "asuro.h"
int main (void)
{
unsigned char x; //definition der pollswitch-variable
unsigned char string [5]; //definition eines string mit max. 5 zeichen
Init ();
/********************************************
/* Achtung! Der asuro kann jetzt losfahren! *
/********************************************/
MotorSpeed(150,150); // elektrischen Krach machen
while (1)
{
for(x=0; x<5; x++) string[x]= 0; // String mit Endekennungen vorbelegen
x = PollSwitch (); //taster werden abgefragt
if(x)
switch(x)
{
case 1: StatusLED(YELLOW); break; // reguläre Tastenwerte prüfen
//case 2: StatusLED(YELLOW); break;
case 4: StatusLED(YELLOW); break;
case 8: StatusLED(YELLOW); break;
case 16: StatusLED(YELLOW); break;
case 32: StatusLED(YELLOW); break;
default : // Schrott empfangen
{
StatusLED(RED);
itoa (x, string, 10); //wert wird umgewandelt und in string gespeichert
SerWrite (string, 5); //string wird an terminal geschrieben
SerWrite ("\n\r", 2); //umbruch an terminal schreiben
break;
}
}
}
}
Bei mir wird bei diesem Test auch einiges an Schrott empfangen. Das ist eben normal und sollte softwaremäßig ausgefiltert werden.
Gruß
mic
[Edit]
Zum Vergleich noch mit einfacher Überprüfung:
if(x) wird zu if(x && (x == PollSwitch()))
Testtaster K5 ist natürlich Schwachsinn. Mehr als eine Taste gleichzeitig ist der Test
Lesezeichen