also Schrittmotoren brauchen viele ports, das ist nicht so einfach. aber mit einem motortreiber (www.robotikhardware.de) sollte das klappen. wenn du auf odometrie (und damit auch auf die backleds) verzichtest, und die motorenports noch nutzt, konnte es aber auch so gehen.
Ich hab die Sache mit Ports als Aus- / Eingang schalten und Pegel setzten usw. erst mithilfe der Asurobücher verstanden. Kann ich dir wirklich empfehlen. Weil wenn du den Code jetzt kopierst und ihn dann doch nicht verstehst (ich will dir nichts unterstellen) bringt es ja auch nicht viel. Soll nicht heißen, dass ich dich für dumm halte, nur, falls du es nicht verstehst, kann ich dir nur ans Herz legen, nachzufragen. Du wirst zwar mit copy & paste dein Programm zum Laufen bringen, aber nachher hat man mehr davon, wenn man alles bis ins Detail verstanden hat.
Auf die Odometrie würde ich nicht verzichten, es sei denn, deine Schrittmotoren sollen die Asuromotoren ersetzen. Dann brauchst du die natürlich nicht mehr.
Funktion encoder.c ist super, sollte aber noch verbessert werden um Returnwert (int) oder (char), wenn die Räder sich nicht drehen( z.B. Hindernis, Verschmutzung) oder die Drehung der Scheiben nicht erkannt wird. (Verschmuzung der Encoder-Scheiben etc). Vielleicht kann man auch die Rückgabe über die Input_werte ( distance , speed ) machen (geht vielleicht mit Call by Reference ?). in denen man die tatsächlichen Zählwerte links und rechts bei Stillstand übergibt.
Im aufrufenden Programm könnte dann über die Returnwerte z.B die Fahrtrichtung geändert werden oder die Motoren abgeschaltet werden.
call by reference währe eine idee, aber einfacher ist denke ich, dass der return wert glwich dem wert ist, bei dem keine drehung mehr festgestellt wird. wenn also 400 ticks gefahren werden soll, wird ja bei jedem gemessenen tick eins abgezogen. wenn dann nach 150 ticks keine drehung mehr erkannt wird, wird 150 zurückgegeben - dann kann man ganz gut finden an welcher stelle es hakt und evtl sogar, was die beste aktion wäre die durchgeführt werden soll.
Rückgabewerte aus encoder funktion ( Go(distance,speed)
Hallo damaltor, Dank für die schnelle Antwort. hab mal gleich mit der Go-Funktion in encoder experimentiert, anstelle
void Go (...) rufe ich sie mit
int Go (auf) . Bei festfahren (bei mir gehts wohl ab 200ms) bekomme
ich in dem int-Wert zurück, ob beide Räder stehen (=3) links steht(=1)
oder rechts (2). Das aufrufende Programm kann dann reagieren.
Lesezeichen