Error raro en el ide con drawbitmap

buenos dias y perdon por volver a molestar :frowning: ( no no es una costumbre)

me puse a trastear con el arduino otra vez y aprovechando el codigo para dibujar la linea verde

(si, la consegui hacer yo solito :stuck_out_tongue: ), puse mas codigo pero me da error de compilacion xxxx no declared on this scope. pase los .bmp a .c y los inclui en el codigo pero no los reproduce y dice que no estan declarados, busque informacion pero no encuentro nada que me aclare ese error. me podeis decir que pasos seguir ? para corregirlo o en que falle, mil gracias

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\qc.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\1c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\2c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\3c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\4c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\5c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\6c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\7c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\8c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\9c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\10c.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\dorso.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\jc.bmp c:\Users\casa\Documents\Arduino\tft128x128_9_12_2025\kc.bmp

// Pin definitions for Arduino Uno (adjust as needed)
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9

// For 1.44" 128x128 ST7735 displays, use ST7735_128x128
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define ST7735_BLACK   ST77XX_BLACK
#define ST7735_WHITE   ST77XX_WHITE
#define ST7735_RED     ST77XX_RED
#define ST7735_GREEN   ST77XX_GREEN
#define ST7735_BLUE    ST77XX_BLUE
#define ST7735_CYAN    ST77XX_CYAN
#define ST7735_MAGENTA ST77XX_MAGENTA
#define ST7735_YELLOW  ST77XX_YELLOW
#define ST7735_ORANGE  ST77XX_ORANGE



