Pages: [1]   Go Down
Author Topic: Bin am verzweifeln und hoofe auf Hilfe  (Read 1011 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Im Anhang lade ich einen Sketch hoch bei dem ich irgenwie nicht weiterkomme. Jemand mit mehr Erfahrung kann mir bestimmt helfen!
Ich will mit dem Poti eine "soll Temperatur einstellen" das geht auch schon, was nicht geht ist gleichzeitig die aktuelle Temperatur zu messen und anzuzeigen. Ich sitze nun schon seit Tagen an dem Sketch und komme nicht weiter, habe zu wenig Erfahrung.

* P_Temperatur.ino (2.03 KB - downloaded 24 times.)
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin,
so wird Dir keiner weiterhelfen können.
Wenn Du in einer Werkstadt anrufst und sagst Hilfe mein Auto fährt nicht ob wohl ich Gas gebe....
Was meinst Du was Du da als Antwort bekommst ?

Also was für Hardware (Board, Sensor...) ?
Wie hast Du was verkabelt (Bilder sagen mehr als Worte)?
Wie sieht der Programmcode aus (Bitte in [code ]dein Code .... [/code ] Ohne Leerzeichen einfügen)
Oder auf das Symbol mit der # klicken und dann dazwischen  deine Code einfügen.

Gruß Ingo
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 3
Posts: 294
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dein Sketch sieht auf den ersten Blick mal ganz ok aus.
Allerdings solltest du nicht die loop Funktion überladen! Die zweite Loop würde ich dann DSread oder so nennen...

Was ist denn jetzt das Problem?
Den Dallas auslesen?
Asynchronität?
Logged

Arduino 1.0.3|MEGA|UNO|MICRO|PRO MINI3.3
SSD1289 TFT Touch|DS18B20|DS1307
ADNS2610|RFM12|OOK|SSD1303|DHT22
SSD1306 Crius CO-16 OLED|UGUI|SD
SSD1352|

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmm, Dein Sketch ist ziemlich durcheinander. Es gibt die Funktion "loop()" zweimal und es stehen jede Menge Befehle außerhalb der Funktionen. Das passt schon mal gar nicht. Also von "das funktioniert schon mal" ist der angehängte Sketch weit entfernt.
Du solltest also erstmal die beiden loop() Funktionen zu einer zusammenfassen, damit sich der Code compilieren läßt. Sobald das geht, ist der nächste Schritt zu prüfen ob der Code das gewünschte Ergebnis liefert und wenn nicht den Code zu korrigieren.
Logged

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

Das klingt eher danach, ob dir jemand den Sketch fertig schreiben soll. Aber daraus lernt man einfach nicht.
Es fängt schon damit an, dass du einige formale Fehler begehst. Diese nichtssagenden Threadtitel gehen in der Regel einfach unter. Ist es zuviel verlangt, eine Überschrift passend zur Fragestellung zu formulieren?
Zudem empfinde ich es als zutiefst unhöflich, Anfragen im Forum wie nachfolgend benannt zu stellen und darauf weder mit Dank noch mit Antwort auf gestellte Fragen zu reagieren:
http://arduino.cc/forum/index.php/topic,133968.msg1007865.html
http://arduino.cc/forum/index.php/topic,136937.msg1028903.html

Öffnet man dann deinen Sketch, fallen einem gleich 2 loop-Funktionen auf. Das sind wirklich die einfachsten Regeln in der Arduino-Programmierung: eine setup, eine loop.

Logged

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

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2440
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Im Anhang lade ich einen Sketch hoch bei dem ich irgenwie nicht weiterkomme. Jemand mit mehr Erfahrung kann mir bestimmt helfen!
Ich will mit dem Poti eine "soll Temperatur einstellen" das geht auch schon, was nicht geht ist gleichzeitig die aktuelle Temperatur zu messen und anzuzeigen. Ich sitze nun schon seit Tagen an dem Sketch und komme nicht weiter, habe zu wenig Erfahrung.

Eine vernünftige Struktur des Programms ist die halbe Miete.

Wenn Du irgendeinen kleinen Programmabschnitt testweise in einem kleinen Testprogramm zum Funktionieren bekommen hast, dann machst Du daraus am besten eine Funktion mit einem eigenen Namen, die man aus der Loop dann aufrufen kann.

Für ein Thermostatprogramm bietet sich beispielsweise an, verschiedene Funktionen zu haben für
- die Einstellung des Sollwertes
- das Auslesen des Istwertes
- das Schalten des Ausgangs
- das Anzeigen der aktuellen Zustandswerte des Systems

Ich habe Dir mal ein Grundgerüst für ein Themostatprogramm gemacht, so ist es erstmal nur ein "Thermostat-Simulationsprogramm" und geschaltet wird nur die PIN13-LED.

Dieses Grundgerüst kannst Du dann weiter ausbauen.

Solltemperatur habe ich erstmal fest auf 23.5°C eingestellt, da kannst Du Deine Sollwertfunktion über Potentiometerabfrage einbauen und den Sollwert vom Poti zurückliefern lassen.

Anzeigefunktion habe ich nur auf seriellem Monitor, da kannst Du Deine LCD-Displayausgabe machen.

Wichtig bei einem Thermostatprogramm ist immer, dass Du eine "Hysterese" bei den Schaltwerten hast, also nicht exakt auf einen Schaltpunkt ein-/ausgeschaltet wird. Sonst passiert es Dir, dass wenn am Schaltpunkt die Messwerte springen, also innerhalb von wenigen Zehntelsekunden der Messwert immer zwischen 23.4 und 23.5 hin- und herspringt, auch Deine Heizung im Takt von wenigen Zehntelsekunden ein- und ausgeschaltet wird. Mein Testprogramm hat den Hysteresewert auf 0.3°C eingestellt, d.h.
- eine eingeschaltete Heizung bleibt bis 0.3°C über dem Sollwert eingeschaltet
- das Wiedereinschalten nach Absinken der Temperatur erfolgt erst 0.3°C unterhalb des Sollwerts
Dadurch wird die Anzahl der Schaltvorgänge gering gehalten, was der Lebensdauer des Schalters zugute kommt.

Code:

// Beispiel-Programmgeruest Thermostat

// Schalthysterese = 0,3°C
#define HYSTERESE 0.3

// Pin zum Schalten der Heizung, 13 ist die LED auf dem Arduino
#define SCHALTPIN 13

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(SCHALTPIN, OUTPUT);
  Serial.println("Heizungsregelung startet...");
}


