Go Down

Topic: Syntaxfrage: Setup()-Aufruf in Loop() ? (Read 1 time) previous topic - next topic

19BK89

Hallo, ich bin neu hier und habe seit ein paar Tagen ein Arduino Uno.
Momentan bin ich dabei mich in die Syntax des Arduinos einzuarbeiten und manchmal bin ich mir eben nicht sicher, ob der Code dem kleinen Gerät gut bekommen würde.
Bisher hat alles gut funktioniert. Habe ein paar Dinge die ich herumliegen hatte geschlachtet und mal spaßeshalber getestet, wie z.B. Servos eines RC-Autos und so Sachen.

Was passiert denn, wenn man in der Loop() einen Setup()-Aufruf macht?  Funktioniert das?
Funktioniert die Übergabe der Werte hier auch wie z.B. in c#? ()
Ich muss ehrlich zugeben, dass ich mich nicht traue es einfach auszuprobieren.
Hier ein Beispiel, wie ich es meine (Das ist kein richtiger Sketch, sonder einfach Quatsch zum verdeutlichen. Bitte nicht blind ausführen!!!):

Code: [Select]


int i = 1;

void setup(){
pinMode(i, OUTPUT);
}

void loop(){
digitalWrite(i, HIGH); 
i = Math(i);                           // i = Wert von Math(), übergebe alten i-Wert
delay(100);
if(i == 4){i=0;}
setup();                                // rufe setup() auf
}

static int Math(int Wert){    // Wert = i aus loop()
  Wert = Wert + 1;
return Wert;                          // gib Wert zurück
}


sschultewolter

Das Thema gab es vor ein paar Wochen. Du kannst die setup() Funktion aufrufen. Es wird aber allein schon von Stil davon abgeraten.

Was hast du vor, in der setup() aufzurufen? Wenn es darum geht, Werte zurück zusetzen, kannst du das wie folgt machen.

Code: [Select]

int state;
int taster = 3;

void setup() {
pinMode(taster, INPUT);
reset(); // Freie Namengebung möglich!
}

void reset() {
state = 0;
}

void loop() {
state++;

if(digitalRead(taster) == true) {
reset();
}
}

Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Serenifly

Theoretisch ja. Setup() ist einfach eine Funktion, die am Anfang automatisch einmal ausgeführt wird. Aber sauberer ist es du lagerst den gemeinsamen Code in eine Funktion aus und rufst diese jeweils auf.

Das static ist überflüssig. Abgesehen davon funktioniert das so.

In C/C++ ist es anders als in C# üblich, dass Variablen und Methoden mit Kleinbuchstaben anfangen. Ist aber auch nicht falsch wenn man es groß schreibt. Jedenfalls für selbst definierte Funktionen.

19BK89

Ok, also es würde gehen. Es ist eben einfach die Neugier. Evtl. braucht man es ja.
Danke für die schnelle Antwort!

uwefed


Evtl. braucht man es ja.

Normalerweise braucht man es nicht, da man im Setup die Initialisation der verwendeten HW, Einschaltbildschirm mit Display, Tonausgabe und LED-Kontrolle (alle Pixel bzw LED einzuschalten um so einen Schaden sichtbar zu machen) bzw Variablen macht und nichts dagegenspricht, wie Serenifly sagt, Teile die mehrfach auch außerhalb setup() gebraucht werden in einer Funktion augelagert werden können.
Grüße Uwe

michael_x

setup() aufrufen ist übrigens was ganz anderes als den Reset Knopf zu drücken !
Ich würde Uwe's "normalerweise" anders formulieren:
Man braucht es nicht, basta !

Wenn du gaaaanz vorsichtig bist, könntest du in loop evtl. auch loop() aufrufen.
Das braucht erst recht keiner ;)


Mit C# Hintergrund glaubst du gar nicht, was syntaktisch alles erlaubt ist in C, aber nicht das macht was du denkst.
Code: [Select]
if ( 1000 * 1000 == 16960 )
  Serial.println ( " na sowas ");


uwefed


Mit C# Hintergrund glaubst du gar nicht, was syntaktisch alles erlaubt ist in C, aber nicht das macht was du denkst.
Code: [Select]
if ( 1000 * 1000 == 16960 )
  Serial.println ( " na sowas ");


Ein bißchen bist Du schon gemein.  ;) ;) ;) ;)
Grüße Uwe

Go Up