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