void setup() {
  Serial.begin(9600);
  tft.initR(INITR_REDTAB); // Or INITR_BLACKTAB, depending on your display
  tft.setRotation(0); // Adjust rotation as needed
  tft.fillScreen(ST7735_BLACK);

// '1c', 12x14px
const unsigned char carta1c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '2c', 12x14px
const unsigned char carta2c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '3c', 12x14px
const unsigned char carta3c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '4c', 12x14px
const unsigned char carta4c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '5c', 12x14px
const unsigned char carta5c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '6c', 12x14px
const unsigned char carta6c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '7c', 12x14px
const unsigned char carta7c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '8c', 12x14px
const unsigned char carta8c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// 'dorso', 12x14px
const unsigned char cartadorso [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 
	0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0x80, 0x10, 0x7f, 0xe0
};
// 'jc', 12x14px
const unsigned char cartajc [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0xb0, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '10c', 12x14px
const unsigned char carta10c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xae, 0x10, 0xaa, 0x10, 0xaa, 0x10, 0xae, 0x10, 0x80, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// 'kc', 12x14px
const unsigned char cartakc [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb0, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// '9c', 12x14px
const unsigned char carta9c [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
// 'qc', 12x14px
const unsigned char cartaqc [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x90, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};

// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 672)
const int cartaallArray_LEN = 14;
const unsigned char* cartaallArray[14] = {
	carta10c,
	carta1c,
	carta2c,
	carta3c,
	carta4c,
	carta5c,
	carta6c,
	carta7c,
	carta8c,
	carta9c,
	cartadorso,
	cartajc,
	cartakc,
	cartaqc
};
  
}

void loop() {
  
  tft.fillRect(0, 64, 128, 2, ST7735_GREEN);  //5 parameters
  tft.drawBitmap(10, 10, cartadorso, 12, 14, TFT_BLACK);  
}

Esto no es C++. Después de una directiva #include, el compilador solo espera un nombre de archivo de cabecera válido.

Incluso eliminando esas rutas, el código sigue sin compilar porque todas las definiciones const unsigned char … PROGMEM están colocadas dentro de la función setup.
Estos símbolos tienen entonces un alcance local y no son visibles en loop, lo que provoca errores del tipo not declared in this scope para cartadorso y los demás bitmaps.
También hay una incoherencia en la constante de color en drawBitmap, ya que TFT_BLACK no está definido mientras que sí se ha definido ST7735_BLACK.
Por ello, el compilador señala un identificador desconocido.

Por último, independientemente de la compilación, drawBitmap espera un bitmap monocromo en el formato de Adafruit GFX, que debe corresponder exactamente al tamaño y al formato de los datos proporcionados, de lo contrario la visualización será incorrecta incluso después de corregir los errores de compilación.

1 Like

mil gracias JML , el formato bmp esta en c, monocromo 12*14 pixel el tft_black ya esta corregido pero sigue igual :frowning: no se que habre puesto mal

Has copiado y pegado la línea de color incorrectamente. Uso ST7735_BLACK (y coloca tus imágenes fuera de setup() y loop() )

¿Funciona esto? (no probado, escrito aquí)

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

const unsigned char carta1c[] PROGMEM = {
  0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10,
  0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};

const unsigned char cartadorso[] PROGMEM = {
  0x7f, 0xe0, 0x80, 0x10, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50,
  0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0x80, 0x10, 0x7f, 0xe0
};

const unsigned char* cartaArray[] = {
  carta1c,
  cartadorso
};

void setup() {
  Serial.begin(9600);
  tft.initR(INITR_REDTAB);
  tft.setRotation(0);
  tft.fillScreen(ST7735_BLACK);
}

void loop() {
  tft.fillRect(0, 64, 128, 2, ST7735_GREEN);
  tft.drawBitmap(10, 10, cartadorso, 12, 14, ST7735_WHITE);
}

al final solucione :

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

// Pin definitions for Arduino Uno (adjust as needed)
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9

// For 1.44" 128x128 ST7735 displays, use ST7735_128x128
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define ST7735_BLACK   ST77XX_BLACK
#define ST7735_WHITE   ST77XX_WHITE
#define ST7735_RED     ST77XX_RED
#define ST7735_GREEN   ST77XX_GREEN
#define ST7735_BLUE    ST77XX_BLUE
#define ST7735_CYAN    ST77XX_CYAN
#define ST7735_MAGENTA ST77XX_MAGENTA
#define ST7735_YELLOW  ST77XX_YELLOW
#define ST7735_ORANGE  ST77XX_ORANGE

// cartas (corazones)
 const unsigned char C [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 
	0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C2 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C3 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C4 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C5 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C6 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C7 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};






void setup() {
  Serial.begin(9600);
  tft.initR(INITR_REDTAB); // Or INITR_BLACKTAB, depending on your display
  tft.setRotation(0); // Adjust rotation as needed
  tft.fillScreen(ST7735_BLACK);  
}

void loop() {
  
  //tft.fillRect(0, 64, 128, 2, ST7735_GREEN);  //5 parameters // 6 parametros x, y, nombre imagen,tamaño x, tamaño y, color fondo 
  tft.drawBitmap(2, 2, C, 12, 14, ST7735_WHITE);tft.drawBitmap(16, 2, C2, 12, 14, ST7735_WHITE);
  tft.drawBitmap(30, 2, C3, 12, 14, ST7735_WHITE);tft.drawBitmap(44, 2, C4, 12, 14, ST7735_WHITE); 
  tft.drawBitmap(58, 2, C5, 12, 14, ST7735_WHITE);tft.drawBitmap(72, 2, C6, 12, 14, ST7735_WHITE);
  tft.drawBitmap(84, 2, C7, 12, 14, ST7735_WHITE);
  

el problema estaba en el const unsigned char, algo raro por el formato de imagen, use mejor el imagen2cpp y arreando :smiley: mil gracias a los dos, ahora me falta averiguar como ponerlas aleatorias :thinking:

encontre otro ejemplo lo analice y mas o menos lo coji pero mas o menos :frowning:

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

// Pin definitions for Arduino Uno (adjust as needed)
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9

// For 1.44" 128x128 ST7735 displays, use ST7735_128x128
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define ST7735_BLACK   ST77XX_BLACK
#define ST7735_WHITE   ST77XX_WHITE
#define ST7735_RED     ST77XX_RED
#define ST7735_GREEN   ST77XX_GREEN
#define ST7735_BLUE    ST77XX_BLUE
#define ST7735_CYAN    ST77XX_CYAN
#define ST7735_MAGENTA ST77XX_MAGENTA
#define ST7735_YELLOW  ST77XX_YELLOW
#define ST7735_ORANGE  ST77XX_ORANGE

// cartas (corazones)
 const unsigned char C [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 
	0xaa, 0x90, 0x95, 0x50, 0xaa, 0x90, 0x95, 0x50, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C2 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C3 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C4 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C5 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C6 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0x88, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C7 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa0, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
 const unsigned char C8 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C9 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C10 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C11 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xae, 0x10, 0xaa, 0x10, 0xaa, 0x10, 0xae, 0x10, 0x80, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C12 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0x88, 0x10, 0x88, 0x10, 0x88, 0x10, 0xb0, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C13 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xb8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb8, 0x10, 0x90, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};
const unsigned char C14 [] PROGMEM = {
	0x7f, 0xe0, 0x80, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0xb0, 0x10, 0xa8, 0x10, 0xa8, 0x10, 0x80, 0x10, 
	0x86, 0xd0, 0x87, 0xd0, 0x83, 0x90, 0x81, 0x10, 0x80, 0x10, 0x7f, 0xe0
};





void setup() {

  Serial.begin(9600);

  tft.initR(INITR_REDTAB); // Or INITR_BLACKTAB, depending on your display

  tft.setRotation(0); // Adjust rotation as needed

  tft.fillScreen(ST7735_BLACK);  

  const uint8_t* cartas[] = { C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14 };

  const int totalcartas = 13;

  int indice = random(0, totalcartas);   

  tft.drawBitmap(50, 52, cartas[indice], 12, 14, ST7735_WHITE);// Dibujar imagen (x, y, puntero, ancho, alto, color) 

  randomSeed(analogRead(0)); // Inicializa la semilla aleatoria

  delay(2000); 
 
 }


void loop() {
  
  //tft.fillRect(0, 64, 128, 2, ST7735_GREEN);  //5 parameters x, y, largo, ancho, color  //tft.drawBitmap(2, 2, C, 12, 14, ST7735_WHITE); // 6 parametros x, y, nombre imagen,tamaño x, tamaño y, color fondo 
  /* tft.drawBitmap(2, 2, C, 12, 14, ST7735_WHITE);
  tft.drawBitmap(16, 2, C2, 12, 14, ST7735_WHITE);  tft.drawBitmap(30, 2, C3, 12, 14, ST7735_WHITE);
  tft.drawBitmap(44, 2, C4, 12, 14, ST7735_WHITE);   tft.drawBitmap(58, 2, C5, 12, 14, ST7735_WHITE);
  tft.drawBitmap(72, 2, C6, 12, 14, ST7735_WHITE);  tft.drawBitmap(84, 2, C7, 12, 14, ST7735_WHITE);
  tft.drawBitmap(98, 2, C8, 12, 14, ST7735_WHITE);  tft.drawBitmap(2, 18, C9, 12, 14, ST7735_WHITE);
  tft.drawBitmap(16, 18, C10, 12, 14, ST7735_WHITE);  tft.drawBitmap(30, 18, C11, 12, 14, ST7735_WHITE);
  tft.drawBitmap(44, 18, C12, 12, 14, ST7735_WHITE);  tft.drawBitmap(58, 18, C13, 12, 14, ST7735_WHITE); 
  tft.drawBitmap(72, 18, C14, 12, 14, ST7735_WHITE); */
 
}

pero no lo hace aleatorio, saca una y listos

Poné la sentencia randomSeed() antes de usar random(), así como está (o sea después) no sirve de nada.

Explico:

Como en un micro no hay forma de generar un número realmente aleatorio se usan algoritmos (que generalmente se aprovechan de algún/os timers) que generan números "que parecen" ser aleatorios (se les llama pseudo aleatorios).
Como ejemplo (en pseudo código y extremadamente simplificado) imaginá que la función random() es algo como

random(limite) {
  return ((millis() * semilla) % limite);
}

Toma el valor de millis(), lo multiplica por el valor de una variable semilla y calcula el módulo límite de esa multiplicación.
Como las instrucciones anteriores a la llamada a random() tardan siempre lo mismo en ejecutarse, millis() arroja siempre el mismo valor, y como semilla tiene un valor por defecto, el algoritmo devuelve siempre el mismo resultado (y en tu caso hace que siempre muestre la misma imagen).
randomSeed() cambia el valor por defecto de semilla, algo así como

randomSeed(nuevoValorSemilla) {
  semilla = nuevoValorSemilla;
}

Pero si nuevoValorSemilla es siempre igual, se repite el mismo problema, entonces se usa el valor devuelto por una entrada analógica sin conectar a nada y leyendo "ruido" (que es lo más "aleatorio" que hay a mano), lo que da 1024 valores posibles para semilla en cada arranque.
Entonces aunque millis() siempre tenga el mismo valor, semilla se encarga de que cada posterior llamada a random() devuelva un valor que tenga muchas probabilidades de ser diferente a la corrida anterior del código (y a la siguiente).

Recordá que es un ejemplo muy, muy simplificado de ambas funciones, solo para que se entienda.

1 Like

si mas o menos lo coji , seria algo como esto ?? : (lo cambie a dados son menos imagenes)

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

// Pin definitions for Arduino Uno (adjust as needed)
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9
#define BUTTON_PIN 2 // pulsador a negativo y el otro terminal al conector 2

// For 1.44" 128x128 ST7735 displays, use ST7735_128x128
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define ST7735_BLACK   ST77XX_BLACK
#define ST7735_WHITE   ST77XX_WHITE
#define ST7735_RED     ST77XX_RED
#define ST7735_GREEN   ST77XX_GREEN
#define ST7735_BLUE    ST77XX_BLUE
#define ST7735_CYAN    ST77XX_CYAN
#define ST7735_MAGENTA ST77XX_MAGENTA
#define ST7735_YELLOW  ST77XX_YELLOW
#define ST7735_ORANGE  ST77XX_ORANGE


// 'd1', 16x16px
const unsigned char d1 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x5f, 0xfa, 0x5f, 0xfa, 0x5f, 0xfa, 0x5e, 0x7a, 
	0x5e, 0x7a, 0x5f, 0xfa, 0x5f, 0xfa, 0x5f, 0xfa, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};
// 'd2', 16x16px
const unsigned char d2 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x53, 0xfa, 0x53, 0xfa, 0x5f, 0xfa, 0x5f, 0xfa, 
	0x5f, 0xfa, 0x5f, 0xfa, 0x5f, 0xca, 0x5f, 0xca, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};
// 'd3', 16x16px
const unsigned char d3 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x53, 0xfa, 0x53, 0xfa, 0x5f, 0xfa, 0x5e, 0x7a, 
	0x5e, 0x7a, 0x5f, 0xfa, 0x5f, 0xca, 0x5f, 0xca, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};
// 'd5', 16x16px
const unsigned char d4 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x5e, 0x7a, 
	0x5e, 0x7a, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};
