Go Down

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

agmue

Denn es hat einen häßlichen optischen Fehler.
Sorry, ich sehe es nicht :o

Erst bei Änderung der Cursorposition sollten Aktionen starten.
Das habe ich in #13 eingebaut, sollte man so machen.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Doc_Arduino

#16
Jan 20, 2019, 01:34 am Last Edit: Jan 20, 2019, 01:44 am by Doc_Arduino
Hallo,

der Effekt war vorher das die Zeichendarstellung "flimmerte". Weil ständig die aktuelle Zelle gelöscht und wieder beschrieben wurde. Dadurch hatte die Darstellung nicht den vollen Kontrast. Auch wenn sie stand. Jetzt ist der Effekt weg wenn sich der Eingangswert nicht ändert.

Wenn er sich ändert, ist der Effekt praktisch wieder vorhanden. Denn die Eingangswerte können sich zwar ändern, aber die Zellenposition kann bis zu 5x gleich bleiben. Der "schwache Kontrast" Effekt ist nun Geschwindigkeitsabhängig.

Und ich verrate noch das nächste Problem. Was passiert wenn die Werte vom A/D Sprünge machen?

(Text nochmals korrigiert)
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

#17
Jan 20, 2019, 10:42 am Last Edit: Jan 20, 2019, 12:26 pm by agmue
Ich komme mir etwas vor wie bei "Ich sehe was, was Du nicht siehst!".

der Effekt war vorher das die Zeichendarstellung "flimmerte".
War mir nicht aufgefallen.

Wenn er sich ändert, ist der Effekt praktisch wieder vorhanden.
Ich denke, das ist halt so. Zumindest fällt mir kein Gegenmittel ein.

Und ich verrate noch das nächste Problem. Was passiert wenn die Werte vom A/D Sprünge machen?
Der alte Balken wird gelöscht, der neue geschrieben.

Eine kleine Optimierung habe ich noch, wenn der Balken innerhalb des Zeichens bleibt:

Code: [Select]
void setVolume(uint8_t vol, uint8_t row) {
  static uint8_t alt = 100;
  if (vol != alt) {
    if (vol / 5 != alt / 5) {
      lcd.setCursor(alt / 5, row);
      lcd.print(' ');
    }
    if (vol > 99) return;
    lcd.setCursor(vol / 5, row);
    lcd.write(vol % 5);
    alt = vol;
  }
}
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Doc_Arduino

#18
Jan 20, 2019, 12:23 pm Last Edit: Jan 20, 2019, 12:24 pm by Doc_Arduino
Hallo,

genau, Zellenposition vergleichen. Perfekt. Spart auch Zeit für Cursor setzen und Zeichen schreiben.

Wegen dem angesprochenen nächsten Problem. Ja da war ich gestern wohl schon zu müde. Ich habe das bei mir anders aufgebaut, dadurch habe ich es hier übersehen  :smiley-confuse: , weil der Ablauf anders ist. Alles gelöst, alles passt.   :)   Ich hoffe der TO weiß das zu schätzen.

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

Alles gelöst, alles passt.   :)
:)

Ich hoffe der TO weiß das zu schätzen.
Warten wir mal ab, aber ich mache das aus Respekt vor slartibartfast und weil es mir Spaß macht.

Möglicherweise gibt es ja auch anonyme Mitleser, die sich freuen. Am Anfang habe ich ganz viel von Kanadiern und Neuseeländern gelernt, ohne daß ich mich bedanken konnte.
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Doc_Arduino

Hallo,

solche Spielerreihen zur optischen Perfektion zutreiben machen mir Spass.  :)
Zum Schluss noch eine RAM Optimierung.

Code: [Select]

const byte bar0[8] PROGMEM = {B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000};
const byte bar1[8] PROGMEM = {B01000, B01000, B01000, B01000, B01000, B01000, B01000, B01000};
const byte bar2[8] PROGMEM = {B00100, B00100, B00100, B00100, B00100, B00100, B00100, B00100};
const byte bar3[8] PROGMEM = {B00010, B00010, B00010, B00010, B00010, B00010, B00010, B00010};
const byte bar4[8] PROGMEM = {B00001, B00001, B00001, B00001, B00001, B00001, B00001, B00001};

void Sonderzeichen_laden ()
{
  byte Zeichen[8] = { };
  memcpy_P( Zeichen, bar0, sizeof Zeichen ); lcd.createChar(0, Zeichen);
  memcpy_P( Zeichen, bar1, sizeof Zeichen ); lcd.createChar(1, Zeichen);
  memcpy_P( Zeichen, bar2, sizeof Zeichen ); lcd.createChar(2, Zeichen);
  memcpy_P( Zeichen, bar3, sizeof Zeichen ); lcd.createChar(3, Zeichen);
  memcpy_P( Zeichen, bar4, sizeof Zeichen ); lcd.createChar(4, Zeichen);
}

Wünsche angenehmen Sonntag. Sonne scheint ja.
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

Da sich der TO nicht selbst meldet, möchte ich hier mal eine abschliessende Rückmeldung geben.
Vorab: Klasse, wie ihr meinen Sketch hier noch erweitert habt. Danke dafür!  :)

Ich hatte mit "RaffaySH" noch per Mail Kontakt. Im Prinzip war mein Sketch schon das Richtige. Er wollte also wirklich einen 1-Pixel breiten Balken, der sich dann über das LCD bewegt.
Wie sich im Laufe der "Unterhaltung" herausstellte, will er das aber als Levelmeter benutzen, woraufhin ich ihm mitteilte, dass die LCDs dafür zu träge reagieren und er lieber auf LEDs ausweichen soll.
Oder habt ihr da andere Erfahrungen gemacht?


Doc_Arduino

Hallo,

also wenn der eine 1 Pixel breite Balken springen darf, dann sehe ich gar kein Problem mit dem LCD. Das Zeichen wird ja sofort an die richtige Position geschrieben. Man muss keinen geschlossenen Balken nachführen bzw. auffüllen und wieder abbauen.

Selbst mit Balken nachführen würde ich keine Probleme sehen. Wenn ich mit meinen Demos und Joystick spiele zuckt auch ein nachgeführter Balken wild auf und ab. Praktisch ohne Verzögerung. Das Problem wird eher umgekehrt sein. Beim wilden springen wird man diese eine Pixelbreite kaum sehen, sodass man bestimmt geneigt ist die Ausschläge zudämpfen.

Allerdings sind all meine Display mit SPI angebunden. Ich bezweifel jedoch erstmal das der Bus hier limitiert. Ich würde sagen, einfach probieren, Hardware ist vorhanden und Sketch auch. Es fehlt ja nur noch das Mapping 0...1023 auf 0...99 . Das wars.
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