
Zitat von
Hubert.G
In der ISR sollst du auch nicht warten.
Ist warten überhaupt sinnvoll?
Wäre es nicht besser wenn er zurück fährt oder dreht?
Das ganze war ja auch nur zu Testzwecken. Außerdem impliziert das zurückfahren ja auch wieder ein Warten, nämlich so lange wie er zurück fahren soll:
Code:
void FahreZurueck(int speed, int msek)
{
MotorDir(RWD, RWD);
Geschwindigkeit(speed, speed);
Warte(msek);
MotorDir(FWD, FWD);
HalteAn();
}
ISR(INT1_vect)
{
StatusLED(RED);
abgebrochen=1;
StopSwitch();
HalteAn();
FahreZurueck(120, 1000);
StatusLED(YELLOW);
}
So geht es nämlich auch nicht, er kommt aus dem "Warte" nicht mehr raus und fährt nur noch zurück.

Zitat von
Hubert.G
Sonst in der ISR ein Flag für warten, eine eigene Funktion für Warten und dort dann das Flag für Beschleunigen setzen.
Das verstehe ich nicht ganz. Mit "Flag" meinst du wieder eine globale Variable, die dann in der Beschleunigen-Funktion abgefragt wird und dann wird in der Beschleunigen Funktion gewartet? Das ist doch irgendwie nicht ganz der Sinn der Sache. Ich dachte, das Behandeln der Kollision wäre Sinn der ISR?
Sorry, das ich hier so pingelig bin, aber es muss doch möglich sein, in eine ISR ein Sleep einzubauen!
Mal so nebenbei: Könnte es sein, dass mein Problem mit der Start bzw. StopSwitch zu tun hat? Was machen diese Funktionen eigentlich, das habe ich noch nicht verstanden.
Achja, hier meine vereinfachte main.c:
Code:
#include "asuro.h"
#include "funktionen.h"
volatile int abgebrochen = 0;
int main(void)
{
// Initialisierung
Init();
sei();
StartSwitch();
// hier kommt der Hauptteil des Programms
while (1)
{
StatusLED(GREEN);
Beschleunige(120, 150, 3);
}
return 0;
}
Lesezeichen