- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: Übergabewert einer Function

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464

    Übergabewert einer Function

    Anzeige

    Powerstation Test
    Hallo Robots

    Hab mal wieder ne Frage.

    Seht euch bitte mal den beiliegenden Code an.

    Beinhaltet Temp jetzt den Wert von der Unterfunktion Spannung??
    kann nämlich in der If nichts machen bzw. er läuft einfach durch.
    Ich möchte in der IF einen Wert vergleichen. Dieser soll <61 und >59 sein.
    Natürlich ist der code nicht vollständig. Ist nur ne Verständnisfrage.


    Code:
     $regfile = "m128def.dat"
    $crystal = 8000000
    $baud = 9600
    $baud1 = 9600
    $eeprom
    
     Declare Function Spannung(byval Cnt As Byte) As Single  
    
          Dim Cnt As Byte , Temp As Single 
        
    
          For Cnt = 0 To 3
    
          Temp = Spannung(cnt)                                  'Unterfunktion +Übergabewert
    
            If Temp < 59 And Temp > 61 Then
    
    
    Function Spannung(byval Cnt As Byte)as Single
    
    
      Config Adc = Single , Prescaler = Auto , Reference = Internal
    
      Dim Dauerch1 As Byte , Dauerch01 As Single
    
     Start Adc                                                  'Kanal 1 messen
    
    
      Dauerch1 = Getadc(cnt)
      Dauerch01 = Dauerch1 * 0.058594
      Dauerch01 = Spannung
    
    
    
    End Function

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    HI!

    Nein.
    Du musst am ende der Funktion entweder ein return Spannung
    oder
    Spannung = Spannung angeben, genau weis ich das aber auch nciht mehr.

    Ausserdem hast du vergessen, den ADC in der Funktion wieder zu schließen!!

    Liebe Grüße,
    Tobi

    *EDIT:*
    *HARCH* Das kann ja nciht gehen!

    Code:
      Dauerch01 = Dauerch1 * 0.058594 
      Dauerch01 = Spannung
    Dauerch01 ist dann gleich Spannung.

    So müsste es Heißen:
    Spannung = Dauerch01

    Grüße!
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    Danke für deine Hilfe!!!!

    Kann es erst am Abend testen.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    dim kannst du nicht in eine funktion setzen.
    mfg pebisoft

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    Hab ich korregiert, hat aber funktioniert.
    Nochmals Danke an die Robots!!

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    59
    Beiträge
    1.305
    Blog-Einträge
    1
    Ich hab Dir mal ein anders Programm geschrieben,
    Damit kann man besser erklären wie das mit der Funktion geht:


    Code:
    'Function Demo
    
    $regfile = "m32def.dat"                                     ' Art des Prozessors bestimmen
    $crystal = 16000000                                         ' Taktfrequenz einstellen
    $baud = 9600                                                ' Baudrate für Serielle Schnittstelle
    
    
    Declare Function Test(byval X As Byte) As Byte
    
    Dim Temp1 As Byte
    Dim Temp2 As Byte
    
    
    Hauptprogramm:
    
    '  Demo 1
    '  Mittels Temp1 wird ein Wert übergeben
    '  und von der Funktion in Temp2 zurückgegeben
    
       Temp1 = 7
       Temp2 = 0
    
       Print "Übergabe = Temp1 (";
       Print Temp1;
       Print ") ";
       Print " - Temp2 (";
       Print Temp2;
       Print ") ";
    
       Temp2 = Test(temp1)
    
       Print " /// Berechnet = Temp1 (";
       Print Temp1;
       Print ") ";
       Print " - Temp2 (";
       Print Temp2;
       Print ") ";
    
       Print
    
    ' --- --- --- --- --- --- --- --- --- --- --- ---
    
    '  Demo 2
    '  Mittels Temp1 wird ein Wert übergeben
    '  und von der Funktion wieder in Temp1 zurückgegeben
    '  d.h Die Variable wird direkt verändert
    
       Temp1 = 7
    
       Print "Übergabe = Temp1 (";
       Print Temp1;
       Print ") " ;
    
    
       Temp1 = Test(temp1)
    
       Print "Berechnet = Temp1 (";
       Print Temp1;
       Print ")"
    
       Print
    
    
    
    
    End                                                         'end program
    
    ' Hier die Funktion
    ' =================
    Function Test(byval X As Byte) As Byte
    
       Test = 2 ^ X                                             ' Rückgabe der Berechnung = Funktionsname als Variable
    
    End Function
    
    End
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    43
    Beiträge
    464
    Habs jetzt simuliert und es Funzt.

    Vielen Dank nochmal

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen