Arduino: resuelva el problema cuando la biblioteca oficial M5Stack muestre un patrón personalizado

Compré una placa de desarrollo M5Stack y me pareció interesante. En esencia, sigue siendo una placa de desarrollo ESP32, pero se ha empaquetado en una pequeña caja cuadrada de unos cinco o seis centímetros cuadrados, con su propia batería recargable, pantalla, altavoces pequeños, botones, etc., que es muy hermosa y práctica. El precio no es bajo, pero después de todo, ha resuelto algunos puntos débiles, por lo que este problema es diferente.

Después de instalar la biblioteca oficial M5, el TFT_Flash_Bitmap incorporado se probó y pasó con éxito. Sin embargo, sobre esta base, planeo probar más M5.Lcd.drawBitmap, que muestra que hay un problema al usar mi propio patrón: la pantalla "pantalla de flores". Pero esta pantalla de flores aún puede ver vagamente el patrón que debería tener, pero el sistema de color está completamente desordenado.

El patrón personalizado se realiza utilizando ImageConvert565, que se ha utilizado sin problemas, por lo que se puede excluir el factor de la herramienta de generación de bytes. La especulación es un factor en el controlador de pantalla.

Abra la ubicación predeterminada (Mis documentos \ Arduino \ bibliotecas \ M5Stack \ src) y vea M5Display.h y M5Display.cpp. Después de un análisis aproximado, descubrí que también se basa en la biblioteca TFT_eSPI, que es fácil de manejar. Después de algunas pruebas, se descubrió que el problema era setSwapBytes (verdadero); Cambiar falso a todo es normal.

Miedo a cambiar directamente las funciones existentes, así que abra M5Display.cpp, copie y pegue la función drawBitmap y agregue su propia sobrecarga, agregue un nuevo parámetro bool, de modo que el verdadero verdadero esté controlado por este parámetro. Por supuesto, estos nombres de funciones recién creados también deben publicarse en M5Display.h. El código de referencia es el siguiente:

cpp里:
///////////////////////////
void M5Display::drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data,bool swapBytes) {
  setSwapBytes(swapBytes);
  pushImage((int32_t)x0, (int32_t)y0, (uint32_t)w, (uint32_t)h, data);
}

void M5Display::drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint16_t *data,bool swapBytes) {
  setSwapBytes(swapBytes);
  pushImage((int32_t)x0, (int32_t)y0, (uint32_t)w, (uint32_t)h, data);
}

void M5Display::drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data, uint16_t transparent,bool swapBytes) {
  setSwapBytes(swapBytes);
  pushImage((int32_t)x0, (int32_t)y0, (uint32_t)w, (uint32_t)h, data, transparent);
}

void M5Display::drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint8_t *data,bool swapBytes) {
  setSwapBytes(swapBytes);
  pushImage((int32_t)x0, (int32_t)y0, (uint32_t)w, (uint32_t)h, (const uint16_t*)data);
}

void M5Display::drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint8_t *data,bool swapBytes) {
  setSwapBytes(swapBytes);
  pushImage((int32_t)x0, (int32_t)y0, (uint32_t)w, (uint32_t)h, (uint16_t*)data);
}
//////////////////////////



头文件里:
void drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data ,bool swapBytes);
void drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint8_t *data ,bool swapBytes);
void drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint16_t *data ,bool swapBytes);
void drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint8_t *data ,bool swapBytes);
void drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data, uint16_t transparent ,bool swapBytes);

En el código oficial, el drawIcon en el ejemplo se puede ignorar por completo, solo llame al drawImage nativo. Se omite Info.h, consulte el ejemplo, simplemente pegue el código según las necesidades reales.

#include <M5Stack.h>
#include "Info.h"

void setup()
{
  M5.begin();
  M5.Lcd.setBrightness(128);  //设置背光亮度
  M5.Lcd.fillScreen(TFT_BLACK);
  

  // Draw the icons
  // drawIcon不必用了
  //drawIcon(info, 0, 0, infoWidth, infoHeight);
  M5.Lcd.drawBitmap(0,0,infoWidth,infoHeight,info,false);

}

void loop()
{


}

Bueno, este es el pequeño juguete de ardilla favorito de mi hija.

==== Nueva pregunta ====

Hay otra. Esta vez, la pantalla ya no se usa, pero el color que se muestra está invertido (negativo). No puedo pensar en su hermana. No importa, cuando haces una foto, primero la inviertes, y cuando tienes tiempo, estudia lentamente.

 

122 artículos originales publicados · Me gusta 61 · Visitas 530,000+

Supongo que te gusta

Origin blog.csdn.net/ki1381/article/details/88804713
Recomendado
Clasificación