float GetSollTemperatur()
// Potentiometer auslesen, Solltemperatur ermitteln
{
 //  hier zu Testzwecken eine Konstante zurückliefern
 return(23.5);
}

float GetMesswert()
// Aktuelle Temperatur vom Sensor auslesen
{
  // hier zu Testzwecken einfach Zufallszahlen ermitteln
  // und für Delay sorgen
  delay(5000);
  return((2150+random(400))/100.0); // Zufallswert zwischen 21.5°C und 25.5°C
}

void DatenAusgabeDisplay(float Soll, float Ist)
{
  // Hier zu Testzwecken nur auf seriellem Monitor
  char charbuf[20]; // Zum Formatieren der Temperatur auf zwei Nachkommastellen
  // Um Rundungsdifferenzen bei der anschliessenden Ausgabeformatierung zu vermeiden
  Soll+=0.001;
  Ist+=0.001;
  Serial.println(Soll);
  Serial.println(Ist);
  sprintf(charbuf,"Soll: %02d.%02d",int(Soll),int((Soll-int(Soll))*100));
  Serial.println(charbuf);
  sprintf(charbuf,"Ist : %02d.%02d",int(Ist),int((Ist-int(Ist))*100));
  Serial.println(charbuf);
  Serial.print("Heizstatus: ");
  if (digitalRead(SCHALTPIN))
    Serial.println("AN");
  else 
    Serial.println("AUS");
  Serial.println();
}

void HeizungSchalten(float Soll, float Ist)
{
  // static Variablen behalten ihren Status zwischen den Funktionsaufrufen
  static boolean Schaltstatus;
  // Muss geheizt werden
  if ((Schaltstatus==false)&&(Ist<=Soll-HYSTERESE)) // ja, jetzt heizen
  {
    Schaltstatus=!Schaltstatus; // Schaltstatus umschalten
    digitalWrite(SCHALTPIN,Schaltstatus); // Heizung ist jetzt AN
  } 
  if ((Schaltstatus==true)&&(Ist>=Soll+HYSTERESE)) // Temp hoch genug, nicht mehr heizen
  {
    Schaltstatus=!Schaltstatus; // Schaltstatus umschalten
    digitalWrite(SCHALTPIN,Schaltstatus); // Heizung ist jetzt AUS
  }   
}


void loop() {
  // put your main code here, to run repeatedly:
  float SollTemp, IstTemp;
  SollTemp=GetSollTemperatur();
  IstTemp=GetMesswert();
  HeizungSchalten(SollTemp, IstTemp);
  DatenAusgabeDisplay(SollTemp, IstTemp);
}

