- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Read a ByteArray from SD Card Txt.File and Draw Bitmap with Ug8

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    verstehe ich jetzt nicht ganz -
    willst du etwa Daten von SD in dein const uint8_t image[] PROGMEM einlesen?
    oder was hat das eine mit dem anderen zu tun?
    const ist const, also schreibgeschützt.

    Oder willst du nur gelesene Daten zu uint8_t casten?
    das geht per explizitem type casting, z.B.
    (uint8_t)myFile.read()

    - - - Aktualisiert - - -

    PS,
    außerdem ist das Arduino C++ Code, gehört also besser ins Arduino Unterforum.

  2. #2
    Hi,
    ups ja natürlich darf da nicht const stehen.
    Ich will gelesene Daten zu einem uint8[] casten.

    Die Funktion braucht ein Byte Array in der Eingabe(myImage) => Hier zu sehen:u8g.drawBitmapP( 0, 0, 16, 64, myImage);

    siehe: void U8GLIB::drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)

    Das Problem ist ja , ich habe eine Textdatei auf der SD-Karte, die muss das Byte Array des Bildes enthalten. Dieses Byte Array muss irgendwie in die Funktion drawBitmapP.

    Die Frage ist ja wie kann man das direkt Casten?

    Normlerweise wird das ByteArray direkt im Sketch abgelegt und bei drawBitmap verwendet.(siehe folgenden Sketch)
    U8GLIB_PCD8544 u8g(13, 11, 10, 9, ; // SPI communication: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8

    const uint8_t rook_bitmap[] U8G_PROGMEM = {
    0x00, // 00000000
    0x55, // 01010101
    0x7f, // 01111111
    0x3e, // 00111110
    0x3e, // 00111110
    0x3e, // 00111110
    0x3e, // 00111110
    0x7f // 01111111
    };

    void draw(void) {
    // graphic commands to redraw the complete screen should be placed here
    u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
    }

    void setup(void) {
    }

    void loop(void) {
    // picture loop
    u8g.firstPage();
    do {
    draw();
    } while( u8g.nextPage() );

    // rebuild the picture after some delay
    delay(1000);
    }
    Oder muss ich die ganze Textdatei auslesen und jeden Wert mit der Trennung Komma nacheinander auslesen,casten in uint8_t und einem ByteArray hinzufügen?

    Ich weiß nicht genau wie ich das mache soll ... Oder gibt es eine bessere Lösung?

    Ich habe nämlich 34 Bilder, die ich später nacheinander auf dem Oled abspielen möchte. Da ich aber einen Arduino nano (32 kb memory) verwende und mein Sketch nicht klein ist , habe ich nur noch 7 kb frei. Deswegen kam mir die Idee , alle Bilder auf eine SD Karte zu speichern und diese dann nacheinander einzulesen.

  3. #3
    HaWe
    Gast
    da muss jetzt jemand 'ran, der weiß, was
    myFile.read()
    tatsächlich als gelesene Variable zurückgibt, ein char, ein int oder einen String.
    wenn es einzelne char oder int in dieser Form liest, kannst du es in der genannten Form casten, wenn es ein String wäre, musst du ihn erst in eine Zahl umwandeln.
    Arduino benutzt sonst auch eher "byte" statt "uint8_t".
    Aber weil ich auch die Grafik-lib nicht kenne, gebe ich hier an andere ab.

    - - - Aktualisiert - - -

    PS,
    evt kannst einen byte array als buffer definieren (ohne const)
    byte (oder uint8_t) bitmapbuffer [128*64]; // bzw. kleiner, so groß wie halt mindestens nötig
    und dann liest du erst dorthin byte-weise alle file Daten ein,
    und anschließend liest du das Bild von dort genau wie sonst aus dem progmem.
    Geändert von HaWe (15.09.2020 um 11:50 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von Lord Integer Beitrag anzeigen

    Oder muss ich die ganze Textdatei auslesen und jeden Wert mit der Trennung Komma nacheinander auslesen,casten in uint8_t und einem ByteArray hinzufügen?

    Ich weiß nicht genau wie ich das mache soll ... Oder gibt es eine bessere Lösung?

    Ich habe nämlich 34 Bilder, die ich später nacheinander auf dem Oled abspielen möchte. Da ich aber einen Arduino nano (32 kb memory) verwende und mein Sketch nicht klein ist , habe ich nur noch 7 kb frei. Deswegen kam mir die Idee , alle Bilder auf eine SD Karte zu speichern und diese dann nacheinander einzulesen.
    Das TEST.TXT ist ein Problem.
    Wenn Du Bilder speichern willst, die abgespielt werden sollen, speichere die nicht so in dieser Form! - Warum? - Weil Du die Daten, während des Ladens von der SD-Karte, übersetzen/umwandeln musst. Vielleicht gibt es Bibliotheken für so was, langsam ist es trotzdem. Zeit, die unnötig verbraten wird.
    Das bedeutet, dass Du die Textdatei einliest, die Daten umwandelst und am Ende in die Datei zurückschreibst (z.B.).
    Das kannst Du ja beim ersten mal Auslesen machen. Dort stellst Du fest, dass die Daten in Textform vorliegen und wandelst die Datei zunächst um.
    Beim nächsten Einlesen sind die Daten im richtigen Format, nämlich als Bytes, gespeichert. Jedes physische Byte wird in der Textdatei durch 6 Bytes abgebildet (inkl. Komma und Leerzeichen). Dafür musst Du 6x so viele Daten lesen, wie notwendig. Du könntest in derselben Zeit vermutlich etwa 6 Bilder laden, anstatt einem.

    Wenn Du ein Filesystem hast, dann sollte .read() ein Byte liefern. Du könntest die Datei einfach in einer Schleife Byte um Byte auslesen und in einem Array ablegen.
    Beim Umwandeln kannst Du auch Byte um Byte auslesen, in ein Char-Array vermutlich. Dann liest Du so lange, bis Du auf ein Komma triffst, dieses ignorierst Du dann, ebenso, wie das Leerzeichen.
    Nachdem Du das Lesen beim Komma unterbrochen hast, hast Du in dem Array z.B. stehen: "0x00", als Text. Der muss dann noch konvertiert werden (klick mich!).
    Geändert von Moppi (12.10.2020 um 10:11 Uhr)

Ähnliche Themen

  1. MiDi Sysex File aus Intel .hex File generieren
    Von wkrug im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 02.04.2018, 21:27
  2. Antworten: 1
    Letzter Beitrag: 07.02.2013, 19:11
  3. dependency file dep/***.o.d: No such file or directory
    Von SvLG im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 1
    Letzter Beitrag: 19.04.2010, 23:31
  4. MATLAB Simulink-Stateflow: dll File aus mdl File erstellen
    Von danionbike im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 11.01.2008, 17:24
  5. Frage zu Corel Draw
    Von Cobold im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 3
    Letzter Beitrag: 15.02.2005, 14:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen