Go Down

Topic: Bargraph als "Dot" ? (Read 636 times) previous topic - next topic

RaffaySH



Huhu, ich schon wieder.

An einem Analogeingang wird eine Spannung ausgewertet.
Am angeschlossenen Display soll nun der Wert als Balkenanzeige angezeigt werden.
Allerdings nicht als Balken der sich von links beginnend aufbaut.
Sondern lediglich ein "|" oder als 5x8 pixel lcd Block der je nach Wert wandert.

Kann mir da jemand einen Denkansatz liefern?

Danke schonmal

postmaster-ino

Hi

Generiere Dir eigene Zeichen oder setze die paar Pixel 'von Hand'.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Tommy56

Wenn Du ein paar Hinweise geben könntest, um was für ein Displaytyp es sich handelt, wäre es einfacher, Lösungsansätze zu finden.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

RaffaySH

#3
Jan 17, 2019, 10:27 pm Last Edit: Jan 17, 2019, 10:29 pm by RaffaySH
Gern. Es ist ein 4x20 Zeichen LC-Display mit HD44780 Controller.

Ich habe mal ein Bild angehängt damit es verständlicher ist.


https://picload.org/view/dcilowwc/img_20190117_222423.jpg.html

postmaster-ino

Hi

Schau Dir Mal das Projekt an, ist ein Thread hier aus dem Forum (LCD-Menü):
http://forum.arduino.cc/index.php?topic=73816.1400
Dort werden auch Zeichen für einen Scroll-Balken im LCD generiert.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

RudiDL5

Hallo,
oder schau vielleicht auch mal hier nach, dort gibt es sogar Zeichengeneratoren
Gruß, Rudi

RaffaySH


Ja okay, wie ich den Cursor kreiere ist klar. Aber gibt es eine Möglichkeit das nur dieser zu sehen ist?

slartibartfast

Ja okay, wie ich den Cursor kreiere ist klar. Aber gibt es eine Möglichkeit das nur dieser zu sehen ist?
Dazu brauchst Du doch nur den Cursor positionieren (lcd.setCursor) und das Cursor-Symbol schreiben (lcd.write).

RudiDL5

Mir drängt sich die Vermutung auf, dass der TO sich mit seiner Frage sehr unglücklich (unverständlich) ausgedrückt hat - und dadurch keine Antwort auf seine Frage in greifbarer Nähe ist. Vielleicht sollte er etwas näher beschreiben, was er denn "genau" erreichen will. Vielleicht durch eine Zeichnung oder ähnliches untermalen?! Ein Bild sagt in der Regel mehr aus als tausend Worte...

slartibartfast

Ich habe jetzt hier nur ein 4x20 LCD mit I2C-Backpack zum testen.
Du musst also ggf. die Ansteuerung für das LCD ändern, aber ansonsten sollte das so gehen:
Code: [Select]

#include <LiquidCrystal_I2C.h>              // von https://github.com/marcoschwartz/LiquidCrystal_I2C

LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C-Adresse, Spalten, Zeilen

uint8_t bar[][8] = {
  {B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000},
  {B01000, B01000, B01000, B01000, B01000, B01000, B01000, B01000},
  {B00100, B00100, B00100, B00100, B00100, B00100, B00100, B00100},
  {B00010, B00010, B00010, B00010, B00010, B00010, B00010, B00010},
  {B00001, B00001, B00001, B00001, B00001, B00001, B00001, B00001}
};
uint8_t ae[8] = {B01010, B00000, B01110, B00001, B01111, B10001, B01111, B00000};
uint8_t volume = 34; // Wert von 0...99

void setVolume(uint8_t vol, uint8_t row) {
  if (vol > 99) return;
  lcd.setCursor(vol / 5, row);
  lcd.write(vol % 5);
}

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  for (byte i = 0; i < 5; i++) {
    lcd.createChar(i, bar[i]);
  }
  lcd.createChar(5, ae);
  lcd.setCursor(0, 0);
  lcd.print(F("Lautst"));
  lcd.write(5);
  lcd.print(F("rke"));
  setVolume(volume, 1);
}

void loop() {
  // put your main code here, to run repeated
}

Doc_Arduino

Hallo,

mir ist noch nicht klar welchen grafischen Effekt der TO wirklich haben möchte.
Dünner senkrechter "Balken" könnte durchaus gemeint sein.

Die feinere Balkenabstufung wurde schon gezeigt. Unabhängig vom Effekt muss nur noch die Intelligenz rein das je nach Cursorposition und Analogwert der richtige Pattern ausgewählt wird. Zudem müssen alle Zellen davor komplett gefüllt werden und rückwärts die letzte Zelle wieder gelöscht. Mehr Zauber ist das nicht.   ;)



 
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

slartibartfast

mir ist noch nicht klar welchen grafischen Effekt der TO wirklich haben möchte.
Dünner senkrechter "Balken" könnte durchaus gemeint sein.
Im ersten Post schreibt er doch:

Allerdings nicht als Balken der sich von links beginnend aufbaut.
Sondern lediglich ein "|" oder als 5x8 pixel lcd Block der je nach Wert wandert.
und in Post#3 hat er einen Link zu einem Bild gepostet, bei dem ich das so verstehe, dass er das untere Bild meint.
Mein Sketch unterteilt den 5x8 Block nun noch in einzelne Balken, sodass man auf einem 20-Spalten-LCD eine Auflösung von 100 Balken bekommt.


Doc_Arduino

Hallo,

ist schon okay, "Dot" & "Balken" kann man durchaus groooßzügig auslegen ...   :smiley-mr-green:
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

agmue

#13
Jan 19, 2019, 04:58 pm Last Edit: Jan 19, 2019, 10:53 pm by agmue
Dazu brauchst Du doch nur den Cursor positionieren (lcd.setCursor) und das Cursor-Symbol schreiben (lcd.write).
... und vorher die alte Position löschen. Das hast Du in #9 leider vergessen, läßt sich aber leicht ergänzen:

Code: [Select]
void setVolume(uint8_t vol, uint8_t row) {
  static uint8_t alt = 100;
  if (vol != alt) {
    lcd.setCursor(alt / 5, row);
    lcd.print(' ');
    if (vol > 99) return;
    lcd.setCursor(vol / 5, row);
    lcd.write(vol % 5);
    alt = vol;
  }
}

Dein Programm kommt in meine Sammlung nützlicher Dinge, die man mal gebrauchen könnte :)

Der TO hätte sich ja auch mal melden können :smiley-cry:  :smiley-evil:

EDIT: Abfrage auf Änderung eingefügt.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Doc_Arduino

Hallo,

so einfach ist das nun auch nicht. ;)  Denn es hat einen häßlichen optischen Fehler.
Schau dir das einmal an wenn das Zeichen auf der Stelle tritt.
Erst bei Änderung der Cursorposition sollten Aktionen starten.

Aber, ich verstehe jetzt was der TO mit "DOT" im Zusammenhang mit Balken meint. Ein einzelner Balken soll alleine wandern.  :)
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up