Hinweise zum Code:
Ich habe den Code mal für "float" Fliesskommazahlen geschrieben, obwohl das für einen professionellen Regler wohl nicht gemacht werden würde (potentielle Rundungsfehler, mehr Speicherplatz für größeres Programm benötigt, schlechte Formatierungsmöglichkeiten). Professionell würde man die Temperaturen als Integer-Werte definieren, entweder in Zehntel-Graden oder Hundertstel-Graden und mit entsprechenden Ganzzahlen arbeiten. Aber es geht natürlich beides.

Das "delay(5000)" ist natürlich nur wegen der Simulation drin, für ein echtes Programm muss das delay natürlich da raus.

Das mit der Hysterese als Bruchteil eines Grad Celsius funktioniert natürlich nur, wenn die Tempratur auch tatsächlich auf Bruchteile eines Grades genau gemessen wird (Zehntel oder Hundertstel). Wenn die Temperatur nur in ganzzahligen Gradwerten ermittelt wird, muss die Logik etwas anders sein.

Und am LCD-Display gibst Du am besten keine Steuerzeichen aus ("println" sendet am Ende immer Steuerzeichen für Wagenrücklauf / Carriage Return und Zeilenvorschub Linefeed mit), also nicht "println" auf dem LCD anwenden, sondern nur "print".



Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Tips, da ich aber der absolute Anfänger bin komme ich noch nicht ganz klar. Wie kann ich ein kleines funktionierendes Programm als eine Funktion definieren, so das ich es mit loop aufrufen kann? Nochmals Danke für deine Hilfe. Ich bin schon froh, das ich so weit gekommen bin und hoffe nun mit deiner Hilfe wieder was dazu zu lernen.
Logged

Offline Offline
Full Member
***
Karma: 3
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Tips, da ich aber der absolute Anfänger bin komme ich noch nicht ganz klar. Wie kann ich ein kleines funktionierendes Programm als eine Funktion definieren, so das ich es mit loop aufrufen kann?

So:
Code:
void deinefunktion() {
//Code einfügen
}

und dann in loop() so aufrufen:
Code:
void loop() {
deinefuntkion();
}

Addi
Logged

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

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2440
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann ich ein kleines funktionierendes Programm als eine Funktion definieren, so das ich es mit loop aufrufen kann?

Ein Programm ist eine Aneinanderreihung von aufgerufenen Funktionen.

Es gibt fertig vorprogrammierte Funktionen, die "Library-Funktionen".

Und es gibt selbstgeschriebene Funktionen.

Jede Funktion hat einen Namen und einen Rückgabewert. Der Typ des Rückgabewerts einer Funktion steht vor dem Funktionsnamen. Wenn kein Rückgabewert benötigt wird, heißt der Rückgabewert "void".

Beispiel

void setup() ==> Die Funktion heißt setup, kein Rückgabewert (void)
void loop() ==> Die Funktion heißt loop, kein Rückgabewert (void)

Du kannst aus einer funktionierenden Loop einfach eine Funktion machen, indem Du der vorhandenen loop-Funktion einen eigenen Namen gibst:

Aus:
Code:
void loop() {
  // lese Wert vom Analogpin in Variable
  int analogValue = analogRead(0);
  analogValue=map(analogValue,wert1,temp1,wert2,temp2);
}

Machst Du dann z.B.:
Code:
void LeseValue() {
  // lese Wert vom Analogpin in Variable
  int analogValue = analogRead(0);
  analogValue=map(analogValue,wert1,temp1,wert2,temp2);
}

Und wenn Du den gelesenen Wert weiter verarbeiten möchtest, dann bietet es sich an, den Wert über die Funktion zurückzugeben. Die Funktion benötigt dann statt "void" einen Datentyp, und das Zurückliefern des Wertes geschieht durch den Aufruf von "return()" mit Angabe des zurückzugebenden Wertes in Klammern.

Also

Code:
int LeseValue() {
  // lese Wert vom Analogpin und liefere ihn als Rueckgabewert
  int analogValue = analogRead(0);
  analogValue=map(analogValue,wert1,temp1,wert2,temp2);
  return(analogValue);
}

Jetzt hast Du eine Funktion, die einen Integerwert liefert. Diese Funktion kannst Du dann z.B. in einer neu geschriebenen loop()-Funktion (jedes Arduino-Programm benötigt eine loop-Funktion) verwenden.

Neue loop:

Code:
void loop() {
  // lese Wert vom Analogpin in Variable
  int Sollwert;
  Sollwert=LeseValue();
}

