Raspberry+BMP085+4DLabs oled 128 python string problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
advanetom
User
Beiträge: 2
Registriert: Samstag 19. Januar 2013, 13:02

Hallo erstmal ich bin ziemlich neu in Python und habe folgendes Problem
erstmal das script hier:



Code: Alles auswählen

#!/usr/bin/python
import serial
import time
import sys
import getopt

from Adafruit_BMP085 import BMP085

# ===========================================================================
# Example Code
# ===========================================================================

# Initialise the BMP085 and use STANDARD mode (default value)
# bmp = BMP085(0x77, debug=True)
bmp = BMP085(0x77)

# To specify a different operating mode, uncomment one of the following:
# bmp = BMP085(0x77, 0)  # ULTRALOWPOWER Mode
# bmp = BMP085(0x77, 1)  # STANDARD Mode
# bmp = BMP085(0x77, 2)  # HIRES Mode
# bmp = BMP085(0x77, 3)  # ULTRAHIRES Mode

temp = bmp.readTemperature()
pressure = bmp.readPressure()
altitude = bmp.readAltitude()

print "Temperature: %.2f C" % temp
print "Pressure:    %.2f hPa" % (pressure / 100.0)
print "Altitude:    %.2f" % altitude

try:
        opts, args = getopt.getopt(sys.argv[1:], "x:y:s:b")
except getopt.GetoptError, err:
        # print help information and exit:
        print str(err) # will print something like "option -a not recognized"
        sys.exit(2)

x=0
y=0
s=""
clear = False

for o, a in opts:
        if o == "-x":
                x = a
        elif o == "-y":
                y = a
        elif o == "-s":
                s = a
        elif o == "-b":
                clear = True
        else:
                assert False, "Unhandled option"

# Open the serial port on J16

ser = serial.Serial(
        port='/dev/ttyUSB0',
        baudrate=115200,
        timeout=1,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS
)

ser.write("U")          # Autobaud char   
rtc = ser.read(1)       # Wait for a reply

if clear==True:
        ser.write("E")          # Clear screen
        rtc = ser.read(1)       # Wait for a reply

ser.write("s%c%c%c%c%c%s%c" % (int(x),int(y),1,0xFF,0xFF,s,0x00))
rtc = ser.read(1)       # Wait for a reply
time.sleep(30)   
ser.close()                     # Close port

Ich möchte die werte auf dem display anzeigen lassen

s="" zeigt mir wenn ich was eingebe den string und das funzt auch alles soweit
aber wie bekomme ich zb.die Temperatur in diesen String? :shock:
Eine erklärung warum und wieso wäre auch super so das ich es auch noch verstehe :K :K
Zuletzt geändert von Anonymous am Samstag 19. Januar 2013, 13:49, insgesamt 1-mal geändert.
Grund: Code-Tags korrigiert.
BlackJack

@advanetom: Äh, *lern Python*. Sorry, aber wie man Werte in eine Zeichenkette formatiert ist in Deinem Programm schon zu sehen und sollte irgendwo in jedem Grundlagentutorial vorkommen. Wenn Du also weisst was das alles bedeutet was Du da geschrieben hast, dann stellt sich die Frage nicht. Wenn sich die Frage aber stellt, dann kann das Programm da nicht von Dir sein.

Arbeite einfach mal das Tutorial in der Python-Dokumentation durch.

`getopt` verwendet heut wohl keiner mehr. Das würde ich höchstens noch verwenden wenn das Python-Programm ein Prototyp für eine spätere C-Implementierung wäre.

Konventionell wird vier Leerzeichen pro Ebene eingerückt und keine Tab-Zeichen benutzt. Mehr zu Konventionen findet sich im Style Guide for Python Code.

Abkürzungen sollte man vermeiden. `temperature` sagt deutlicher was der Wert bedeutet als `temp`, was man leicht mit der üblichen Abkürzung für Zwischenergebnisse für denen dem Programmierer kein besserer Name eingefallen ist, verwechseln kann. `a` und `o` gehen überhaupt nicht. `rtc` ist die übliche Abkürzung für „real time clock”. Die Bedeutung in Deinem Quelltext muss man raten. Wenn Du den Wert überhaupt nicht benutzt, brauchst Du ihn auch nicht an einen Namen binden. Ansonsten ist es eine Konvention einen einfachen Unterstrich für Namen zu verwenden, an die man Werte bindet, die nicht verwendet werden.

Vergleiche mit literalen Wahrheitswerten sind unnötig und deshalb schlechter Stil. `clear` ist doch schon ein Wahrheitswert. Durch den Vergleich kommt nur genau der Wert wieder heraus, den man vorher auch schon hatte. Das ist als würde man zu einer ganzen Zahl einfach so zur Sicherheit 0 dazu addieren.

Einzelne Werte die mit ``print`` ausgegeben werden, muss man nicht in eine Zeichenkette umwandeln. Das macht ``print`` schon selber.
advanetom
User
Beiträge: 2
Registriert: Samstag 19. Januar 2013, 13:02

Jetzt versteh ich noch weniger als vorher ich versuch ja das ganze zu verstehen,aber ein Lösungsweg oder Beispiel wäre trotzdem super!
bzw Erklärung dazu
BlackJack

@advanetom: Der Lösungsweg ist ein Python-Tutorial durchzuarbeiten. Zum Beispiel das in der Python-Dokumentation. Oder vielleicht für Anfänger besser geeignet Learn Python The Hard Way.

Das was Du haben willst, wird an anderer Stelle in dem Quelltext schon gemacht. Das heisst doch dass das Programm nicht von Dir entwickelt wurde, sondern von irgendwo kopiert wurde ohne zu verstehen was der Quelltext im einzelnen bedeutet. Wir helfen hier gerne beim Python lernen, aber den meisten ist ihre Zeit zu schade auf Zuruf Lösungen zu liefern, die der Fragende am Ende gar nicht versteht sondern einfach nur in „sein” Programm übernimmt.
Antworten