// 'd4', 16x16px
const unsigned char d5 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x5f, 0xfa, 
	0x5f, 0xfa, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};
// 'd6', 16x16px
const unsigned char d6 [] PROGMEM = {
	0x00, 0x00, 0x3f, 0xfc, 0x60, 0x06, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x53, 0xca, 
	0x53, 0xca, 0x5f, 0xfa, 0x53, 0xca, 0x53, 0xca, 0x5f, 0xfa, 0x60, 0x06, 0x3f, 0xfc, 0x00, 0x00
};

//  imágenes de dados (64x64 px)
const unsigned char* caras[] = {d1, d2, d3, d4, d5, d6};

void setup() {
  
  Serial.begin(9600);
  tft.initR(INITR_REDTAB); // Or INITR_BLACKTAB, depending on your display
  tft.setRotation(0); // Adjust rotation as needed
  tft.fillScreen(ST7735_BLACK);  
  randomSeed(analogRead(0));
  pinMode(BUTTON_PIN, INPUT_PULLUP);
	
}

void loop() {
	tft.fillScreen(ST7735_BLACK);
    // Dibujamos el bitmap centrado (128-64)/2 = 32
   /* tft.drawBitmap(48, 48, d1, 16, 16, ST7735_WHITE);
		tft.fillScreen(ST7735_BLACK);
		tft.drawBitmap(48, 48, d2, 16, 16, ST7735_WHITE);
		tft.fillScreen(ST7735_BLACK);
		tft.drawBitmap(48, 48, d3, 16, 16, ST7735_WHITE);
		tft.fillScreen(ST7735_BLACK);
		tft.drawBitmap(48, 48, d4, 16, 16, ST7735_WHITE);
		tft.fillScreen(ST7735_BLACK);
		tft.drawBitmap(48, 48, d5, 16, 16, ST7735_WHITE);
		tft.fillScreen(ST7735_BLACK);
		tft.drawBitmap(48, 48, d6, 16, 16, ST7735_WHITE);
 ejemplo de que se ven */
    delay(500);
  if (digitalRead(BUTTON_PIN) == LOW) {
    // Animación de "girar" el dado
    for (int i = 0; i < 6; i++) {
      int temp = random(0, 6);
      tft.drawBitmap(48, 48, caras[temp], 16, 16, ST7735_WHITE);
      delay(70);
    }
    
    // Resultado final
    int resultado = random(0, 6);
    tft.fillScreen(ST7735_BLACK);
    // Dibujamos el bitmap centrado (128-64)/2 = 32
    tft.drawBitmap(48, 48, caras[resultado], 16, 16, ST7735_WHITE);
    delay(500); 
	}
}

pero no acaba de funcionar, y no le veo el error por mas que revise

A qué te refieres exactamente?

lo enciendo , pulso el boton y nada no se ve nada

Cómo está conectado el pulsador?

sin resistencia a negativo y luego al pin 2

Quita todo y prueba solo el pin con alguna leyenda que te muestre si presionaste o si no lo has hecho. Tal vez malas conexiones.
NO estas usando protoboard no?

si , lo descubri despues que fallaban las conexiones por la puñetera protoboard :(, por eso me fallaban circuitos a patadas, mil perdones y muchisimas gracias a todos

Conclusión, no uses PROTOBOARD.

1 Like