D.h. Du hast aus dem Code in der Loop eine Funktion gemacht, die Du mit einer Zeile aufrufen kannst, auch wenn diese Funktion aus ganz vielen Zeilen Programmcode besteht. Das besteht sie hier zwar nicht, aber durch das Schreiben von Funktionen hältst Du die loop-Funktion übersichtlich und jede Funktion ist im Programm immer nur für eine kleine Teilaufgabe zuständig. Und wenn Du für jeden Programmteil eigene Funktionen geschrieben hast, dann kann die loop-Funktion des fertigen Programms dann am Ende ganz übersichtlich sein:

Code:
void loop() {
  // put your main code here, to run repeatedly:
  float SollTemp, IstTemp;
  SollTemp=LeseValue();
  IstTemp=GetMesswert();
  HeizungSchalten(SollTemp, IstTemp);
  DatenAusgabeDisplay(SollTemp, IstTemp);
}

Oder so.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke du hast mir sehr geholfen. Auf meinem Display sieht alles gut aus, ich bekomme die aktuellen Temperaturen angezeigt und wenn ich am Poti drehe ändert sich der Wert auch. Mein Problem der Ausgang Pin 10 schaltet nicht.



#include <OneWire.h>
#include <LiquidCrystal.h>
#define SCHALTPIN1 10 //Heizung an/aus (soll mit Poti eigestellt werden)
#define SCHALTPIN2 9 //Lüftung auf (feste Tempeatur)
#define SCHALTPIN3 8 //Lüftung zu
#define SCHALTPIN4 7 // Mischer auf/zu (soll 1 Minute vor Heizung angehen)
#define HYSTERESE 2 //Hysterese Heizung 2 Grad
#define LHYSTERESE 5 //Hysterese Lüftung 5 Grad

// OneWire DS18S20, DS18B20, DS1822 Temperature Sensoren

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire  ds(6);  // an pin 6

void setup(void) {
  lcd.clear();
  lcd.begin(16, 2);
  pinMode(SCHALTPIN1, OUTPUT);
  pinMode(SCHALTPIN2, OUTPUT);
  pinMode(SCHALTPIN3, OUTPUT);
  pinMode(SCHALTPIN4, OUTPUT);
}
int potPin = 0;
int potVal = 0;
void loop() {

  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float ist;
  float ist1;
  float SollTemp, IstTemp;
 
  //IstTemp=GetMesswert();
  HeizungSchalten(ist, potVal);
 

  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 
  float GetSollTemperatur();
 
  int potVal = analogRead (0);{
  potVal = potVal;
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Soll:");
  lcd.print((potVal/10.0),1);
  lcd.print((char(223)));
  lcd.print("C");
  delay(500);
}
 
 float GetMesswert();

  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
   
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

 for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data = ds.read();
  }

  // convert the data to actual temperature

  unsigned int raw = (data[1] << smiley-cool | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  ist = (float)raw / 16.9;
  ist1 = (float)raw / 16.9;

  lcd.clear();
  //lcd.setCursor(0, 1);
  lcd.print("1:");
  lcd.print(ist);
  lcd.print((char(223)));
  lcd.print("C");
  //lcd.setCursor(0, 1);
  lcd.print("2:");
  lcd.print(ist1);
  lcd.print((char(223)));
  lcd.print("C");
  delay(2000);
}

void HeizungSchalten(float Soll, float Ist)
{
  // static Variablen behalten ihren Status zwischen den Funktionsaufrufen
  static boolean Schaltstatus;
  // Muss geheizt werden
  if ((Schaltstatus==false)&&(Ist<=Soll-HYSTERESE)) // ja, jetzt heizen
  {
    Schaltstatus=!Schaltstatus; // Schaltstatus umschalten
    digitalWrite(SCHALTPIN1,Schaltstatus); // Heizung ist jetzt AN
  } 
  if ((Schaltstatus==true)&&(Ist>=Soll+HYSTERESE)) // Temp hoch genug, nicht mehr heizen
  {
    Schaltstatus=!Schaltstatus; // Schaltstatus umschalten
    digitalWrite(SCHALTPIN1,Schaltstatus); // Heizung ist jetzt AUS
  }   
}

 
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2734
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dem kursiven Text nach fehlt irgendwo ein [ i ] in deinem Code.   smiley-cool


potVal ist ein int ( 0 .. 1023), wird als Wert zwischen  0.0 und 102.3 °C Einheiten angezeigt aber als float 0.0 .. 1023.0 als 2. Parameter an
HeizungSchalten(ist, potVal); übergeben
Dort wird er als float Ist interpretiert. Die HYSTERESE und "ist" ( was in der Funktion dann Soll wird ) sind lt. Kommentar in ganzen Grad gemeint ...

