
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> hi, ich möchte für ein schulprojekt(ballabschussgerät) einen motor ansteuern, welcher mir eine Ballnachführung regelt. Das heißt, der Motor ist so lange ein, bis ein endschalter nicht gedrückt ist. Ist der Endschalter, wenn er gedrückt wird "ein" oder "aus"? Ich vermute mal, Du vermutest "ein", richtig? Hast Du das mal mit einem kleinen testprogramm überprüft? Das hängt nämlich von der Beschaltung ab. Wenn Du einen Schließer gegen Masse hast, wie bei der CC wegen interner Pull-Ups üblich, ist es nämlich genau umgekehrt: Gedrückt liest Du am Port 0 (Off) und losgelassen -1 (On) > Wird dieser gedrückt, wartet der Motor eine bestimmte Zeit (pause) und setzt sich dann wieder in Bewegung. Durch die pause ist die Ballfolge variable. > Außerdem muss der Motor am Anfang immer vom gedrückten Schalter aus starten(jetzt muss der Motor bei Schalter 1 nicht warten sonder wegstarten) "Am Anfang" interpretiere ich als "beim allerersten Start und nur dann", richtig? Also zeitlich gesehen andersherum, oder? Am Anfang ist der Schalter aus und der Motor aus. Der Motor bleibt aus, bis der Schalter (manuell?) auf "ein" geht. Ab dann läuft folgender Zyklus: 1) Der Motor läuft, bis der Endschalter auf "ein" geht. 2) Dann wartet er eine pause und läuft dann weiter, unabhängig davon, ob der Endschalter ein oder aus ist? 3) Zyklus von vorne? Aber dann kann es doch passieren, dass eine millionstel Sekunde, nachdem die pause vorbei und der Motor wieder an ist, der Endschalter immer noch auf "ein" ist, dann zieht regel 1) und der Motor hat sich so gut wie nicht fortbewegt - ad infinitum. Oder wer garantiert, dass der Motor nur eingeschaltet wird, wenn der Endschalter nicht gedrückt ist? Beim allerersten Start ist er doch im Gegenteil sogar garantiert gedrückt! > und am Schluss auch dort wieder stehen bleiben. Was bedeutet "am Schluss". > Ich habe schon mehrere Lösungsansätze geschrieben, doch keine Funktioniert. Nun, "funktioniert nicht" eine denkbar grausame Fehlerbeschreibung, für jemanden, der Dir helfen will. Lässt es sich nicht compilieren? --> Fehlermeldung des Compilers bitte Tut es nicht, was es soll? --> An welcher Stelle obiger Beschreibung tut es was statt des erwarteten? > Könnte mir wer bitte einen Lösungsvorschlag schreiben? > wenn etwas zu ungenau erklärt ist, einfach fragen > > so in der art müsste das Programm ablaufen: > define schalter port[1] > define ballmotor port[2] > > > #loop1 > #anfang > if schalter = 1 then goto warten Die Werte von 1-Bit-Ports sind nie 1, sondern OFF (Basic-Konstante für 0) und ON (Basic-Konstante für -1) wie Manfred schon schrieb. Braucht man aber hier gar nicht, sondern if schalter then goto warten geht auch. > goto loop1 Da Du den wait-Befehl kennst, würde ich hier aber statt der Schleife und dem if einfach wait schalter schreiben, das ist klarer. (Aber nur, wenn der bei gedrückt wirklich ON anzeigt (siehe oben), sonst natürlich wait not schalter > > #loop > #warten > ballmotor = 1 > wait schalter > if schalter = 1 then ballmotor = 0 Siehe oben: Erst machst Du den Motor an und prüfst einen Bruchteil später, ob der Schalter an ist. Beim allerersten Start hast Du aber mit dem Anmachen gewartet, bis der Schalter an ist. Dann wette ich mal, bevor der Motor sich einen Millimeter bewegt hat, ist er auch schon wieder aus, weil der Schalter keine Zeit hatte, aus zu gehen. Zwotens: Nach wait schalter geht es dann weiter, wenn der Schalter an ist, richtig? Was soll denn dann das nachfolgende if schalter=1? Das ist doch dann immer true. > pause 50 > goto loop Aaaalso, mal angenommen, Deine Schalterlogik stimmt und "gedrückt" heißt ON (was Du bitte noch verifizierst), und angenommen, Deine Höllenmaschine funktioniert so, dass der Endschalter nach einer gewissen Zeit des Laufens des Motos auf OFF geht, und dass der Motor danach noch solange laufen soll, bis der Schalte wieder auf ON geht, dann würde ich das so schreiben. #anfang wait schalter ' warten, bis erstmals Endschalter gedrückt #loop ballmotor = ON ' Maschine läuft, alle Mann in Deckung wait not schalter ' warten, bis der Motor den Endschalter frei gemacht hat wait schalter ' warten, bis der Ball? den Endschalter wieder betätigt ballmotor = OFF ' Anhalten pause 50 goto loop Aber was schreibe ich mir die Finger wund, das steht ja auch alles schon so auf Manfred Homepage ... <SCNR> HTH Bye Achim |
| Antwort schreiben |