Hast du mal geprüft welche Werte die Taster zurückgeben? Vielleicht sind bei dir die Taster werte falsch und er bekommt immer einen Wert zurück der größer als null ist.
mfg
Erik
Irgendwie sprint der immer in else. Der Läuft das Programm einfach von oben nach unten durch.
Woran kann das liegen?
Hier noch mal das Programm:
Lg christoph[/code]Code:#include "asuro.h" int main(void) { unsigned char taste; Init(); while(1) { PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); PollSwitch(); taste = PollSwitch(); if(taste == 0) { StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(150,150);} else { MotorSpeed(0,0); MotorDir(RWD,RWD); MotorSpeed(150,150); Sleep (36); MotorDir(FWD,RWD); StatusLED(RED); MotorSpeed(100,90); Sleep (36); SerWrite("Mann ich hab zu tun, verschwinde! Ich muss weiter!",40); MotorSpeed(0,0); } } }
Hast du mal geprüft welche Werte die Taster zurückgeben? Vielleicht sind bei dir die Taster werte falsch und er bekommt immer einen Wert zurück der größer als null ist.
mfg
Erik
Hallo ostoff,
ich hatte bei meinen ersten Versuchen auch erstmal ein paar Rückschläge zu verkraften, wie ich jetzt weiß oft aufgrund von falschen Vorstellungen was die Sensoren zurückgeben würde. Naiv wie ich war glaubte ich, ich könnte in etwa mit den Werten aus dem Handbuch rechnen.(Blasphemie, zumindes bei odo und line Sensoren ^^)
Nachdem ich mir ein paar Programme gebastelt hatte um die einzelnen Sensorwerte auszulesen und über das Hyperterminal auszugeben, lief es dann besser.
Hier das Programm um die Taster auszulesen, im Anhang das hex-File.
Eigentlich einfach, nur müssen die Zahlen die die Sensoren liefern in einen string, sozusagen die Ziffern aufgedröselt werden.
Ach ja die Taster-Werte sollten sein, von rechts nach links (wieder von hinten): 1, 2, 4, 8, 16, 32Code:#include "asuro.h" //die asuro-funktionen #include <stdlib.h> // hier kommt itao() her int main(void) { unsigned char taste; //der taster-wert unsigned char ctaste[3]; //taster-wert als string Init(); while(1) { //endlosschleife PollSwitch(); //tasterwerte auslesen PollSwitch(); //tasterwerte auslesen PollSwitch(); //tasterwerte auslesen taste = PollSwitch(); //tasterwerte auslesen und speichern if (taste != 0) { //wenn was gedrückt wurde itoa((int)taste,ctaste,10); //zahl in string(ziffern) umwandeln SerWrite(ctaste,3); //string uber IR senden SerWrite("\n\r",2); //neue zeile, return zum zeilen-anfang } } return 0; }
Ich habe das große Glück, dass bei mir alle Taster-Werte passen.
Ich habe dein proggi mal in meinen Asuro geflasht, was mir auffällt:
1. Deine Verzögerungen mit sleep sind zu kurz, die Zeit die gewartet wird ergibt sich aus "übergebene Zahl" / 72000 in Sekunden. (bei Verwendung der lib aus dem RN 36000)
2. Wenn man einen der drei rechten Taster (von hinten gesehen) erwischt, wechselt die StatusLED mal mehr mal weniger oft zu rot, obwohl der Taster schon längst wieder losgelassen wurde. Vielleicht kommt das vom prellen der Taster, obwohl ich dachte die wären mechanisch entprellt.
Gruß datobbs
Hallo
Was der mehrfache Aufruf von PollSwitch() bewirken soll, habe ich nie kapiert. Die Tastenwerte zum Terminal zu senden ist schon mal ein guter Ansatz. Wenn die Werte nicht genau 1,2,4,8,16 oder 32 sind, kann man die Taster auch kalibrieren. Dazu muss man in asuro.c die Formel am Ende der Funktion PollSwitch() ändern. Meist reicht es, wenn man mit dem 60er-Wert etwas spielt. Beispiel für meinen asuro:
Wirklich sinnvoll ist auch die mehrfache Überprüfung der von PollSwitch() zurückgelieferten Werte:return ((10240000L/(long)i-10000L)*63L+5000L)/10000;
https://www.roboternetz.de/phpBB2/viewtopic.php?t=36760
Übrigends ist das Forum voll von asuro-Tastenproblemen und Lösungen dafür, man sollte mal die Suchfunktion verwenden: "asuro AND tasten AND werte" oder "asuro AND pollswitch AND falsch" (ohne "" eingeben)
Sleep(36) verzögert eine tausendstel Sekunde, das ist kaum merklich. Deshalb kann man es in eine Schleife packen:
unsigned int i;
for (i=0;i<1000;i++) Sleep(36);
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
der mehrfache aufruf vom pollswitch entlädt den kondensator C6 (?) welcher mitschuld an den fehlerhaften werten hat.
Lesezeichen