Wenn das hier so ist, wie in echtem ANSI C, dann solltest du erstmal die verwendeten Variablen initialisieren.
Ob das allerdings dein Problem behebt, wage ich zu bezweifeln.Code:int i = 0; . . . unsigned char taster = 0;
Hallo,
ich habe gerade meinen Asuro fertig zusammen gebaut und habe ine kleines Problem: Eingenlich scheint alles zu klappen beim selftest, nur der linke Motor dreht aus irgend einem Grund langsamer. Die Kontakte sind eigentlich ganz ordentlich gelötet und beide Motore sind auch auch gleich leichtgängig zu drehen... wenn ich aber beide mit 255 anstuere macht der roboter eine doch recht beachtliche Linkskurve.... hat da jmd eine Idee?
und dann habe ich mich mal an einer ersten Kleinigkeit probiert: Der ROboter fährt gerade aus (wenn die Motoren das machen würden) und wenn ein Sensor gedrückt wird fährt er mit ner linkskurve zurück und nach ein paar Sek wieder geradeaus... so weit so gut nun fährt der roboter los und wenn ich nen Taster drücke fährt er auch zurück, aber danach macht er was er will, mal vor dann zurück.. woran kann das liegen? Hier mal der Code:
wäre für Hilfe dankebar - gruß dennisCode:#include "asuro.h" int main(void) { Init(); int i; while(1) { MotorDir(FWD,FWD); MotorSpeed(255,255); StatusLED(GREEN); unsigned char taster; taster = PollSwitch(); taster = PollSwitch(); taster = PollSwitch(); if(taster>0) { for (i=0; i<900; i++) { StatusLED(RED); MotorDir(RWD,RWD); MotorSpeed(100,200); Sleep(216); } MotorSpeed(0,0); } } while(1); return 0; }
Wenn das hier so ist, wie in echtem ANSI C, dann solltest du erstmal die verwendeten Variablen initialisieren.
Ob das allerdings dein Problem behebt, wage ich zu bezweifeln.Code:int i = 0; . . . unsigned char taster = 0;
ich initialisiere i doch ganz am amfang mit "int i;" und setzte dann i bei jedem schleifenaufruf auf 0 zurück, oder?
Du deklarierst i mit
Danach hat i aber einen undefinierten Wert. i initialisieren, also ihm einen definierten Anfangswert geben, tust du mitCode:int i;
Wobei i danach dann statt des undefinierten Zustands logischerweise den Wert 0 hat.Code:int i = 0;
ok, ich probiere es mal aus - kann ja nie schaden)
Genau... Erwarte deinen Bericht.![]()
Hallo,
hat leider nichts gebracht..((
Hmm, aber wenigstens ist es jetzt programmatisch korrekt.
Jetzt kann ich dir aber nicht weiterhelfen, da der Code für mich als reiner Programmierer zwar unsauber, aber doch lauffähig aussieht. Ich kenne mich mit den Funktionen des Asuro gar nicht aus. Deshalb kann ich dir auch nicht sagen, welchen Wert 'taster' haben müsste, nach dem der eigentliche Taster einmal gedrückt und einmal wieder losgelassen wurde. Hätte er - was nach meinem Verständnis so sein müsste - nach dem Loslassen wieder den Wert 0, müsste dein Programm funktionieren. Das scheint nicht der Fall zu sein. Hast du die Möglichkeit, dir den Wert von 'taster' ausgeben zu lassen? Irgendwie mit 'nem Display oder so? Oder gibt es eine Art "Simulator" oder Debugger für solche Zwecke?
Hi, habe gerade meine Vermutung nochmal in der Praxis bestätigen lassen:
es liegt an deiner Abfrage
stattdessen:Code:unsigned char taster; taster = PollSwitch(); taster = PollSwitch(); taster = PollSwitch(); if(taster>0) {
Dann funktioniertsCode:if(PollSwitch()>0) {
Wieso hast du überhaupt drei Mal hintereinander den Wert übergeben?
Also meiner Meinung nach müsste es am Typ "unsigned char" liegen - PollSwitch() gibt doch eine integer Wert zurück oder? Musste mal in die asuro.h oder asuro.c schaun
EDIT: hm nach einer kleinen recherche käme ich auch auf deinen code wenn ich es ausformulieren müsste...versteh nicht, warum dein code nicht funktiniert, aber irgendwie liegt es trotzdem daran - bei mir zumindest
"Die Matratze ist sehr Komfortabel und es ist mit kurtzen Handgriffen zusammenzuklappen keinen großen aufwand nur die zwei enden aneinanderklappen und einen rimen einsetzen, fertig."
Drei mal hintereinander vermute ich mal zur Entprellung des Tasters.
Und solange der von einer Funktion zurückgegebene Wert <= 255 (bei unsigned) ist, ist es kein Problem, einen int nach char zu casten. Bei Werten > 255 gibt es allerdings einen Überlauf.
Lesezeichen