copious,

was mir bei deiner aufstellung noch fehlt, ist der programmfluß; wie spielen die dinge zusammen? das ist gerade bei uC-programmierung IMHO ganz wesentlich. wenn du von bewegungsabläufen sprichst, wirst du genaue zeitabläufe brauchen, damit kannst du entweder mit delays arbeiten:

Code:
while(1) {
  start_bewegung();
  _delay_ms(10.0);
  stop_bewegung();
  read_sensors();
...
}
damit kann dann aber während der delays nix mehr passieren, wenn zb ein hindernis auftritt, kann das erst nachher erkannt werden.

besser, aber auch komplizierter, ist sowas:

Code:
while(1) {
  if(ausloeser) { 
    start_bewegung();
    set_timer(1, 10);
  }
  if(timer_elapsed(1))
    stop_bewegung();

  read_sensors();
...
}
damit läuft dann alles andere weiter, während auf das ende der bewegung gewartet wird, und reaktionen auf zb hindernisse können schnell erfolgen. dafür ist die dauer nicht ganz so exakt wie beim ersten fall, weil das ablaufen des timers erst erkannt wird, wenn die endlosschleife wieder bei "timer_elapsed" vorbeikommt...