Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C/C++ für Mikrocontroller (ESP32) - OLED 128x64 Bricklet 2.0

Featured Replies

Geschrieben

Hi, hätte mir einer einen kleinen Beispielcode für 

int tf_oled_128x64_v2_write_pixels(TF_OLED128x64V2 *oled_128x64_v2, uint8_t x_start, uint8_t y_start, uint8_t x_end, uint8_t y_end, const bool *pixels, uint16_t pixels_length)

Text schreiben funktioniert.

Ich komme nur nicht mit dieser Funktion nicht klar.

Danke

 

                // Draw checkerboard pattern
                int row, column;
                bool pixels[HEIGHT * WIDTH];

                for (row = 0; row < HEIGHT; row++) {
                    for (column = 0; column < WIDTH; column++) {
                        pixels[row * WIDTH + column] = (row / 8) % 2 == (column / 8) % 2;
                    }
                }

                tf_oled_128x64_v2_write_pixels(&oled, 0, 0, WIDTH-1, HEIGHT-1, pixels, HEIGHT*WIDTH);
            //---------------------------------------------------------  

 

Mit dem Beispiel schmiert der ESP ab.

bearbeitet von Trexis5

Geschrieben

Die Funktion hat den Fallstrick, dass die Endwerte jeweils auch Pixelkoordinaten sind. Das heißt, dass wenn du 16*16 Pixel zeichnen möchtest, die Endwerte jeweils der Startwert plus 16 Pixel sind, weil der Startpixel mitzählt.

#include "Arduino.h"

#include "bindings/config.h"
#include "hal_arduino_esp32_brick/hal_arduino_esp32_brick.h"
#include "bindings/errors.h"
#include "bindings/bricklet_oled_128x64_v2.h"

// Used to report any error encountered while running the example.
extern "C" void check(int e_code, const char *c) {
    if (e_code == TF_E_OK) {
        return;
    }

#if TF_IMPLEMENT_STRERROR != 0
    tf_hal_printf("Failed to %s: %s (error code %d)\n", c, tf_hal_strerror(e_code), e_code);
#else
    tf_hal_printf("Failed to %s: %d\n", c, e_code);
#endif
}

TF_HAL hal;

static TF_OLED128x64V2 oled;

bool pixels[16*16] = {
    true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, 
    false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true,
    true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false, true,
    true,  false, true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  false, false, true,
    true,  false, true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  false, false, true,
    true,  false, false, false, false, true,  true,  false, false, false, false, false, false, false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  false, false, false, false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  false, false, false, false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  true,  true,  true,  false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  true,  true,  true,  false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  false, false, false, false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  false, false, false, false, false, true,
    true,  false, false, false, false, true,  true,  false, true,  true,  false, false, false, false, false, true,
    true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false, true,
    true,  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
    true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true
};

void setup() {
    Serial.begin(115200);
    delay(3000);
    Serial.println("Hello World!");

    check(tf_hal_create(&hal), "hal create");

    // Create device object
    check(tf_oled_128x64_v2_create(&oled, NULL, &hal), "create device object");

    // Clear display
    check(tf_oled_128x64_v2_clear_display(&oled), "call clear_display");

    // Write "Hello World" starting from upper left corner of the screen
    check(tf_oled_128x64_v2_write_line(&oled, 0, 0, "Hello World"), "call write_line");
    // Draw logo to center of screen
    check(tf_oled_128x64_v2_write_pixels(&oled, 56, 24, 56 + 15, 24 + 15, pixels, 16*16), "call write_pixels");
}

void loop() {
    // Poll for callbacks
    tf_hal_callback_tick(&hal, 0);
}

 

Geschrieben
  • Autor

Ah, jetzt verstanden. Funktioniert. Somit muss ich die Fonts nur auslesen und die werte berechnen.

Geschrieben

Sorry den Edit hatte ich nicht gesehen. Der ESP crasht in deiner Variante, weil du pixels in der Funktion anlegst. Dann landet das Array auf dem Stack und der ist je nach den Werten von WIDTH und HEIGHT zu klein. Wenn du z.B. das ganze Display füllen willst, also WIDTH 64 und HEIGHT 128, braucht das Array 64 * 128 = 8 kB Speicherplatz. Der Stack ist aber wenn ich mich richtig erinnere nur 6 kB groß.

Wenn du die Deklaration von pixels aus der Funktion rausziehst, funktioniert es.

Geschrieben

Hast du die Folie absichtlich auf dem Plexiglas gelassen? 😉

Edit: Ach, doch nicht. Sehe gerade auf den Fotos im anderen Thread, dass du sie inzwischen anscheinend doch entfernt hast.

bearbeitet von MatzeTF

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.