hm... so richtig schlau werde ich daraus auch nach viel Leserei und Experimentieren nicht...
Soll ich nun die Funktion PollSwitch() bearbeiten oder "einfach" durch Probieren die korrekten Werte in der test.c ermitteln? (Vielleicht hast du dafür eine bessere Lösung?.) Wenn ich die Hex-werte in der test.c verändere, dann ändert sich auch die "Reaktion" auf Druck auf die verschiedenen Taster... Nur scheint sich die Lage nach mehreren Versuchen eher zu "verschlimmbessern".
Eigentlich sagst du es ja schon, PollSwitch() setzt nicht die richtigen Bits, rein logisch sollte man also auch diese Funktion korrigieren aber da fehlt mir im Moment noch der Durchblick.
Gib mir doch bitte noch mal einen Tipp! (Es möge sich natürlich auch gern jeder Ander angesprochen fühlen!)
Gruß
Christian
EDIT: Manchmal hilft es doch, wenn man laut denkt... Eine deutliche Verbesserung tritt ein, wenn ich die Funktion PollSwitch() aus "asuro.c" so ändere: (Wenn ich damit alle Taster einzeln(!) ausprobiere, dann funktioniert´s. Etwas verwirrt reagiert mein Asuro aber, wenn ich mehrere Tasten gleichzeitig und wild durcheinander drücke.)
Code:
// return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5)); // Originalzeile
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));
Um das ganze zu verstehen, hilft es, sich noch mal das Kapitel zur PollSwitch()- Funktion in der Bediehnungsanleitung anzuschauen.
Ach ja: Hier mein gekürztes Testprogramm: (Spart echt Zeit...)
Code:
#include "asuro.h"
/* ---------------------- */
/* ----- Switch Test ---- */
/* K1 -> Status LED Green */
/* K2 -> Status LED RED */
/* K3 -> Line LED */
/* K4 -> Break LED Left */
/* K5 -> Break LED Rigth */
/* K6 -> Motor Left */
/* ---------------------- */
void SwitchTest(void)
{
unsigned char sw,tmp;
MotorDir(FWD,BREAK);
sw = PollSwitch();
StatusLED(OFF);
FrontLED(OFF);
BackLED(OFF,OFF);
MotorSpeed(0,0);
tmp = 0;
if (sw & 0x01)
MotorSpeed(200,0);
if (sw & 0x02) {
BackLED(OFF,ON);
tmp = ON;
}
if (sw & 0x04)
BackLED(ON,tmp);
if (sw & 0x08)
FrontLED(ON);
if (sw & 0x10)
RED_LED_ON;
if (sw & 0x20)
GREEN_LED_ON;
}/* END Switch Test ------------------------------ */
int main ( void ){
Init();
StatusLED(GREEN);
SerWrite("\n\r-- ASURO Tasterabfrage --\n\r",29);
SerWrite("\n\r Bitte jetzt die einzelnen Taster drücken!\n\r",48);
while(1){
SwitchTest();
SerWrite("\n\r",2);
}
return 0;
}
Lesezeichen