- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 29

Thema: SRF10 an RPI und Raspi Robot Board

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.04.2014
    Beiträge
    15
    So guten Morgen,

    wieder ist eine programmier und testreiche Nacht vergangen. Also den Denkansatz den ich gestern hier hatte, den habe ich dann auch so umgesetzt wie ich mir das vorgestellt habe. Und soweit ich das gesehen habe funzt das soweit ganz gut.
    Ich muss nur mal eine Programmiertechnische Frage geklärt wissen. Wo ich gestern keine Lösung atok zur Verfügung hatte.

    Ich habe das Script gestern nochmal komplett neu aufgesetzt und sämtliche Programablaufmodule jetzt als 'def' gesetzt. Unter anderem auch den Messvorgang.
    Jedoch wenn ich dann im Programmablauf in der while True: Schleife dann die def Messung_vorn_perma(): aufrufe dann macht der zwar sein Messvorgang und gibt mir das Ergebnis auf dem Bildschirm auch aus. Aber wenn ich dahinter eine if Abfrage setze, die den distance Wert aus dem Messmodul der aktuellen Messung abfragen soll, dann bekomm ich eine Error Meldung das der globale name 'distance' nicht definiert wurde. Und somit übergibt der dann den Messwert nicht an die if Abfrage. Jetzt hab ich mir beholfen indem ich das Modul halt doch wieder direkt mit in den Programablauf komplett mit reingesetzt habe anstatt nur den def Namen des Messmoduls selber. Jedoch ist das keine gewünschte Lösung warum ich mir überhaupt die Mühe mache das gesamte Script neuaufzusetzen.

    Code:
    def Messung_vorn_perma():
    #Messung Start
        print "Messung_vorn_perma_start"
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(12,GPIO.OUT)
        GPIO.setup(16,GPIO.IN)
        GPIO.output(12, False)
        time.sleep(0.1)
        GPIO.output(12, True)
        time.sleep(0.00001)
        start = time.time()
        GPIO.output(12, False)
        while GPIO.input(16)==0:
              pass
        start = time.time()
        while GPIO.input(16)==1:
              pass
        stop = time.time()
        elapsed = stop-start
        distance = elapsed * 17500
        print "Abstand_vorn: %.1f cm" % distance
        print "Messung_vorn_perma_ende
    #Messung Ende
    
    while True:
        Messung_vorn_perma()
        if distance < 20:        #Und hier bekommt der dann die Meldung das Distance nicht als Globaler Name definiert wurde. Jedoch wenn ich den Namen definiere bringt mir dsa nichts da der mir das Messergebniss nicht mit übergibt.
    	Stop_anhalten()
    ich hab wie schon erwähnt dann das Messmodul direkt mit in die Schleife gepackt und dann funktioniert auch die Übergabe des Messwertes.
    Hat da jemand eine Idee wie die Definierung mit einer sauberen Übergabe geschrieben werden kann, ohne gleich das komplette Modul, in die whiles True Schleife reinzukopieren. Das ganze soll natürlich der Übersichtlichkeit dienen, damit der Programmablauf kurz gehalten wird und ich schneller nur an einer Stelle mal ne Code Anpassung durchführen kann.


    MFG

    Zappelmann

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Hm-soweit ich deises Kauderwelch verstehe, funktionierts so wirklich nicht, eben _weil_ distance nicht global definiert ist.
    Distance "lebt" da wohl nur innerhalb #Messung
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.04.2014
    Beiträge
    15
    ja und genau darum gehts ja wie kann ich distance als globalen namen definieren ?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.211
    Das musst du schon die Doku deiner Programmier-Zeichensprache fragen.
    In C macht mans so, vorzugweise oberhalb des eigentlichen Programms:

    int distance;
    oder eben
    float distance=0.0;

    Damit sind die Variablen global, das heisst, jedes Unterprogramm kann drauf zugreifen, und sie auch verändern.
    Eventuell (ich erinnere mich dunkel, dass es _irgendwo_ so war) musste man "public" benutzen...

    public distance; -> oder so in der Art...
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

Ähnliche Themen

  1. Raspi und 3G Stick , wer arbeitet damit ?
    Von oderlachs im Forum Raspberry Pi
    Antworten: 2
    Letzter Beitrag: 29.03.2014, 20:02
  2. RasPi mit RN-Schrittmotor und Pegelwandler
    Von Crashmichl im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 27.01.2014, 22:23
  3. Solarstrom und Spannung mit RPI messen
    Von s3993 im Forum Raspberry Pi
    Antworten: 23
    Letzter Beitrag: 22.01.2014, 05:52
  4. RPi und Watterott TFT
    Von ex535 im Forum Raspberry Pi
    Antworten: 2
    Letzter Beitrag: 05.12.2013, 17:51
  5. SRF10 in C und das 3. Byte = 0
    Von flo_weitweg im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 08.03.2008, 22:07

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress