Hallo!
Ich habe einen roboter mit einem sharp entfernungssensor, der von einem Schrittmotor gedreht wird.
Alle 50 Microsteps wird ein Entfernungswert erfasst, d.h. 32 Entfernungswerte auf 180°.
Außerdem ist der Controller noch für das Fahren, Spannungen, Lichtstärke, ... und tausend andere Sachen zuständig.

Ich bin Anfänger, darum weiß ich nicht genau, wie ich das programmieren soll, dass er alles gleichzeitig machen kann.
Also jetzt habe ich die enfernungssensor-dreh-steuerung so gemacht, das er einfach in einer endlosschleife folgende schritte macht:
- Schrittmotor-Controller über I2C den Befehl geben, dass er 50 schritte drehen soll
- Die Aktuelle Schrittmotor position abfragen, und warten bis der Schrittmotor seine Position erreicht hat
- Mit der AD-Wandlung beginnen
- Warten bis die AD-Wandlung fertig ist
...und alles wieder von vorne.

Das war mal das Testprogramm für den Drehturm, bei diesem Test wurden alle anderen Funktionen vernachlässigt. Jetzt muss ich aber diese anderen funktionen wieder dazugeben, aber ich weiß nicht wie. Diese ganzen warteschleifen zerstören mir mein ganzes Programm.

Ich glaube die lösung sind Interrupts, nur ich weiß nicht wie ich das mit denen machen soll. Ich glaube, das warten auf den AD wandler kann ich leicht mit einem interrupt umgehen, weil ich ja einstellen kann, dass der AD-Wandler einen Interrupt auslöst, wenn er fertig ist. Dann müsste ich nicht auf das AD-Wandler-fertig-Flag pollen.

Wenn ich 100ms warten will, aber nebenbei auch was machen will, wie kann ich das machen? Kann ich einen Timer machen mit einem Interrupt auf diesen Timer, dann weiß ich in welchen Abständen der Interrupt ausgelöst wird. Dann zähle ich in der Interruptroutine eine globale variable hoch, und dies frage ich dann in meinem programm irgendwie ab und kann so mit einer if abfrage warten, bis irgendein wert erreicht ist, und dann irgendeine aktion machen?

Geht das oder hab ich überhaupt nichts kapiert?
Meine Idee klingt jedenfalls ziehmlich unprofessionell.

lg Christoph