[edit: C Grundlagen]
--> Bei Funktionen kommt es auf die Reihenfolge der Parameter an. Die Namen können bei Definition und Aufruf unterschiedlich sein.
Der Datentyp sollte passen.


Das sollte ein erster Ansatz für Verbesserungen sein, verbesserte Version bitte in [ code ] Tags packen...

 -- Vielleicht schaltet es ja schon irgendwie, viel Erfolg smiley-wink


« Last Edit: December 19, 2012, 06:49:40 pm by michael_x » Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2440
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mein Problem der Ausgang Pin 10 schaltet nicht.

Vergleiche bitte mal Deinen Code genauestens mit dem von mir geposteten Programmgerüst!
(Posted on: December 17, 2012, 08:12:21 PM)

In meinem Beispielcode steht am Ende eine ganz kurze loop-Funktion mit Funktionsaufrufen.
Das sollte bei Dir am Ende auch der Fall sein.

Dazu müßtest Du tatsächlich Funktionen deklarieren.
Und auch tatsächlich Funktionen von der Loop aus aufrufen.

Beides machst Du mit Deinem Code NICHT.

Du tust teilweise nur so als ob Du Funktionen deklarierst.
Das sind aber leere Funktionen.
Und der Code steht immer noch in der Loop statt in einer Funktion außerhalb der Loop.

Bitte schaue es Dir nochmal hier an:
http://arduino.cc/en/Reference/FunctionDeclaration

Ich versuche mal, Dir die Fehler anhand des dort vorgestellten Sketches mit der Multiplikationsfunktion aufzuzeigen:

Code:
void setup(){
  Serial.begin(9600);
}

// hier Anfang loop-Funktion
void loop() {
  int i = 2;
  int j = 3;
  int k;
  // in der nachfolgenden Zeile steht der Funktionsaufruf:
  k = myMultiplyFunction(i, j); // k now contains 6
  Serial.println(k);
  delay(500);
}
// hier Ende loop-Funktion

// hier Anfang Funktionsdeklaration
int myMultiplyFunction(int x, int y){
  int result;
  result = x * y;
  return result;
}
// hier Ende Funktionsdeklaration

Als erstes sollte Dir auffallen:
Am Ende einer FunktionsDEKLARATION steht NICHT ein Semikolon!
Sondern am Ende einer Funktionsdeklaration steht eine öffnende geschweifte Klammer und dann folgt der Block an Anweisungen, die von der Funktion ausgeführt werden sollen.

int myMultiplyFunction(int x, int y){
  // hier stehen die Anweisungen der Funktion
}

Sowas hier als Deklaration mit Semikolon am Ende:
int myMultiplyFunction(int x, int y);
bedeutet: Deklariere eine leere Funktion ohne Anweisungen und ohne Anweisungsblock. Die Funktionsdeklaration ist nach dem Semikolon zuende. Alles danach geschriebene gehört dann nicht mehr zu dieser Leer-Funktion. Das ist gar nix.

Als zweites sollte Dir auffallen:
Diese Deklaration einer Funktion steht NICHT INNERHALB DER LOOP!
Deklariere eine Funktion außerhalb der Loop, sie steht dann entweder oberhalb oder unterhalb der Loop.
Aber nicht mitten in die Loop reingequetscht.

In die Loop hinein gehören AUFRUFE DER FUNKTION.
Eine Funktion wird aufgerufen, indem Du sowas ähnliches wie die Deklaration hinschreibst, vorneweg steht kein Datentyp (wie void oder int) und nach den Parametern kommt dann am Ende das Semikolon statt einer geschweiften Klammer.

Das wäre ein Funktionsaufruf:
myMultiplyFunction(ErsterWert, ZweiterWert);

Und Funktionen mit Rückgabewert kannst Du an eine (vorher deklarierte) Variable zuweisen:
Ergebnis=myMultiplyFunction(ErsterWert, ZweiterWert);

Erkenne und verstehe den Unterschied zwischen sowas (Funktions-DEKLARATION):

int myMultiplyFunction(int x, int y){
  // hier stehen die Anweisungen der Funktion
}

und sowas (Funktionsaufruf):
Ergebnis=myMultiplyFunction(ErsterWert, ZweiterWert);

Ohne die Grundlagen von Funktionsdeklarationen und Funktionsaufrufen verstanden zu haben, kannst Du keine vernünftig strukturierten Programme schreiben, die dann auch noch funktionieren sollen.
Logged

Pages: [1]   Go Up
Jump to: