LCD 2x16 Tankanzeige Hochkant

    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!

    • Natürlich gibt es eine elegante Lösung für Euer Problem, allerdings nicht ganz preiswert. Ihr laßt Euch beim freundlichen Chinesen Displays mit eigenem Zeichensatz herstellen, dann könnt Ihr jedes der vorprogrammierten asiatischen Zeichen mit einem eigenen Zeichen belegen :D Allerdings weiß ich nicht wie hoch da die Mindestbestellmenge ist.
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • ok, WE,
      nun habe ich auch gleich mal ein Problem. :D
      Für einen der Tanks möchte ich einen US Sensor einbauen. Der Code für die Auswertung (für Testzwecke mit HC-SR04) und für das schreiben auf das Display läuft soweit gut, bis auf ......

      Bei jeder Wertänderung muss ja entweder ein Block oder ein Strich in die linke Reihe geschrieben werden und alle Striche die kleiner als der aktuelle Wert sind, mit Blöcken aufgefüllt werden.

      Da ich gerade unterwegs bin, kann ich meinen Code nicht posten. Aus Langeweile dachte ich mir, ich mach mal eine Textaufgabe daraus.... :thumbsup: . Aber für die Gehirnakrobaten unter uns sollte auch eine lose Beschreibung reichen, oder... ?? :whistling: (MIT abgedrucktem code kann jeder) :D

      Do

      Ich habe alle vom Sensor ausgelesenen 14 Stufen mit Case Select zugewiesen ( Wert, von-bis) und eine Variable C jeweils mit den Case Stufen versehen, also 1-14.
      Danach eine zweite Variable B (Strich )mit dem jeweiligen Wert von C (Block) geladen.
      Dann in einer 14 fachen For-Next Schleife den Wert C um 1 erhöht und den Wert B um 1 verkleinert. C wird begrenzt auf 16 und B auf 4.
      Danach wird Wert C (Block) und dann Wert B (Strich) ins LCD geschrieben und mit Next beendet.

      Loop
      End

      Läuft soweit gut.
      Nun treffen sich aber C und B irgendwann in der Begrenzung, nämlich bei Locate 2, 4
      Und da klemmt es. ( -> kein Block bei 40 Liter )

      Momentan habe ich das Lösungsheft für diese Textaufgabe verlegt. Hat einer von euch die Auflösung ? a_14_3ef964b0

      ( Den Code Gibt es dann Morgen doch noch nachgeliefert)
      ^^

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Confuser ()

    • Confuser schrieb:

      Hat einer von euch die Auflösung ?
      Natürlich nicht :D

      Aber vielleicht hilft das. Bedingung ist aber, erst die zweite Zeile mit den Sonderzeichen
      beschreiben. Danach das LCD nicht mehr löschen.


      BASCOM-Quellcode

      1. '------------------------------------------------
      2. Dim I As Byte 'Zählvariable
      3. Dim M As Byte 'Messwert(skaliert)
      4. For I = 1 To 14
      5. If M >= I Then
      6. Locate 1 , I
      7. Lcd Chr(255) 'Block
      8. Else
      9. Locate 1 , I
      10. Lcd Chr(124) 'Strich
      11. Next I
      12. '------------------------------------------------
      Alles anzeigen
      Versuch das mal in dein Programm einzubauen.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Ich wollte ja nicht aufdringlich sein, aber das als 'Spoiler' hier rein zu setzen, hat irgendwie nicht recht geklappt. Der Kasten wirkt jetzt unabsichtlich penetrant :S
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich hab mal ein kleines Programm simuliert. Es sieht im Simulator
      eigentlich ganz gut aus. Die Werte in dem Programm sind rein zufällig,
      können aber für den jeweiligen Fall angepasst werden.

      BASCOM-Quellcode

      1. '*******************************************
      2. '* Test Deflcdchar mit acht Zeichen *
      3. '* für senkrechtes LCD mit Balkenanzeige *
      4. '* Messwertsimulation über PortD *
      5. '*******************************************
      6. $regfile = "attiny2313.dat"
      7. $crystal = 1000000
      8. $swstack = 24
      9. $hwstack = 24
      10. $framesize = 32
      11. $sim
      12. Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , Rs = Portb.6
      13. Config Lcd = 16 * 2
      14. Cursor Off
      15. Cls
      16. Config Portd = Input 'Messwertsimulat
      17. Dim M As Byte 'Messwert
      18. Dim I As Byte 'F-N Hilfsvariable
      19. Dim C As Byte 'Char Hilfsvariable
      20. Gosub Zeichen1 'Skalenbild
      21. Do
      22. M = Pind 'Wert einlesen
      23. M = M And 15 'auf 15 begrenzen
      24. Gosub Zeichen2 'anzeigen
      25. Loop
      26. End
      27. Zeichen1:
      28. Cls
      29. Deflcdchar 0 , 32 , 31 , 17 , 31 , 32 , 31 , 17 , 31 '0
      30. Deflcdchar 1 , 32 , 2 , 31 , 32 , 32 , 31 , 17 , 31 ' 10
      31. Deflcdchar 2 , 32 , 29 , 21 , 23 , 32 , 31 , 17 , 31 ' 20
      32. Deflcdchar 3 , 32 , 17 , 21 , 31 , 32 , 31 , 17 , 31 ' 30
      33. Deflcdchar 4 , 32 , 7 , 4 , 31 , 32 , 31 , 17 , 31 ' 40
      34. Deflcdchar 5 , 32 , 23 , 21 , 29 , 32 , 31 , 17 , 31 ' 50
      35. Deflcdchar 6 , 32 , 31 , 21 , 21 , 32 , 31 , 16 , 16 ' EL
      36. Deflcdchar 7 , 32 , 31 , 5 , 5 , 32 , 31 , 16 , 31 ' FU
      37. For I = 1 To 11 'Striche zeichnen
      38. Locate 1 , I
      39. Lcd Chr(124)
      40. Next I
      41. Locate 1 , 15
      42. Lcd Chr(7)
      43. Locate 2 , 15
      44. Lcd Chr(6)
      45. For I = 1 To 11 Step 2 'Messskala
      46. Locate 2 , I
      47. C = I \ 2
      48. Lcd Chr(c)
      49. Next I
      50. Return
      51. Zeichen2:
      52. For I = 1 To 11
      53. If M >= I Then
      54. Locate 1 , I
      55. Lcd Chr(255) 'Balken
      56. Else
      57. Locate 1 , I
      58. Lcd Chr(124) 'Strich
      59. End If
      60. Next I
      61. Return
      Alles anzeigen
      Um eine andere Scala darzustellen , muss da UP Zeichen1 entsprechend angepasst werden.
      Das Strich - Balken _ Prinzip bleibt aber immer das gleiche.
      Ich stelle das jetzt mal zur Diskussion.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • WOW, vielen Dank das ihr euch so rein hängt a_22_9ac28a82
      ( Und ihr beherscht Textaufgaben a_57_04ef5ee8 )

      Hier wie versprochen mein bisheriger Code, allerdings noch mit dem besagten Fehler.
      Aber ich sehe schon, dass ich mir das wohl zu einfach gemacht habe ... a_481_60a3be70
      Ich werde mal eure Ansätze einfließen lassen.

      BASCOM-Quellcode: Tank Gauge

      1. ' LCD Vertical Tank Gauge
      2. ' by Confuser
      3. ' Arduino NANO
      4. ' LCD 1602A,(16x2) Display (Blue)
      5. ' HC-SR04 Sensor
      6. $regfile = "m328pdef.dat"
      7. $crystal = 16000000
      8. $baud = 9600 'For Range Test
      9. $hwstack = 32
      10. $framesize = 32
      11. $swstack = 32
      12. Dim I As Byte
      13. Dim B As Byte
      14. Dim C As Byte
      15. Dim Range As Word
      16. Config Portb.0 = Output 'Trigger out
      17. Config Pinb.1 = Input 'Echo in
      18. Pinb.1 = 1
      19. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
      20. Config Lcd = 16 * 2
      21. Cls
      22. Cursor Off
      23. '--------------- Character Design ----------------------
      24. ' [x]
      25. Deflcdchar 6 , 31 , 20 , 31 , 32 , 16 , 31 , 16 , 32 ' = TA
      26. Deflcdchar 1 , 9 , 6 , 31 , 32 , 31 , 3 , 12 , 31 ' = NK
      27. Deflcdchar 0 , 31 , 17 , 31 , 32 , 32 , 32 , 32 , 32 ' = 0
      28. 'Deflcdchar 2 , 23 , 21 , 29 , 32 , 29 , 21 , 23 , 32 ' = 25
      29. 'Deflcdchar 3 , 31 , 17 , 31 , 32 , 23 , 21 , 29 , 32 ' = 50
      30. 'Deflcdchar 4 , 23 , 21 , 29 , 32 , 31 , 16 , 16 , 32 ' = 75
      31. 'Deflcdchar 5 , 23 , 21 , 29 , 32 , 31 , 21 , 29 , 32 ' = 95
      32. 'Deflcdchar 5 , 31 , 21 , 29 , 32 , 31 , 21 , 29 , 32 ' = 99
      33. Deflcdchar 2 , 31 , 17 , 31 , 32 , 31 , 8 , 32 , 32 ' = 10
      34. Deflcdchar 3 , 31 , 17 , 31 , 32 , 29 , 21 , 23 , 32 ' = 20
      35. Deflcdchar 4 , 31 , 17 , 31 , 32 , 31 , 21 , 21 , 32 ' = 30
      36. Deflcdchar 5 , 31 , 17 , 31 , 32 , 31 , 4 , 28 , 32 ' = 40
      37. 'Deflcdchar 7 , 30 , 21 , 13 , 32 , 17 , 10 , 4 , 31 ' = Kg
      38. Deflcdchar 7 , 5 , 10 , 15 , 16 , 31 , 16 , 1 , 31 ' = LTR
      39. 'Deflcdchar 7 , 32 , 3 , 11 , 4 , 2 , 13 , 12 , 32 ' = %
      40. 'Deflcdchar 7 , 32 , 3 , 19 , 8 , 4 , 2 , 25 , 24 ' = %
      41. '------ TANK Lable -----
      42. Locate 2 , 1
      43. Lcd Chr(6)
      44. Locate 1 , 1
      45. Lcd Chr(1)
      46. '------ %, Kg, LTR ------
      47. Locate 1 , 2
      48. Lcd Chr(7)
      49. 'Lcd "%"
      50. '------ Fill with Scale Marks ----
      51. B = 3
      52. For I = 1 To 13
      53. B = B + 1
      54. Locate 2 , B
      55. Lcd "|"
      56. Next I
      57. '------ Scale 0 - 99% (^100%) ---
      58. Locate 1 , 4
      59. Lcd Chr(5)
      60. Locate 1 , 7
      61. Lcd Chr(4)
      62. Locate 1 , 10
      63. Lcd Chr(3)
      64. Locate 1 , 13
      65. Lcd Chr(2)
      66. Locate 1 , 16
      67. Lcd Chr(0)
      68. B = 4
      69. Locate 2 , 3
      70. Lcd " "
      71. 'Wait 1
      72. For I = 1 To 13
      73. Locate 2 , B
      74. Lcd "|"
      75. B = B + 1
      76. Next
      77. '----------- Readout --------------
      78. Do
      79. Pulseout Portb , 0 , 40 'HC-SR04, Trigger
      80. Portb.0 = 0
      81. Pulsein Range , Pinb , 1 , 1 'HC-SR04, Echo to Range
      82. Select Case Range
      83. Case 1 To 17 : C = 3 : Locate 2 , 3 : Lcd "<" 'Overfill
      84. Case 18 To 34 : C = 4 : Locate 2 , 4 : Lcd Chr(255) 'High Level
      85. Case 35 To 51 : C = 5 : Locate 2 , 5 : Lcd Chr(255)
      86. Case 52 To 68 : C = 6 : Locate 2 , 6 : Lcd Chr(255)
      87. Case 69 To 85 : C = 7 : Locate 2 , 7 : Lcd Chr(255)
      88. Case 86 To 102 : C = 8 : Locate 2 , 8 : Lcd Chr(255)
      89. Case 103 To 119 : C = 9 : Locate 2 , 9 : Lcd Chr(255)
      90. Case 120 To 136 : C = 10 : Locate 2 , 10 : Lcd Chr(255)
      91. Case 137 To 153 : C = 11 : Locate 2 , 11 : Lcd Chr(255)
      92. Case 154 To 170 : C = 12 : Locate 2 , 12 : Lcd Chr(255)
      93. Case 171 To 187 : C = 13 : Locate 2 , 13 : Lcd Chr(255)
      94. Case 188 To 204 : C = 14 : Locate 2 , 14 : Lcd Chr(255)
      95. Case 205 To 221 : C = 15 : Locate 2 , 15 : Lcd Chr(255)
      96. Case 222 To 238 : C = 16 : Locate 2 , 16 : Lcd Chr(255) 'Low Level
      97. End Select
      98. If C > 3 Then Locate 2 , 3 : Lcd " " 'Overfill cancel
      99. B = C
      100. For I = 1 To 14
      101. C = C + 1
      102. If C > 16 Then C = 17 ' Limit C
      103. Locate 2 , C
      104. Lcd Chr(255) 'Fill with Blocks
      105. B = B - 1
      106. If B < 4 Then B = 4 ' Limit B
      107. Locate 2 , B
      108. Lcd "|" 'Fill with Dashes
      109. Next
      110. Print Range ' Range Test Readout
      111. Loop
      112. End
      Alles anzeigen

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

    • Dekaman schrieb:

      Ich hab mal ein kleines Programm simuliert. Es sieht im Simulator
      eigentlich ganz gut aus.

      Ich denke (ungetestet) dass das im Simulator nur gut aussieht, weil dieser nicht berücksichtigt, dass das LCD einen eigenen Controller hat. Der Simulator arbeitet nur ab, was ihm im Programmcode vorgesetzt wird. Das LCD muss aber den Zeichenspeicher verwalten und dieser hat nun mal nur die 8 benutzerdefinierten Zeichen zur Verfügung.


      Eigentlich ist es ja schon toll, dass man überhaupt eigenen Zeichen darstellen kann. Irgendwo ist da halt die Grenze, an welcher andere Displaytypen (GLCD) ihre Stärken ausspielen können.


      Gruß Christian
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • ceperiga schrieb:

      Ich denke (ungetestet) dass das im Simulator nur gut aussieht, weil dieser nicht berücksichtigt, dass das LCD einen eigenen Controller hat. Der Simulator arbeitet nur ab, was ihm im Programmcode vorgesetzt wird. Das LCD muss aber den Zeichenspeicher verwalten und dieser hat nun mal nur die 8 benutzerdefinierten Zeichen zur Verfügung.
      Ich weis jetzt nicht, was du mir damit sagen willst. Ich habe im Moment nicht die Zeit, auch noch einen
      hardwaremäßigen Aufbau zu machen, einen Controller zu brennen, und das alles in Reality zu testen.
      @Confuser hat aber schon alles, kann also versuchen , UP Zeichen1 und UP Zeichen2 in sein Programm
      einzubinden. Und dann selber testen.
      ? dieser hat nun mal nur die 8 benutzerdefinierten Zeichen zur Verfügung ?
      in meinem Programm werden ja auch nur 8 DefChar verwendet.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • hey, alles gut !!!
      Es geht hierbei nur darum, Dinge auch mal anders zu gebrauchen und dafür auch mal quer zu denken. a_58_b54cfdb4

      @Dekaman
      Hab deinen Code schon ausprobiert und sieht statisch auch schon ganz gut aus. Steht bei mir nur auf dem Kopf, aber da die Hardware schon fertig ist kann ich es mechanisch nicht mehr drehen. Aber ich kann den Code ja drehen... a_15_a5ddcf85
      Ob deine Version auch mit meinen Messwerten geht kann ich noch nicht sagen.

      Deinen ersten Code- Schnipsel konnte ich bei mir noch nicht funktionsfähig reinfummeln. Etwas Ähnliches hatte ich auch schon probiert, aber noch ohne Erfolg.
    • Confuser schrieb:

      Steht bei mir nur auf dem Kopf, aber da die Hardware schon fertig ist kann ich es mechanisch nicht mehr drehen.
      Ich habe es so programmiert, das ,mechanisch betrachtet, Locate 1,1 links unten ist. Also
      die "normale" Einbaulage" um - 90 Grad gedreht. Ist bei dir aber Locate 1,1 rechts oben,
      musst du natürlich alles softwaremäßig anpassen. Dadurch ändert sich natürlich auch die
      Berechnung der Striche und Balken. Da musst du dann wahrscheinlich mit relativen Positionen
      arbeiten.
      Bei meinem Programm wird der Messwert an die Variable M übergeben. Dann wird der Messwert
      mit der jeweiligen Locate-Position verglichen. Ist die Position kleiner oder gleich dem Messwert,
      wird ein Balken geschrieben. Ist der Messwert kleiner der Position, ein Strich.
      Ist bei dir alles umgekehrt, müssen Balken und Striche getauscht werden.
      Versuchs einfach mal. Oder stell dein aktuelles Programm mal ein.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Mein komplettes Programm ist hier weiter oben doch schon drin ?!

      ok, es ist sicherlich nicht so elegant geschrieben wie deine Version, aber ich bin noch Anfänger und kenne längst noch nicht alle Funktionen und Tricks.
      Aber es funktioniert auch schon sehr gut, bis auf den kleinen blöden Fehler...

      Also, learning by doing !
    • Confuser schrieb:

      ok, es ist sicherlich nicht so elegant geschrieben wie deine Version, aber ich bin noch Anfänger und kenne längst noch nicht alle Funktionen und Tricks.
      Nur keine Angst. Ich kratze auch nur an der Oberfläche a_481_60a3be70
      Ich habe noch mal "mein" Programm dahingehend geändert, das es mit deiner
      LCD-Einbaulage funktionieren sollte.
      Du kannst ja mal versuchen, mit meinem UP Zeichen1 dein LCD zu befeuern.
      Wenn das klappt, kannst du ja deine Messwerte so aufbereiten, das sie von 0 bis 12
      gehen und dann versuchen, sie mit UP Zeichen2 anzuzeigen.


      BASCOM-Quellcode

      1. '*******************************************
      2. '* Test Deflcdchar mit acht Zeichen *
      3. '* für senkrechtes LCD mit Balkenanzeige *
      4. '* Messwertsimulation über PortD *
      5. '* Locate 1,1 rechts oben *
      6. '*******************************************
      7. $regfile = "attiny2313.dat"
      8. $crystal = 1000000
      9. $swstack = 24
      10. $hwstack = 24
      11. $framesize = 32
      12. $sim
      13. Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.5 , Rs = Portb.6
      14. Config Lcd = 16 * 2
      15. Cursor Off
      16. Cls
      17. Config Portd = Input 'Messwertsimulat
      18. Dim M As Byte 'Messwert
      19. Dim I As Byte 'F-N Hilfsvariable
      20. Dim C As Byte 'Char Hilfsvariable
      21. Gosub Zeichen1 'Skalenbild
      22. Do
      23. M = Pind 'Wert einlesen
      24. M = M And 15 'auf 15 begrenzen
      25. Gosub Zeichen2 'anzeigen
      26. Loop
      27. End
      28. Zeichen1:
      29. Cls
      30. Deflcdchar 7 , 31 , 1 , 31 , 32 , 20 , 20 , 31 , 32 ' FU
      31. Deflcdchar 6 , 1 , 1 , 31 , 32 , 21 , 21 , 31 , 32 ' EL
      32. Deflcdchar 5 , 31 , 17 , 31 , 32 , 23 , 21 , 29 , 32 ' 50
      33. Deflcdchar 4 , 31 , 17 , 31 , 32 , 31 , 4 , 28 , 32 ' 40
      34. Deflcdchar 3 , 31 , 17 , 31 , 32 , 31 , 21 , 21 , 32 ' 30
      35. Deflcdchar 2 , 31 , 17 , 31 , 32 , 29 , 21 , 23 , 32 ' 20
      36. Deflcdchar 1 , 31 , 17 , 31 , 32 , 32 , 31 , 8 , 32 ' 10
      37. Deflcdchar 0 , 31 , 17 , 31 , 32 , 31 , 17 , 31 , 32 ' 00
      38. For I = 16 To 3 Step -1 'Striche zeichnen
      39. Locate 2 , I
      40. Lcd Chr(124)
      41. Next I
      42. Locate 2 , 1 'Skalennamen
      43. Lcd Chr(7)
      44. Locate 1 , 1
      45. Lcd Chr(6)
      46. For I = 16 To 6 Step -2 'Skala
      47. Locate 1 , I
      48. C = I \ 2
      49. C = 8 - C
      50. Lcd Chr(c)
      51. Next I
      52. Return
      53. Zeichen2:
      54. M = 16 - M
      55. For I = 16 To 6 Step -1
      56. If I > M Then
      57. Locate 2 , I
      58. Lcd Chr(255) 'Balken
      59. Else
      60. Locate 2 , I
      61. Lcd Chr(124) 'Strich
      62. End If
      63. Next I
      64. Return
      Alles anzeigen
      Probiers einfach mal. Und berichte !

      noch einen schönen Abend

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • @Dekaman

      Ich habe jetzt unsere beiden Programme " gemerged "
      Was soll ich sagen, es läuft PRÄCHTIG !! a_64_3a718cae Ich bin total begeistert wie cool das auf dem Display läuft , wie auf meinen Bildern im ersten Post !
      Ich habe noch einige Änderungen vornehmen müssen, aber die kannst du sicher aus dem Programm herauslesen. Auch habe ich sehr viel kommentiert, aber ich möchte auch noch nach einem Jahr sofort wieder durchblicken können.

      Das war ein tolles Projekt und dank deiner Hilfe habe ich wieder eine Menge dazugelernt !!!
      ( Wenn wir uns mal sehen, gebe ich einen aus ) trinkende-smileys-200 :D
      Vielen Dank nochmal, auch an dieses tolle Forum !



      ( Hmm... man könnte sich ja auch noch eine GUI über die Com Schnittstelle ausdenken, um das Display zu Konfigurieren, Sensor Typ und Tank Daten zu Linearisieren, Einbaulage, Beleuchtung ....... )
      a_598_5d1cb30a



      Hier noch der Finale Code - ( Ich denke wir haben uns beide ein Like verdient ... a_167_7bbcf6ac )

      Quellcode

      1. '*******************************************
      2. '* Vertikale Tankanzeige *
      3. '* *
      4. '* Für senkrechtes LCD mit Balkenanzeige *
      5. '* *
      6. '* Deflcdchar mit acht Zeichen *
      7. '* Locate 1,1 rechts oben *
      8. '* *
      9. '* Ein Join Venture von Confuser *
      10. '* und -> Dekaman :) *
      11. '* *
      12. '*******************************************
      13. '
      14. ' Arduino NANO
      15. ' LCD 1602A,(16x2) Display (Blue)
      16. ' Sensor HC-SR04 ( Ultraschall )
      17. $regfile = "m328pdef.dat"
      18. $crystal = 16000000
      19. $baud = 9600 'For Range Test
      20. $hwstack = 32
      21. $framesize = 32
      22. $swstack = 32
      23. Dim I As Byte
      24. Dim C As Byte
      25. Dim Range As Word
      26. Config Portb.0 = Output 'Trigger out
      27. Config Pinb.1 = Input 'Echo in
      28. Pinb.1 = 1
      29. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
      30. Config Lcd = 16 * 2
      31. Cls
      32. Cursor Off
      33. '--------------- Character Design ----------------------
      34. 'Deflcdchar 6 , 31 , 1 , 31 , 32 , 20 , 20 , 31 , 32 ' = FU
      35. 'Deflcdchar 1 , 1 , 1 , 31 , 32 , 21 , 21 , 31 , 32 ' = EL
      36. Deflcdchar 6 , 31 , 20 , 31 , 32 , 16 , 31 , 16 , 32 ' = TA
      37. Deflcdchar 1 , 9 , 6 , 31 , 32 , 31 , 3 , 12 , 31 ' = NK
      38. 'Deflcdchar 0 , 32 , 32 , 21 , 21 , 31 , 32 , 32 , 32 ' = E
      39. 'Deflcdchar 3 , 29 , 23 , 32 , 8 , 4 , 2 , 32 , 31 ' = 1/2
      40. 'Deflcdchar 5 , 32 , 32 , 20 , 20 , 31 , 32 , 32 , 32 ' = F
      41. Deflcdchar 0 , 31 , 17 , 31 , 32 , 32 , 32 , 32 , 32 ' = 0
      42. 'Deflcdchar 2 , 23 , 21 , 29 , 32 , 29 , 21 , 23 , 32 ' = 25
      43. 'Deflcdchar 3 , 31 , 17 , 31 , 32 , 23 , 21 , 29 , 32 ' = 50
      44. 'Deflcdchar 4 , 23 , 21 , 29 , 32 , 31 , 16 , 16 , 32 ' = 75
      45. 'Deflcdchar 5 , 23 , 21 , 29 , 32 , 31 , 21 , 29 , 32 ' = 95
      46. 'Deflcdchar 5 , 31 , 21 , 29 , 32 , 31 , 21 , 29 , 32 ' = 99
      47. Deflcdchar 2 , 31 , 17 , 31 , 32 , 31 , 8 , 32 , 32 ' = 10
      48. Deflcdchar 3 , 31 , 17 , 31 , 32 , 29 , 21 , 23 , 32 ' = 20
      49. Deflcdchar 4 , 31 , 17 , 31 , 32 , 31 , 21 , 21 , 32 ' = 30
      50. Deflcdchar 5 , 31 , 17 , 31 , 32 , 31 , 4 , 28 , 32 ' = 40
      51. 'Deflcdchar 7 , 1 , 15 , 32 , 14 , 3 , 14 , 1 , 15 ' = LvL
      52. 'Deflcdchar 7 , 30 , 21 , 13 , 32 , 17 , 10 , 4 , 31 ' = Kg
      53. Deflcdchar 7 , 5 , 10 , 15 , 16 , 31 , 16 , 1 , 31 ' = LTR
      54. 'Deflcdchar 7 , 32 , 3 , 11 , 4 , 2 , 13 , 12 , 32 ' = %
      55. 'Deflcdchar 7 , 32 , 3 , 19 , 8 , 4 , 2 , 25 , 24 ' = %
      56. '------ TANK Label -----
      57. Locate 2 , 1
      58. Lcd Chr(6)
      59. Locate 1 , 1
      60. Lcd Chr(1)
      61. '------ Unit ------
      62. Locate 1 , 2
      63. Lcd Chr(7)
      64. '------ Level Marks ------
      65. Locate 2 , 3 : Lcd Chr(32)
      66. For I = 16 To 3 Step -1 'Striche zeichnen
      67. Locate 2 , I
      68. Lcd Chr(124)
      69. Next I
      70. '------ Scale ------
      71. Locate 1 , 4
      72. Lcd Chr(5)
      73. Locate 1 , 7
      74. Lcd Chr(4)
      75. 'Lcd Chr(42)
      76. Locate 1 , 10
      77. Lcd Chr(3)
      78. 'Lcd Chr(42)
      79. Locate 1 , 13
      80. Lcd Chr(2)
      81. 'Lcd Chr(42)
      82. Locate 1 , 16
      83. Lcd Chr(0)
      84. '------ Sensor Readout -----
      85. Do
      86. Pulseout Portb , 0 , 40 'HC-SR04, Trigger
      87. Portb.0 = 0
      88. Pulsein Range , Pinb , 1 , 1 'HC-SR04, Echo to Range
      89. If Range > 238 Then Range = 239 'Range Limit
      90. '------ Level -------
      91. Select Case Range
      92. Case 1 To 25 : C = 3 'Overfill
      93. Case 18 To 34 : C = 4 'High Level
      94. Case 35 To 51 : C = 5
      95. Case 52 To 68 : C = 6
      96. Case 69 To 85 : C = 7
      97. Case 86 To 102 : C = 8
      98. Case 103 To 119 : C = 9
      99. Case 120 To 136 : C = 10
      100. Case 137 To 153 : C = 11
      101. Case 154 To 170 : C = 12
      102. Case 171 To 187 : C = 13
      103. Case 188 To 204 : C = 14
      104. Case 205 To 221 : C = 15
      105. Case 222 To 238 : C = 16 'Low Level
      106. End Select
      107. '------ Tank Limit -------
      108. If C < 4 Then
      109. Locate 2 , 3 : Lcd Chr(60) 'Overfill on
      110. Else
      111. Locate 2 , 3 : Lcd Chr(32) 'Overfill off
      112. End If
      113. '------ Level to Display ------
      114. For I = 4 To 16 Step 1
      115. If I < C Or Range > 238 Then
      116. Locate 2 , I
      117. Lcd Chr(124) 'Strich
      118. Else
      119. Locate 2 , I
      120. Lcd Chr(255) 'Balken
      121. End If
      122. Next I
      123. Print Range ' Level Test Readout
      124. Loop
      125. End
      Alles anzeigen
    • @Confuser
      Was soll ich sagen, Lübzer UrQuell oder Freiberger Export trinkende-smileys-211
      Es freut mich, das ich dir helfen konnte. Und das ist ja auch Sinn und Zweck des Forums.
      Es ging ja auch nicht darum, mein Programm zu übernehmen, sondern die Algorithmen
      in dein Programm einzubauen. Ich denke ja, das Prinzip hast du jetzt verstanden.
      Ja , da sind noch einige Sachen möglich. Einfach hier fragen, wenn es irgendwo klemmt.
      Ich wünsch dir weiterhin Erfolg - und - man liest voneinander.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.