Arduino - Bitmaps als "Zahl"

xcruell

Lt. Commander
Registriert
Dez. 2013
Beiträge
1.194
Guten Tag ihr lieben,
und zwar hatte ich vor ein kleines "StatTrak"-Display für einen Kollegen zu bauen, da er sich eine Softair gekauft hat.
Da will ich nach Möglichkeit auch die selbe Font nutzen, woraufhin ich mir 0-9 selbst gepixelt und diese mit LCDAssistant in ein byte array konvertiert habe.
Die Bitmaps selbst kriege ich manuell ohne Probleme auf mein 128x32 OLED Display angezeigt.
Jetzt frage ich mich nur wie ich einen counter erstelle, welcher statt der Zahlen die jeweilige Bitmap anzeigt.

Bspw. der Counter steht bei 1337, dann sollen auch die bitmaps für 1, 3, 3 und 7 angezeigt werden.
Ich habe leider noch fast nichts mit Displays gemacht und finde mit bestem Willen nichts hilfreiches.

Falls mir jemand direkt helfen könnte oder mir einen Doku-link geben kann, wäre das fantastisch!
Code:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "bmps.h"

#define LOGO_HEIGHT   34
#define LOGO_WIDTH    24
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  Wire.begin(0,2);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for(;;);
  }

  display.clearDisplay();
  bmptest();
}

void loop() {
}

void bmptest(void) {
  display.clearDisplay();
  display.drawBitmap(0, -1, one, LOGO_WIDTH, LOGO_HEIGHT, 1);
  display.drawBitmap(32, -1, three, LOGO_WIDTH, LOGO_HEIGHT, 1);
  display.drawBitmap(64, -1, three, LOGO_WIDTH, LOGO_HEIGHT, 1);
  display.drawBitmap(96, -1, seven, LOGO_WIDTH, LOGO_HEIGHT, 1);
  display.display();
  delay(1000);
}
Grüße!
 

Anhänge

  • WhatsApp Image 2019-03-16 at 16.49.42 (1).jpeg
    WhatsApp Image 2019-03-16 at 16.49.42 (1).jpeg
    55,9 KB · Aufrufe: 470
  • WhatsApp Image 2019-03-16 at 16.49.42.jpeg
    WhatsApp Image 2019-03-16 at 16.49.42.jpeg
    49,6 KB · Aufrufe: 467
  • WhatsApp Image 2019-03-16 at 16.53.08.jpeg
    WhatsApp Image 2019-03-16 at 16.53.08.jpeg
    41,7 KB · Aufrufe: 473
Basis 10?
Ich möchte eher wissen, wie ich die bitmaps statt der Zahlen nutzen kann.
Ich will also dass bei einem counter von 10 die bitmap one und zero angezeigt wird, statt der Zahl "10".
Ich brauche also quasi eine "Übersetzung" von Zahl zum jeweiligen Byte Array.

Grüße!
 
xcruell schrieb:
Ich habe leider noch fast nichts mit Displays gemacht und finde mit bestem Willen nichts hilfreiches.
Naja das ist jetzt eher weniger ein Problem mit dem Display an sich.

Finde die einzelnen Zahlenstellen heraus und hole dir aus einem Array das passende Bitmap.
Verschiebe sie passend auf dem Display (x-Koordinate)

C++:
// V hier noch den Datentyp der Bitmaps hinschreiben anstatt "int"
int digits[10] = {zero, one, two, three, four, five, six, seven, eight, nine};

void showDigit(int digitIndex, int position) {
  display.drawBitmap(32 * position, -1, digits[digitIndex], LOGO_WIDTH, LOGO_HEIGHT, 1);
}

https://stackoverflow.com/questions/4261589/how-do-i-split-an-int-into-its-digits
 
  • Gefällt mir
Reaktionen: xcruell
xcruell schrieb:
Du hast Ziffern zwischen 0 und 9 die du darstellen willst, oder? Nennst du das nicht Basis 10?

xcruell schrieb:
Ich brauche also quasi eine "Übersetzung" von Zahl zum jeweiligen Byte Array.
Du brauchst eine Übersetzung von Zahl in einzelne Ziffern und dann einen Lookup für das entsprechende Byte Array. @r15ch13 hat dir den Lookup netterweise schon komplett hingeschrieben und der Link von ihm und meiner oben zeigen dir die Übersetzung einer Zahl in seine Ziffern, in Basis 10.

Gruß
BlackMark
 
Vielen Dank an euch soweit.
Keine Ahnung wie ich den Link von Stack Overflow nicht finden konnte.
Ich schaue mir das ganze nachher Mal an!

@BlackMark
Ne, Basis 10 klingt zwar plausibel, hab ich aber noch nie gehört.

Grüße!
 
xcruell schrieb:
Ne, Basis 10 klingt zwar plausibel, hab ich aber noch nie gehört.
https://de.wikipedia.org/wiki/Dezimalsystem schrieb:
Ein Dezimalsystem (von mittellateinisch decimalis, zu lateinisch decem „zehn“), auch als Zehnersystem oder dekadisches System bezeichnet, ist ein Zahlensystem, das als Basis die Zahl 10 verwendet.
Das solltest du schon einmal gehört haben. Wenn nicht solltest du das dringend nachholen.

Gruß
BlackMark
 
Zurück
Oben