-         
Ergebnis 1 bis 4 von 4

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

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2015
    Beiträge
    28

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

    Anzeige

    Praxistest und DIY Projekte
    Hey Leute,

    in meinem aktuellen Projekt möchte ich ein BitmapArray (konvertiertes Image) von einer SD Karte (benutzt wird ein SD- Kartenmodul) lesen und mit einem Oled Display 128*64 Pixel über I2C anzeigen.

    Ich habe auf einer SD- Karte eine Textdatei eingefügt, in der sich der Inhalt von einem const uint8_t myImage[] Array befindet. Das Array entstand durch den Konverter LCDAssistant.exe .

    Code:
    const uint8_t image[] PROGMEM = 
    {
        0x00, 0x00, 0x7F,...... 
    }
    Jetzt zu meinem Problem, wie konvertiere ich die Textdatei in const uint8_t []?
    Beste Grüße.

    Hier mein Code:
    Code:
    #include <SPI.h>
    #include <SD.h>
    #include "U8glib.h"
    U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); //erzeugen des Display Objektes
    File myFile;
    const uint8_t myImage[] PROGMEM;
    void setup()
    {
       InitOLED();
       
     // Open serial communications and wait for port to open:
      Serial.begin(9600);
       while (!Serial) {
        ; // wait for serial port to connect. Needed for Leonardo only
      }
       pinMode(10, OUTPUT); CS pin
       
      if (!SD.begin(4)) {
        Serial.println(F("initialization failed!"));
        return;
      }  
       Serial.println(F("initialization done."));   
      // re-open the file for reading:
      myFile = SD.open("test.txt");
      if (myFile)
      {       
        // read from the file until there's nothing else in it:
        while (myFile.available()) 
        {
          Serial.write(myFile.read());
    
         //Clear Byte Array
          memset(myImagerArray, 0, sizeof(myImage));
          /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  WIE KONVERTIERE ich was ich auslesen zu einem Byte Array  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
          myImage = myFile.read();
         /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/     
         do //Draw Image Oled
         {
            u8g.drawBitmapP( 0, 0, 16, 64, myImage); //Die 16 kommt zu stande aus Width 128 dividiert durch 8
         } while(u8g.nextPage());
         delay(2000);          
        }   
        myFile.close();
      } else 
      {
        Serial.println(F("error opening test.txt."));   
      }
    }
    
    void loop()
    {
      // nothing happens after setup
    }
    
    
    void InitOLED()
    {
      //pinMode(9, OUTPUT);    // sets the digital pin 13 as output
      clearOLED();
      // assign default color value
      if ( u8g.getMode() == U8G_MODE_R3G3B2 )
      {
        u8g.setColorIndex(255);     // white
      }
      else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
      {
        u8g.setColorIndex(3);         // max intensity
      }
      else if ( u8g.getMode() == U8G_MODE_BW )
      {
        u8g.setColorIndex(1);         // pixel on
      }
      else if ( u8g.getMode() == U8G_MODE_HICOLOR )
      {
        u8g.setHiColorByRGB(255,255,255);
      }
    }
    
    void clearOLED()
    {
      u8g.firstPage();
      do
      {
      }
      while(u8g.nextPage());
    }
    Textdatei test.txt :
    Code:
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
    0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
    0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
    0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
    0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
    0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xF0,
    0x00, 0x00, 0x00, 0x00, 0xF0, 0x1E, 0x0E, 0x0F, 0x00, 0xE1, 0x0E, 0x0C, 0x38, 0x0F, 0xFF, 0xE0,
    0x00, 0x00, 0x00, 0x00, 0x70, 0x1E, 0x04, 0x0E, 0x00, 0xE1, 0x0E, 0x0C, 0x30, 0x07, 0xFF, 0xE0,
    0x00, 0x00, 0x03, 0x18, 0x70, 0x1E, 0x04, 0x0E, 0x10, 0xE1, 0x0E, 0x04, 0x30, 0x87, 0xFF, 0x80,
    0x00, 0x00, 0x0F, 0x08, 0x70, 0x1E, 0x04, 0x0E, 0x18, 0xE1, 0x0E, 0x04, 0x30, 0xC7, 0xFF, 0x80,
    0x00, 0x00, 0x3F, 0x03, 0xE1, 0x1E, 0x04, 0x0E, 0x07, 0xE1, 0x0E, 0x04, 0x30, 0xFF, 0xFE, 0x00,
    0x00, 0x00, 0xFF, 0x01, 0xE1, 0x0E, 0x24, 0x0F, 0x03, 0xE1, 0x0E, 0x04, 0x30, 0x07, 0xFC, 0x00,
    0x00, 0x01, 0xFF, 0xC0, 0xE1, 0x0E, 0x20, 0x0F, 0x80, 0xE1, 0x0E, 0x20, 0x30, 0x07, 0xF0, 0x00,
    0x00, 0x07, 0xFF, 0xF0, 0x61, 0x0C, 0x20, 0x8F, 0xE0, 0xE1, 0x0E, 0x20, 0x30, 0xC7, 0xE0, 0x00,
    0x00, 0x0F, 0xFF, 0x18, 0x61, 0x0C, 0x20, 0x8E, 0x10, 0xE1, 0x0E, 0x20, 0x30, 0xC7, 0x80, 0x00,
    0x00, 0x1F, 0xFF, 0x18, 0x41, 0x0C, 0x20, 0x8E, 0x18, 0xE1, 0x0E, 0x20, 0x30, 0x86, 0x00, 0x00,
    0x00, 0x3F, 0xFF, 0x00, 0x43, 0x8C, 0x20, 0x86, 0x00, 0xE0, 0x0E, 0x30, 0x30, 0x00, 0x00, 0x00,
    0x00, 0x7F, 0xFF, 0x00, 0xC3, 0x84, 0x30, 0x87, 0x00, 0xF0, 0x1E, 0x30, 0x38, 0x00, 0x00, 0x00,
    0x00, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xF8, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
    0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
    0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00,
    0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    09.10.2014
    Beiträge
    5.255
    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.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2015
    Beiträge
    28
    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.

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    09.10.2014
    Beiträge
    5.255
    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)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Ä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/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
  •