1. Das ist nur ein Teil deines Codes. Wie soll man da wissen, was nicht klappt?
2. Was klappt denn "irgendwie" nicht?
Gruß Dirk
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
Ich benutze zum größten teil das srf02 beispielCode: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
und mit if und einer entfernung geht das aber nicht im case
und wenn ich
mache bekomme ich nur fehler meldungenCode:select case entfernung case etfernung <=100: Sound usw..
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
Mehr muss ich dazu eigentlich nicht sagen, steht alles da.Code:$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
jon
Hallo
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)"und mit if und einer entfernung geht das aber nicht im case
Oder braucht man das in Bascom nicht?
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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
irgendwie stimmt dein code nicht, nimm diesen mal und bring deine case rein und deine atmegaanpassungen.
Code: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
Lesezeichen