- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

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

  1. #1

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

    Anzeige

    E-Bike
    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
    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.

  3. #3
    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
    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 12:50 Uhr)

  5. #5
    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 11: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, 22:27
  2. Antworten: 1
    Letzter Beitrag: 07.02.2013, 20: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: 20.04.2010, 00: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, 18: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, 15:47

Berechtigungen

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

Labornetzteil AliExpress