Go Down

Topic: Habe vergessen wie man "Unterprogramme" macht (Read 1 time) previous topic - next topic

hauke-peters

Hallo ich habe vergessen wie man "Unterprogramme" macht
also z.b. man muss ein Rechteck laufen dann sagt man
1. gehe vor
2. dreh dich
3. gehe vor
4. dreh dich
5. gehe vor
6. dreh dich
7. gehe vor
8. dreh dich
ich möchte es aber einmal am Anfang schreiben und als Rechteck deklarieren sodass
wenn ich
1. Rechteck
schreibe er die schritte oben 1-8 ausführt

Sorry das das so umständlich erklärt ist, habt bitte Verständnis
MFG Hauke

Addi

#1
Jan 07, 2013, 05:46 pm Last Edit: Jan 07, 2013, 05:50 pm by Addi Reason: 1
Entweder als Klasse oder Funktion:
Code: [Select]

void funktion1(int paramteter1,int parameter2) {
//Mache hier etwas
}
//Oder mit Rüchgabetyp:
int addiere(int a,in b) {
return a+b;
}
//Aufgerufen wird das dann z.B. so:
funktion1(5,9);
int c = addiere(3,3)

Diese Funktionsdeklarationen müssen dann außerhalb des setup() oder loop() liegen.
Oder als Klasse:
Code: [Select]

class Rechteck {
public:
    void zeichne(int a,int b) {
    //Zeichne etwas
     }
};
//Und so wird es aufgerufen
Rechteck rechteck;
rechteck.zeichne(5,5);

Habe den Code allerdings aus dem Kopf geschrieben -> Keine Garantie für Funktion

Addi
/ \    _|  _| o
 /--\ (_| (_| |

michael_x

Ein Problem / Missverständnis zwischen Addi und Hauke ist eventuell der Begriff "Programm"

Eine Funktion wie Addi sie beschrieben hat, ist sofort fertig und muss nicht wirklich unterbrochen werden, bis das Rechteck gezeichnet ist.
(Na gut, im Hintergrund laufen noch Zähler und Interrupts können erfasst werden, aber das soll hier jetzt nicht interessieren)

Ein Programm von Hauke ist eher das, was z.B. in einer Waschmaschine als Programm abläuft und nach vielleicht einer Stunde fertig ist.
Auch die einzelnen Unterprogramm-Schritte brauchen richtig Zeit.

Beim Programmieren eines Arduino hat man Addis Programm-Konzept zur Verfügung, will aber Haukes Programm realisieren.
Im ersten Ansatz ist alles ziemlich einfach, dafür gibt es delay() und while(analogRead(Temp) < Soll) { Heizen(); } und ähnliche Konstruktionen.

Mit etwas Glück kriegt man sogar ein Programm hin, das nach einer gewissen Zeit fertig ist und die gewünschte Arbeit gemacht hat. ( 1s LED an, 1s LED aus )
Die Frage ist dann, was macht ein Arduino, wenn das Programm fertig ist.
Es sollte klar sein, dass das was in loop() Programmzeile für Zeile abläuft und was man mit Addis Programmiertechnik realisiert, eigentlich auf einer ganz anderen Ebene existiert (oder zumindest sollte), als Haukes "Programm".


Tschuldigung, wenn das alles off-topic ist und Addi Haukes Frage perfekt beantwortet hat.
Ist mir nur mal so, am Beispiel von Haukes Programm-Beschreibung aufgefallen.

volvodani

Ich denke Funktion ist schon das richtige hier.

Mal in Pseudocode
Code: [Select]


int y=0;  // globale definition

void setup(){
//whatever
}

void loop(){
rechteck(123);  // du kannst auch variabeln übergeben z.b. Geschwindigkeit
y=summe(1,3); // y ernthält die summe (ergebnis von der variabeln) du kannst die Funtion summe auch merhmals aufrufen
}

byte summe(int x,int y){   // mit dem byte vor der funktion definierst du das format der zurückegebenen Variabeln also auch int,long
byte ergebnis;
ergebniss=x+y;    // zusammenrechenen der übergebenen Variabeln
return ergebnis; // damit schickst du das ergebniss zurück in die loop
}

void rechteck(int x){   // Jetzt steht in x die 123 aus dem Programm z.B. Geschwindigkeit void heisst das du nix zurückbekommst
// hier kannst du jetzt irgenwas mit x machen aber auch nur innerhalb dieser Funktion in der Loop kannst du dieses x nicht sehen sie ist hier lokal definiert
gehe vor;
dreh dich;
gehe vor;
dreh dich;
gehe vor;
dreh dich;
gehe vor;
dreh dich;
}


Jedesmal wenn du rechteck() im Programm aufrufst unter welchen Konditionen auch immer kannst werden die Funktionen die in dem void rechteck() ausgeführt.
Hoffe nicht in die komplett falsche richtig unterwegs zu sein.
Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

uwefed

michael_x ich sehe das nicht so; eine Funkton muß nicht sofort fertig sein.
Eine Funktion ist eine Gruppierung von Funktionen und Anweisungen und Kontrollstrukturen die zusammengefaßt werden weil sie öfters gebraucht werden oder zB im Falle einer Bibliothek die Handhabung bestimmter Hardware oder Funktionalitäten vereinfachen.

Grüße Uwe

Go Up