Mit Rb_Shift 10 Leds eins weiter schieben und das in 50ms

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Mit Rb_Shift 10 Leds eins weiter schieben und das in 50ms

      Hallo Bascom User,

      nun hab ich wie folgt:

      BASCOM-Quellcode

      1. For Led_zaehler = 0 To Ledzahl - 1 'Schleife
      2. Rb_setcolor Led_zaehler , Color(1) 'Led zuweisen der Farbe
      3. Rb_send 'Farbe an Led senden
      4. Waitms 30 'warte
      5. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1

      10 LEDs angeschaltet und möchte diese mit "Rb_Shift" je um eins Versetzen, so das alle 10 LEDs um eins versetzt werden und nach 30ms wieder um eins bis das ende der LED Kette erreicht ist.
      Mit Index gebe ich ja an wo er beginnen soll, ich weiß jetzt aber nicht was ich da angeben muß, da ich ja alle 10 LEDs um 1 verschieben möchte. Muß ich da jetzt 1 angeben?
      Und mit Width wird ja die Anzahl der LEDs eingeben so wie ich das Verstanden hab?

      Und wie kann ich das in die schleife einbauen?

      Kann man das so machen?


      BASCOM-Quellcode

      1. For Led_zaehler = 0 To GesamtLEDs - 1 'Schleife
      2. Rb_Shiftright 0, Ledzahl
      3. Rb_send 'Farbe an Led senden, keine Farbe wird gesendet R=0 G=0 B=0
      4. Waitms 30 'warte
      5. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1
    • BASCOM-Quellcode

      1. For Led_zaehler = 0 To GesamtLEDs - 1 'Schleife
      2. Rb_Shiftright 0, Ledzahl
      3. Rb_send 'Farbe an Led senden, keine Farbe wird gesendet R=0 G=0 B=0
      4. Waitms 30 'warte
      5. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1hgezählt um 1
      Hab das jetzt mal laufen lassen, hier wird jedoch eine nach der anderen angeschaltet bist die letzte LED erreicht ist.

      Werde das mal mit einer If then versuchen.
    • Michael schrieb:

      Bitte poste immer das ganze Programm.
      Jo


      Michael schrieb:

      Meinst du deine For- Schleife?
      Ja, bei Rb_Shiftright gibt es ja:
      Syntax
      RB_SHIFTRIGHT Index , Width

      Michael schrieb:

      Warum hast du nicht hier weitergemacht?
      Blinker mit WS2812b und Atmega328p
      Das Thema ist doch geblieben?
      Das ist der Blinker der mit dem Programm von djmsc läuft.

      Das jetzt, soll mir die 10 LEDs, um je einen weiter laufen mit Rb_shiftright, das andere Programm hab ich so als Blinkerprojekt abgespeichter und ist somit abgeschlossen, abgesehen von deinem Programm
      das etwas anderst aufgebaut ist wie das von djmsc, da bin ich aber auch noch dran.

      walter99 schrieb:

      Hallo Wasi
      Ich glaube Rb_rotateright, ist für diese Anwendung besser geeignet
      MfG
      Danke Walter99 das werde ich mir anschauen.


      An sich war es das vorherige Programm, aber mit weiteren möglichkeiten und da hänge ich nun.

      BASCOM-Quellcode

      1. $Regfile = "m328pdef.dat"
      2. $Crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. Const Ledzahl = 2 'Festlegen wieviel LEDs
      7. Config Rainbow = 1 , Rb0_len = GesamtLEDs , Rb0_port = Portb , Rb0_pin = 0
      8. Dim Led_zaehler As Byte 'Dec variable
      9. Dim Color(3) As Byte 'Dec variable
      10. R Alias Color(_base) 'Alias für farbe Rot
      11. G Alias Color(_base + 1) 'Alias für farbe Gruen
      12. B Alias Color(_base + 2) 'Alias für farbe Blau
      13. Rb_selectchannel 0 'Kanal wahl
      14. Do
      15. 'Gelbe Leds festlegen
      16. R = 50
      17. G = 50
      18. B = 0
      19. For Led_zaehler = 0 To Ledzahl - 1 'Schleife
      20. Rb_setcolor Led_zaehler , Color(1) 'Led zuweisen der Farbe
      21. Rb_send 'Farbe an Led senden
      22. Waitms 30 'warte
      23. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1
      24. Und ab hier sollte die Schleife rein um die vorangegangenen 2 Leuchtenden LEDs
      25. je um eine LED weiter geschoben zu werden.
      26. Loop
      27. End
      Alles anzeigen

      Nicht wundern das da 2 LEDs geschrieben steht, das ist mein Teststripe mit 8 LEDs, damit
      ich nicht immer den Atmega zum Elektronikplatz umsetzen muß.

      Bei dem Test sollen nacheinander die ersten 2 LEDs angemacht werden, das tun sie ja mit der For Schlleife, dann sollen sich die 2 LEDs je um eine LED nach rechts bewegen.

      Ich weiß nicht welche Schleife sich da eignet, die For, If Then, wihle?

      Hoffe das ist verständlich.
    • Wasi schrieb:

      Bei dem Test sollen nacheinander die ersten 2 LEDs angemacht werden, das tun sie ja mit der For Schlleife, dann sollen sich die 2 LEDs je um eine LED nach rechts bewegen.
      Jetzt weiß ich wie du das meinst

      youtu.be/xnrqy_lZkx0

      BASCOM-Quellcode

      1. ' Blinker mit WS2812b und Atmega328p
      2. $regfile = "m328pdef.dat"
      3. $crystal = 8000000
      4. $hwstack = 40
      5. $swstack = 16
      6. $framesize = 32
      7. Const Ledzahl = 10
      8. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      9. Dim Led_zaehler As Byte
      10. Dim Color(3) As Byte
      11. R Alias Color(_base)
      12. G Alias Color(_base + 1)
      13. B Alias Color(_base + 2)
      14. R = 180
      15. G = 120
      16. B = 0
      17. Rb_selectchannel 0
      18. For Led_zaehler = 0 To Ledzahl - 9
      19. Rb_setcolor Led_zaehler , Color(1)
      20. Rb_send
      21. Waitms 100
      22. Next Led_zaehler
      23. Do
      24. For Led_zaehler = 0 To Ledzahl - 1
      25. Rb_shiftright 0 , Ledzahl
      26. Rb_send
      27. Waitms 100
      28. Next Led_zaehler
      29. For Led_zaehler = 0 To Ledzahl - 9
      30. Rb_setcolor Led_zaehler , Color(1)
      31. Rb_send
      32. Waitms 100
      33. Next Led_zaehler
      34. 'Wait 1
      35. Loop
      36. End
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc schrieb:

      Wasi schrieb:

      10 LEDs angeschaltet und möchte diese mit "Rb_Shift" je um eins Versetzen, so das alle 10 LEDs um eins versetzt werden und nach 30ms wieder um eins bis das ende der LED Kette erreicht ist.
      Soll das dann so aussehen?
      https://youtu.be/-bDXYPR8fmQ
      Das hab ich ja schon, dank deinem Prog.

      BASCOM-Quellcode

      1. ' Blinker KFZ mit WS2812b und Atmega328p
      2. $Regfile = "m328pdef.dat"
      3. $Crystal = 8000000
      4. $hwstack = 40
      5. $swstack = 16
      6. $framesize = 32
      7. Const Ledzahl = 8 'Festlegen wieviel LEDs
      8. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      9. Dim Led_zaehler As Byte 'Dec variable
      10. Dim Color(3) As Byte 'Dec variable
      11. R Alias Color(_base) 'Alias für farbe Rot
      12. G Alias Color(_base + 1) 'Alias für farbe Gruen
      13. B Alias Color(_base + 2) 'Alias für farbe Blau
      14. 'Gelbe Leds festlegen
      15. R = 50
      16. G = 50
      17. B = 0
      18. Rb_selectchannel 0 'Kanal wahl
      19. Do
      20. 'Gelbe Leds festlegen
      21. R = 50
      22. G = 50
      23. B = 0
      24. For Led_zaehler = 0 To Ledzahl -1 'Schleife
      25. Rb_setcolor Led_zaehler , Color(1) 'Led zuweisen der Farbe
      26. Rb_send 'Farbe an Led senden
      27. Waitms 30 'warte
      28. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1
      29. Waitms 30
      30. 'Leds aus
      31. R = 0
      32. G = 0
      33. B = 0
      34. For Led_zaehler = 0 To Ledzahl -1 'Schleife
      35. Rb_setcolor Led_zaehler , Color(1) 'Led zuweisen der Farbe
      36. Rb_send 'Farbe an Led senden, keine Farbe wird gesendet R=0 G=0 B=0
      37. Waitms 30 'warte
      38. Next Led_zaehler 'Led_zaehler wir hochgezählt um 1
      39. Waitms 30
      40. Loop
      41. End
      Alles anzeigen
    • djmsc schrieb:

      Wasi schrieb:

      Bei dem Test sollen nacheinander die ersten 2 LEDs angemacht werden, das tun sie ja mit der For Schlleife, dann sollen sich die 2 LEDs je um eine LED nach rechts bewegen.
      Jetzt weiß ich wie du das meinst
      youtu.be/xnrqy_lZkx0

      BASCOM-Quellcode

      1. ' Blinker mit WS2812b und Atmega328p
      2. $regfile = "m328pdef.dat"
      3. $crystal = 8000000
      4. $hwstack = 40
      5. $swstack = 16
      6. $framesize = 32
      7. Const Ledzahl = 10
      8. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      9. Dim Led_zaehler As Byte
      10. Dim Color(3) As Byte
      11. R Alias Color(_base)
      12. G Alias Color(_base + 1)
      13. B Alias Color(_base + 2)
      14. R = 180
      15. G = 120
      16. B = 0
      17. Rb_selectchannel 0
      18. For Led_zaehler = 0 To Ledzahl - 9
      19. Rb_setcolor Led_zaehler , Color(1)
      20. Rb_send
      21. Waitms 100
      22. Next Led_zaehler
      23. Do
      24. For Led_zaehler = 0 To Ledzahl - 1
      25. Rb_shiftright 0 , Ledzahl
      26. Rb_send
      27. Waitms 100
      28. Next Led_zaehler
      29. For Led_zaehler = 0 To Ledzahl - 9
      30. Rb_setcolor Led_zaehler , Color(1)
      31. Rb_send
      32. Waitms 100
      33. Next Led_zaehler
      34. 'Wait 1
      35. Loop
      36. End
      Alles anzeigen
      Ja, genau das meinte ich und wenn es am ende angekommen ist soll es wieder zurück laufen.
      Ist eigentlich wie das Knight Rider, kommt mir gerade so in den Sinn.

      Man kanns ja so kompliziert erklären wie ich eben. :D
    • Wasi schrieb:

      Ist eigentlich wie das Knight Rider, kommt mir gerade so in den Sinn.
      Dann wäre das, das bessere Programm :)

      BASCOM-Quellcode

      1. ' Blinker mit WS2812b und Atmega328p
      2. $regfile = "m328pdef.dat"
      3. $crystal = 8000000
      4. $hwstack = 40
      5. $swstack = 16
      6. $framesize = 32
      7. Const Ledzahl = 10
      8. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      9. Dim Led_zaehler As Byte
      10. Dim Color(3) As Byte
      11. R Alias Color(_base)
      12. G Alias Color(_base + 1)
      13. B Alias Color(_base + 2)
      14. R = 180
      15. G = 120
      16. B = 0
      17. Rb_selectchannel 0
      18. Do
      19. For Led_zaehler = 0 To Ledzahl - 9
      20. Rb_setcolor Led_zaehler , Color(1)
      21. Rb_send
      22. Waitms 100
      23. Next Led_zaehler
      24. For Led_zaehler = 0 To Ledzahl - 1
      25. Rb_shiftright 0 , Ledzahl
      26. Rb_send
      27. Waitms 100
      28. Next Led_zaehler
      29. For Led_zaehler = Ledzahl - 1 To 8 Step - 1
      30. Rb_setcolor Led_zaehler , Color(1)
      31. Rb_send
      32. Waitms 100
      33. Next Led_zaehler
      34. For Led_zaehler = 0 To Ledzahl - 1
      35. Rb_shiftleft 0 , Ledzahl
      36. Rb_send
      37. Waitms 100
      38. Next Led_zaehler
      39. 'Wait 1
      40. Loop
      41. End
      Alles anzeigen
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc schrieb:

      Wasi schrieb:

      Ist eigentlich wie das Knight Rider, kommt mir gerade so in den Sinn.
      Dann wäre das, das bessere Programm :)

      BASCOM-Quellcode

      1. ' Blinker mit WS2812b und Atmega328p
      2. $regfile = "m328pdef.dat"
      3. $crystal = 8000000
      4. $hwstack = 40
      5. $swstack = 16
      6. $framesize = 32
      7. Const Ledzahl = 10
      8. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      9. Dim Led_zaehler As Byte
      10. Dim Color(3) As Byte
      11. R Alias Color(_base)
      12. G Alias Color(_base + 1)
      13. B Alias Color(_base + 2)
      14. R = 180
      15. G = 120
      16. B = 0
      17. Rb_selectchannel 0
      18. Do
      19. For Led_zaehler = 0 To Ledzahl - 9
      20. Rb_setcolor Led_zaehler , Color(1)
      21. Rb_send
      22. Waitms 100
      23. Next Led_zaehler
      24. For Led_zaehler = 0 To Ledzahl - 1
      25. Rb_shiftright 0 , Ledzahl
      26. Rb_send
      27. Waitms 100
      28. Next Led_zaehler
      29. For Led_zaehler = Ledzahl - 1 To 8 Step - 1
      30. Rb_setcolor Led_zaehler , Color(1)
      31. Rb_send
      32. Waitms 100
      33. Next Led_zaehler
      34. For Led_zaehler = 0 To Ledzahl - 1
      35. Rb_shiftleft 0 , Ledzahl
      36. Rb_send
      37. Waitms 100
      38. Next Led_zaehler
      39. 'Wait 1
      40. Loop
      41. End
      Alles anzeigen
      Ja genau das ist es, danke.

      Muss ich mir mal geauer anschauen um das zu verstehen.
    • Hallo Bascom User :thumbsup:

      Ich möchte das Programm jetzt erweitern.

      Mit einem HC-SR04 möchte ich den Abstand messen und wenn der Abstand größer als 10cm ist soll die If Anweisung laufen, ansonsten die Else( Alle LEDs in weiß leuchten bis sich die entfernung wieder über 10cm bewegt).

      Und da liegt mein Problem.

      Ich hab eine Messung im Netzt gefunden über den HC-SR04 und hab die mal in das Programm eingebunden.

      Nun weiß ich nicht und bin mir auch nicht sicher ob ich die Abfrage der Messung und dem Vergleich vom soll und istwert so machen kann.

      Leider kann ich, in dem Simulator von Bascom, nicht den wert des HC-SR04 in echtzeit verändern in dem ich die Hand davor halte, vielleicht kann man das ja irgendwie einstellen?
      Jedoch mit Print kann ich mir werte Anzeigen lassen, aber eben nur die, die nicht in echtzeit sind.

      Vieleicht kann mir ja einer schreiben, ob ich das so, vergleichen kann in der "If" und ob die beiden Variablen so vergleichbar sind wie sie definiert sind. ?(

      Hier mal das Prog.

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. '$lib "RAINBOWBSCN.lib"
      7. 'Ein Ausgänge für Sensoren ********************************
      8. Config PORTB.1 = INPUT 'TriggerSignal zum Sensor1
      9. Config PINB.2 = OUTPUT 'Echo Signal vom Sensor1
      10. Config PORTD.5 = INPUT 'TriggerSignal zum Sensor2
      11. Config PIND.6 = OUTPUT 'Echo Signal vom Sensor2
      12. '**********************************************************
      13. Const Ledzahl = 8 ' Anzahl der LEDs
      14. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      15. 'Code für Sensor *********************************************************
      16. Dim Zeit1 As Long , Messung1 As Long , Abstand1 As Single
      17. Dim Abstand_s1 As String * 8
      18. Dim Zeit2 As Long , Messung2 As Long , Abstand2 As Single
      19. Dim Abstand_s2 As String * 8
      20. Dim Abstand10cm As String * 1
      21. Abstand10cm = String(1 , 49) + String(1, 48) 'PortPin = 1 und zahl 10(49und48)
      22. 'Code für LEDs*************************************************************************
      23. Dim Led_zaehler As Byte 'Zähler Var
      24. Dim Color(3) As Byte 'Farb Var
      25. R Alias Color(_base)
      26. G Alias Color(_base + 1)
      27. B Alias Color(_base + 2)
      28. R = 50 : G = 0 : B = 0 'Farbe festlegen
      29. 'Kanal Auwahl**************************************************************************
      30. Rb_selectchannel 0 'Kanal Auswahl
      31. 'Hauptprogramm beginn******************************************************************
      32. Do
      33. 'Hinderniss Erkennung Berechnen Begin *********************************
      34. Pulseout PORTB , 2 , 20
      35. Pulsein Zeit1 , PINB , 1 , 10
      36. Abstand1 = 0.17325 * Zeit1
      37. Abstand_s1 = Fusing(Abstand1 , "##.##")
      38. 'Print Abstand_s1 ;
      39. If Abstand_s1 => Abstand10cm Then
      40. 'Hinderniss Erkennung Berechnen Ende *********************************
      41. Print Abstand_s1
      42. R = 50 : G = 0 : B = 0 'Farbe festlegen
      43. For Led_zaehler = 0 To Ledzahl - 7 'Var Led_zaehler 0 ist Start und Ende ist Ledzahl -7
      44. R = 50 : G = 0 : B = 0 'Farbe festlegen
      45. Rb_setcolor Led_zaehler , Color(1) 'Farbe für LED festlegen
      46. Rb_send 'Farbe senden
      47. Waitms 30 'Warte
      48. Next Led_zaehler
      49. For Led_zaehler = 0 To Ledzahl - 1
      50. Rb_rotateright 0 , Ledzahl
      51. Rb_send
      52. Waitms 30
      53. Next Led_zaehler
      54. For Led_zaehler = Ledzahl - 1 To 6 Step - 1
      55. Rb_setcolor Led_zaehler , Color(1)
      56. Rb_send
      57. Waitms 30
      58. Next Led_zaehler
      59. For Led_zaehler = 0 To Ledzahl - 1
      60. Rb_rotateleft 0 , Ledzahl
      61. Rb_send
      62. Waitms 30
      63. Next Led_zaehler
      64. Else
      65. R = 200 : G = 200 : B = 200 'Farbe festlegen
      66. Rb_setcolor Ledzahl , Color(1) 'Farbe für LED festlegen
      67. Rb_send 'Farbe senden
      68. Waitms 30 'Warte
      69. End If
      70. Loop
      71. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wasi ()

    • Wasi schrieb:

      Dim Abstand10cm As String * 1

      Abstand10cm = String(1 , 49) + String(1, 48)
      Zwei Zeichen in einem String der nur eins groß sein darf ist bedenklich: Es überschreibt die nächste Variable (Dein Glück das da keine mehr kommt)
      Warum nicht Abstand10cm= "10"
      Eine if unter Strings bringt oft nicht das gewünschte Ergebnis. Besser If Abstand1 >=10

      Zum simulieren nutze ich einen adc, der kann im Simulator einfach verstellt werden um zu sehen ob der Rest des Programms alles richtig macht. Die Erfassung selbst leider nicht.

      Meine HC s haben erhebliches Rauschen (+-50?%), selbst nach 72addierten Messungen müssen noch einige Ergebnisse verworfen werden um eine brauchbare Anzeige zu haben. Sollten Deine genau so (schlecht) sein können die 10cm auch mal nur 5 sein.
    • Pluto25 schrieb:

      Wasi schrieb:

      Dim Abstand10cm As String * 1

      Abstand10cm = String(1 , 49) + String(1, 48)
      Zwei Zeichen in einem String der nur eins groß sein darf ist bedenklich: Es überschreibt die nächste Variable (Dein Glück das da keine mehr kommt)Warum nicht Abstand10cm= "10"
      Eine if unter Strings bringt oft nicht das gewünschte Ergebnis. Besser If Abstand1 >=10

      Zum simulieren nutze ich einen adc, der kann im Simulator einfach verstellt werden um zu sehen ob der Rest des Programms alles richtig macht. Die Erfassung selbst leider nicht.

      Meine HC s haben erhebliches Rauschen (+-50?%), selbst nach 72addierten Messungen müssen noch einige Ergebnisse verworfen werden um eine brauchbare Anzeige zu haben. Sollten Deine genau so (schlecht) sein können die 10cm auch mal nur 5 sein.
      Das ist ja das Problem, das hatte ich auch so drin stehen am Anfang, "10" und ich konnte nicht sehen ob das Verglichen wird noch dazu kamen Fehlermeldungen ohne ende.
      Hab dann mal im web Nachgeschaut und mir dann den String in der Hilfe angeschaut, wollte das dann mit den 10cm mit den ASCII Satz ergänzen und kam dann auf "Abstand10cm = String(1 , 49) + String(1, 48)."

      Wenn ich das dann so abänder:

      Quellcode

      1. Dim Abstand10cm As String * 1
      2. Abstand10cm = "10"
      Bekomme ich einen Fehler
      Error : 119 Line : 31 Constant too big to fit in string ["10"]

      Und wenn ich das dann noch abänder:

      Quellcode

      1. If Abstand_s1 >= 10 Then
      Kommen folgende Meldungen:

      Error : 119 Line : 31 Constant too big to fit in string ["10"]
      Error : 31 Line : 63 Invalid data type [[0011] 112[10]]
      Error : 7 Line : 63 IF THEN expected [ 63]
      Error : 123 Line : 63 END IF expected

      Zwischen 5 und 10cm hätte ich jetzt damit kein Problem, denn entweder sind es unter 10cm oder drüber, anderst bräuchte ich es nicht für diese Anwendung, es kommt nicht auf den Zentimeter an.

      Pluto25 schrieb:

      Zum simulieren nutze ich einen adc, der kann im Simulator einfach verstellt werden um zu sehen ob der Rest des Programms alles richtig macht.
      Wie macht man das, oder kann ich das wo nachlesen?
    • Es ist sehr mühsam, einen Integerwert (Pulswert) in ein Single zu wandeln und dann mit einem zusammengebastelten String zu vergleichen.
      So ein Single lässt sich auch ganz normal mit Zahlen vergleichen:

      If Abstand1 >= 10 Then...
      hatte Pluto schon genannt, deswegen will ich es hier nicht nochmal betonen

      Die Variable für Pulsein (Zeit) braucht übrigens kein Long zu sein, Word reicht.

      P.S.:

      Wasi schrieb:

      Pulsein Zeit1 , PINB , 1 , 10
      Die Hilfe beschreibt Pulsin in diesem Link:
      avrhelp.mcselec.com/index.html?pulsein.htm
      Als State ist nur 0 oder 1 erlaubt, eine 10 wird nicht erwähnt.

      Nochwas:
      Wenn du 10 cm erfassen willst, dann dauert der Puls etwa 0,6 ms, dein Pulsin hat dann den Wert 600.
      Mit 0,17 multipliziert kommt dann etwa 100 für 10 cm raus.
      Wäre also besser, du vergleichst mit 100.
    • Wasi schrieb:

      Constant too big to fit in


      If Abstand_s1 >= 10 Then
      Das sollte unbedingt beachtet werden. Das sagt das da mehr in eine Variable soll als rein passt. In Deinem Fall das der String "platzt"
      Mit Dim Abstand10cm As String * 2 wäre das gelöst

      Mein Fehler a_71_f9c57bbe das hätte Abstand1 heißen müssen . Invalid Data Type sagt das da ein falscher Typ verwendet wird (String und Zahlen sind verschiedene Typen und lassen sich nicht "einfach so" vergleichen)
    • Michael schrieb:

      Es ist sehr mühsam, einen Integerwert (Pulswert) in ein Single zu wandeln und dann mit einem zusammengebastelten String zu vergleichen.
      So ein Single lässt sich auch ganz normal mit Zahlen vergleichen:
      Aaah Ja, ok. Hab das verstanden.

      Michael schrieb:

      Die Variable für Pulsein (Zeit) braucht übrigens kein Long zu sein, Word reicht.
      Hatte ich so aus dem Netz übernommen, danke für die Info.


      Michael schrieb:

      Die Hilfe beschreibt Pulsin in diesem Link:
      avrhelp.mcselec.com/index.html?pulsein.htm
      Als State ist nur 0 oder 1 erlaubt, eine 10 wird nicht erwähnt.
      Das hatte ich mir auch angeschaut , mein fehler.
      Aber verstanden hab ich nicht wirklich, was dieser Parameter tut.???


      Pluto25 schrieb:

      Das sollte unbedingt beachtet werden. Das sagt das da mehr in eine Variable soll als rein passt. In Deinem Fall das der String "platzt"
      Mit Dim Abstand10cm As String * 2 wäre das gelöst
      Wenn ich das Richtig verstanden habe ist das für die Zeichen Anzahl zuständig.?


      Pluto25 schrieb:

      Mein Fehler das hätte Abstand1 heißen müssen . Invalid Data Type sagt das da ein falscher Typ verwendet wird (String und Zahlen sind verschiedene Typen und lassen sich nicht "einfach so" vergleichen)
      Ok, danke.


      Hab das jetzt mal so geändert:

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 8000000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. '$lib "RAINBOWBSCN.lib"
      7. 'Ein Ausgänge für Sensoren ********************************
      8. Config PORTB.1 = INPUT 'TriggerSignal zum Sensor1
      9. Config PINB.2 = OUTPUT 'Echo Signal vom Sensor1
      10. Config PORTD.5 = INPUT 'TriggerSignal zum Sensor2
      11. Config PIND.6 = OUTPUT 'Echo Signal vom Sensor2
      12. '**********************************************************
      13. Const Ledzahl = 8 ' Anzahl der LEDs
      14. Config Rainbow = 1 , Rb0_len = Ledzahl , Rb0_port = Portb , Rb0_pin = 0
      15. 'Code für Sensor *********************************************************
      16. Dim Zeit1 As Word , Messung1 As Long , Abstand1 As Single
      17. Dim Abstand_s1 As String * 8
      18. Dim Zeit2 As Long , Messung2 As Long , Abstand2 As Single
      19. Dim Abstand_s2 As String * 8
      20. Dim Abstand10cm As String * 2
      21. Abstand10cm = "10" 'PortPin = 1 und zahl 10(49und48)
      22. 'Code für LEDs*************************************************************************
      23. Dim Led_zaehler As Byte 'Zähler Var
      24. Dim Color(3) As Byte 'Farb Var
      25. R Alias Color(_base)
      26. G Alias Color(_base + 1)
      27. B Alias Color(_base + 2)
      28. R = 50 : G = 0 : B = 0 'Farbe festlegen
      29. 'Kanal Auwahl**************************************************************************
      30. Rb_selectchannel 0 'Kanal Auswahl
      31. 'Hauptprogramm beginn******************************************************************
      32. Do
      33. 'Hinderniss Erkennung Berechnen Begin *********************************
      34. Pulseout PORTB , 2 , 600
      35. Pulsein Zeit1 , PINB , 1 , 1
      36. Abstand1 = 0.17325 * Zeit1
      37. Abstand_s1 = Fusing(Abstand1 , "##.##")
      38. 'Print Abstand_s1 ;
      39. 'Hinderniss Erkennung Berechnen Ende *********************************
      40. If Abstand1 >= 10 Then
      41. Print Abstand_s1
      42. R = 50 : G = 0 : B = 0 'Farbe festlegen
      43. For Led_zaehler = 0 To Ledzahl - 7 'Var Led_zaehler 0 ist Start und Ende ist Ledzahl -7
      44. R = 50 : G = 0 : B = 0 'Farbe festlegen
      45. Rb_setcolor Led_zaehler , Color(1) 'Farbe für LED festlegen
      46. Rb_send 'Farbe senden
      47. Waitms 30 'Warte
      48. Next Led_zaehler
      49. For Led_zaehler = 0 To Ledzahl - 1
      50. Rb_rotateright 0 , Ledzahl
      51. Rb_send
      52. Waitms 30
      53. Next Led_zaehler
      54. For Led_zaehler = Ledzahl - 1 To 6 Step - 1
      55. Rb_setcolor Led_zaehler , Color(1)
      56. Rb_send
      57. Waitms 30
      58. Next Led_zaehler
      59. For Led_zaehler = 0 To Ledzahl - 1
      60. Rb_rotateleft 0 , Ledzahl
      61. Rb_send
      62. Waitms 30
      63. Next Led_zaehler
      64. Else
      65. R = 250 : G = 250 : B = 250 'Farbe festlegen
      66. Rb_setcolor Ledzahl , Color(1) 'Farbe für LED festlegen
      67. Rb_send 'Farbe senden
      68. Waitms 30 'Warte
      69. End If
      70. Loop
      71. End
      Alles anzeigen
      Das einzigste Problem das ich jetzt habe ist, wenn der HC unter die 10CM ist geht die LED 1,2,7 und 8 an und die LED 3,4,5, und 6 sind aus und die an sind
      haben nicht auf Weiß gewechselt, sondern leuchten immernoch Rot.
      Woran liegt das?
    • Daran

      Wasi schrieb:

      97. Rb_setcolor Ledzahl , Color(1)
      Es gibt keinen Index 8, der letzte ist 7 da bei 0 begonnen wird. (Ledzahl - 1 ) wäre die 8. Welche soll weiß werden?
      a_57_04ef5ee8 Es ist nicht einfach die Bascom Fehlermeldungen aus zu trixen. Das hast Du drauf :D
      Hier hätte ich einen "Error: xyz Line: 97 Array index out of range" erwachtet.

      PS Ja die Zahl hinter dem Dim ... String besagt wie groß ein String werden darf/wieviel Speicher für ihn reserviert wird.
    • Wasi schrieb:

      Aber verstanden hab ich nicht wirklich, was dieser Parameter tut.???
      Es gibt positive Pulse und negative. Mit dem Parameter wählst du sie aus.
      In dem verlinktem Hilfetext steht es beschrieben.


      Wasi schrieb:

      Das einzigste Problem das ich jetzt habe ist, wenn der HC unter die 10CM ist geht die LED 1,2,7 und 8 an und die LED 3,4,5, und 6 sind aus und die an sind
      haben nicht auf Weiß gewechselt, sondern leuchten immernoch Rot.
      Woran liegt das?

      Welchen Wert hat Ledzahl, wenn du deine LEDs auf weiß setzen willst?