main_backup.cpp

 avatar
unknown
plain_text
a month ago
2.6 kB
2
Indexable
#include <Arduino.h>
#include "epd_driver.h"
#include "firasans.h"  
#include "../include/lightning.h"  
#include "../include/rock.h"  
#include "../include/scissors.h"  
#include "../include/paper.h"  

uint8_t *framebuffer;
int32_t cursor_x = 270;
int32_t cursor_y = 300; 

const uint8_t* getImageData(const char* gesture, int &width, int &height) {
    if (strcmp(gesture, "none") == 0) {
        width = lightning_width;
        height = lightning_height;
        return lightning_data;
    }
    else if (strcmp(gesture, "rock") == 0) {
        width = rock_width;
        height = rock_height;
        return rock_data;
    } else if (strcmp(gesture, "paper") == 0) {
        width = paper_width;
        height = paper_height;
        return paper_data;
    } else if (strcmp(gesture, "scissors") == 0) {
        width = scissors_width;
        height = scissors_height;
        return scissors_data;
    }
    return nullptr;
}

void displayText(const char* text) {
    Serial.printf("Zeige Text: %s\n", text);
    
    memset(framebuffer, 0xFF, EPD_WIDTH * EPD_HEIGHT / 2);

    // **Schrift rendern**
    cursor_x = 270;
    cursor_y = 300;
    write_string((GFXfont *)&FiraSans, (char *)text, &cursor_x, &cursor_y, framebuffer);

    epd_poweron();
    epd_clear();
    epd_draw_grayscale_image(epd_full_screen(), framebuffer);
    epd_poweroff();
}

void updateDisplay(const char* gesture) {
    int width, height;
    const uint8_t* imageData = getImageData(gesture, width, height);

    if (imageData) {
        Rect_t area = {
            .x = (EPD_WIDTH - width) / 2,
            .y = (EPD_HEIGHT - height) / 2,  
            .width = width,
            .height = height
        };

        Serial.printf("Zeige Bild für Geste: %s\n", gesture);
        epd_poweron();
        epd_clear();
        epd_draw_grayscale_image(area, (uint8_t *)imageData);
        epd_poweroff();
    } else {
        Serial.println("Unbekannte Geste empfangen.");
    }
}

void setup() {
    Serial.begin(115200);
    epd_init();

    framebuffer = (uint8_t *)heap_caps_malloc(EPD_WIDTH * EPD_HEIGHT / 2, MALLOC_CAP_SPIRAM);
    if (!framebuffer) {
        Serial.println("Speicher konnte nicht allokiert werden!");
        while (1);
    }

    memset(framebuffer, 0xFF, EPD_WIDTH * EPD_HEIGHT / 2);
    Serial.println("System bereit. Warte auf Gesten...");

    displayText("Gestenerkennung startet");
}

void loop() {
    if (Serial.available() > 0) {
        String gesture = Serial.readStringUntil('\n');
        gesture.trim();
        updateDisplay(gesture.c_str());
    }
}
Editor is loading...
Leave a Comment