Pages: [1]   Go Down
Author Topic: loop() - Funktion neu starten  (Read 468 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Leute, ich bin neu hier und ich hoffe ihr könnt mir helfen  smiley-razz

Ich schreibe bis im Oktober/November meine Maturitätsarbeit (das schweizer Abi ^^) und habe mir dazu vorgenommen einen Quadrocopter auf Arduino-Basis zu bauen und natürlich zu programmieren.

Da ich gelesen habe, dass in Deutschland autonome (Flug-) Geräte, in deren Programmablauf nicht eingegriffen werden kann, verboten sind, dachte ich mir, dass ich lieber eine externe Fernsteuerung mit einbaue (natürlich auch um ein bisschen damit zu spielen smiley-wink ).

Um während dem automatischen Programmablauf in die Steuerung eingreifen zu können wird ein externer Interrupt ausgelöst (durch einen Schalter auf der Fernbedienung) und beendet, sobald dieser Schalter wieder in seine Ausgangsstellung gebracht wird.
Mein Problem dabei ist aber, dass nach der ISR die loop()-Funktion weiter ausgeführt wird, ich diese aber gerne neu gestartet hätte, da essentielle Sensordaten zu Beginn der loop-Schleife ermittelt werden.

Ich könnte mir denken, dass diese Sensorwerte immer wieder ermittelt werden, doch würde das das Programm nicht enorm “verkomplizieren“?

Ich hoffe ihr könnt mir helfen smiley

Gruss

flashi
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4690
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Du die loop()-Routine nicht sowieso sehr häufig ausführst (und somit kurz nach der Interrupt-Routine auch der loop() wieder von vorne beginnt), solltest Du dessen Strukturierung überdenken. Schmeiss alle delay()s raus und mach den loop() so schnell wie möglich. Dann sollte sich Dein Problem von selbst erledigen.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi pylon

Danke erstmal für deine Antwort.

Das Problem ist, dass die Hauptfunktion rein theoretisch nicht wiederholt werden soll/müsste, da sie im Prinzip eine einzige Anweisung enthält, die bis zum Eintreffen einer bestimmtem Situation weitergeführt wird und danach nicht mehr benötigt wird.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20184
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Definiere eine Modus-Variable (autonom/ferngesteuert) und nach dieser führst Du den einen oder den anderen Programmteil aus. 90% des Codes sind sowieso identisch in den beiden Modi.
Grüße Uwe
Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich sehe da keinerlei Sinn dahinter, einen Interrupt zu nutzen, da reicht auch einfaches Polling locker aus. Deine Reaktionsfähigkeit, den Schalter an der Fernbedienung umzulegen, steht ja in keinem Verhältnis zur Geschwindigkeit der Interruptauslösung. smiley-wink Ob du autonom oder remote fliegst, legst du in einer Statusvariablen ab, je nach Status wird dann in der loop gewählt, wie die Rotoren gesteuert werden.
Mein Vorredner hat ja schon den Schubs in die richtige Richtung gegeben: Vermeidung von unnötigen delays im Programmcode.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ach so habt ihr das gemeint!    smiley-fat smiley-money

achso, an das aufteilen hab ich gar nicht gedacht.

Danke vielmals auch an Uwe un sth77, ich hoffe nächstes mal eure Hirnzellen ein bisschen mehr zu fordern  smiley

schöne Grüsse
Logged

Pages: [1]   Go Up
Jump to: