Archiv verlassen und diese Seite im Standarddesign anzeigen : srf02 Programmierung
Und zwar hab ich den sfr02 über i2c angeschlossen und lesen die entfernung aus. nun möchte ich die ausgelesenen daten auswerten
dafür hab ich mir folgende select case anweisung geschrieben
Do
Select Case Entfernung
Case 200 To 150 : Sound Portb.2 , 200 , 300
Case 150 To 100 : Sound Portb.2 , 200 , 400
Case 100 To 50 : Sound Portb.2 , 200 , 500
Case 50 To 10 : Sound Portb.2 , 200 , 600
End Select
Wait 1
Loop
aber irgendwie klappt das nicht, hat jemand da ne idee?
1. Das ist nur ein Teil deines Codes. Wie soll man da wissen, was nicht klappt?
2. Was klappt denn "irgendwie" nicht?
Gruß Dirk
Ich würde jetzt mal so ins Blaue tippen, dass du unter den Tönen keinen wirklichen Unterschied hörst?
Wie wäre es denn dann, wenn du die Unterschiede größer machst? So sind die Töne relativ gleich.
eine genauere Beschreibung deines Problems wäre hilfreich!
jon
Nein es ist mehr so dass ich gar keine töne höre
Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Portb.2 = Output
'Portb.2 = 1
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Const Srf02_slaveid = &HE0 'Standard I2C Adresse von SRF02
Dim Entfernung As Integer
Dim V As Byte
Wait 3 'Warte 3 Sekunden
I2cinit
V = 1
Do
Select Case Entfernung
Case 200 To 150 : Sound Portb.2 , 200 , 300
Case 150 To 100 : Sound Portb.2 , 200 , 400
Case 100 To 50 : Sound Portb.2 , 200 , 500
Case 50 To 10 : Sound Portb.2 , 200 , 600
End Select
Wait 1
Loop
End
'------------- Hilfsfunktionen für SRF02 ----------
Function Srf02_firmware(byval Slaveid As Byte) As Byte
Local Firmware As Byte
Local Slaveid_read As Byte
slaveid_read = Slaveid + 1
I2cstart
I2cwbyte Slaveid
I2cwbyte 0 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Slaveid_read
I2crbyte Firmware , Nack
I2cstop
Srf02_firmware = Firmware
End Function
Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte
Local Firmware As Byte
Local Temp As Byte
Local Slaveid_read As Byte
slaveid_read = Slaveid + 1
'Messvorgang in starten
I2cstart
I2cwbyte Slaveid
I2cwbyte 0
I2cwbyte 81 'in Zentimetern messen
I2cstop
Warteaufmessung:
Waitms 1
Firmware = Srf02_firmware(slaveid)
If Firmware = 255 Then Goto Warteaufmessung
I2cstart
I2cwbyte Slaveid
I2cwbyte 2 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Srf02_entfernung = Makeint(lob , Hib)
End Function
Ich benutze zum größten teil das srf02 beispiel
und mit if und einer entfernung geht das aber nicht im case
und wenn ich
select case entfernung
case etfernung <=100: Sound usw..
mache bekomme ich nur fehler meldungen
Tipp:
BASCOM hat eine Hilfe, die man mit F1 schnell öffnen kann. Wenn man dort Case in die Suche eingibt, findet man unter Anderem das Programm
$regfile = "m48def.dat" ' specify the used micro
$crystal = 4000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Dim I As Byte 'dim variable
Dim S As String * 5 , Z As String * 5
Do
Input "Enter value (0-255) " , I
Select Case I
Case 1 : Print "1"
Case 2 : Print "2"
Case 3 To 5 : Print "3-5"
Case Is >= 10 : Print ">= 10"
Case Else : Print "Not in Case statement"
End Select
Loop
End
'note that a Boolean expression like > 3 must be preceded
'by the IS keyword
Mehr muss ich dazu eigentlich nicht sagen, steht alles da.
jon
radbruch
21.01.2008, 20:47
Hallo
und mit if und einer entfernung geht das aber nicht im case
Echt? Das kann ich irgendwie nicht glauben, denn es fehlt etwas in der Art: "Entfernung=Srf02_entfernung(Srf02_slaveid)" oder "Select Case Srf02_entfernung(Srf02_slaveid)"
Oder braucht man das in Bascom nicht?
Gruß
mic
Da du es sagst, fällt es mir auch auf. Es fehlt die Zeile "Entfernung=Srf02_entfernung(Srf02_slaveid)" vor der "Select case Entfernung".
Natürlich braucht man die in BASCOM.
jon
sechsrad
22.01.2008, 09:13
irgendwie stimmt dein code nicht, nimm diesen mal und bring deine case rein und deine atmegaanpassungen.
Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
$regfile = "m32def.dat"
$framesize = 42
$swstack = 42
$hwstack = 42
$crystal = 8000000 'Quarzfrequenz
$baud = 19200
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Const Srf02_slaveid = &HE0 'Standard I2C Adresse von SRF02
Dim Entfernung As Integer
Dim V As Byte
Wait 1
I2cinit
Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)
Do
Entfernung = Srf02_entfernung(srf02_slaveid)
Print "Entfernung:" ; Entfernung ; "cm"
Wait 1
Loop
End
'------------- Hilfsfunktionen für SRF02 ----------
Function Srf02_firmware(byval Slaveid As Byte) As Byte
Local Firmware As Byte
Local Slaveid_read As Byte
Slaveid_read = Slaveid + 1
I2cstart
I2cwbyte Slaveid
I2cwbyte 0 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Slaveid_read
I2crbyte Firmware , Nack
I2cstop
Srf02_firmware = Firmware
End Function
Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte
Local Firmware As Byte
Local Temp As Byte
Local Slaveid_read As Byte
Slaveid_read = Slaveid + 1
'Messvorgang in starten
I2cstart
I2cwbyte Slaveid
I2cwbyte 0
I2cwbyte 81 'in Zentimetern messen
I2cstop
Waitms 65 'minimale Wartezeit für Messung bei SRF02
I2cstart
I2cwbyte Slaveid
I2cwbyte 2 'Leseregister festlegen
I2cstop
I2cstart
I2cwbyte Slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Srf02_entfernung = Makeint(lob , Hib)
End Function
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.