Representar el símbolo "grados" en display de 7 segmentos

Hola, estoy haciendo unas pruebas con un display de 4 dígitos y 7 segmentos TM1637. No logro representar el símbolo de grados centígrados "º" En el tercer segmento. Dejo el sketch:

#include "TM1637.h"
#define CLK 2 // Pin CLK
#define DIO 3 // Pin DIO
TM1637 tm1637(CLK,DIO);

void setup()
{
tm1637.init(); // Inicializa modulo
tm1637.set(0); // Brillo, 0 (minimo) a 7 (maximo)
tm1637.point(POINT_OFF); // Apaga dos puntos
}
void loop()
{
tm1637.display(0, 2);     //el número 2
tm1637.display(1, 4);     //el número 4
tm1637.display(2, 25 );   //"25" es un guión, ¿cómo represento el símbolo grados?
tm1637.display(3, 0x0c);  //la letra C
}

Este es tu display

Como quieres representar los grados?
Se me ocurre representarlo como un cero chico del lado superior con segmentos abfg activos

Tomado de esta librería TM1637
Mi sugerencia esta basada en esta librería.

#include <TM1637Display.h>
//define como global
const uint8_t SEG_GRADOS = {SEG_A | SEG_B | SEG_F | SEG_G};

//y luego lo usas asi
tm1637.display(2, SEG_GRADOS );

Dime si funciona.

Pues si, lo ví alguna vez trasteando por Internet, lo representaban con los cuatro segmentos que dices, ABFG, recuerdo que se quedaba muy bien.

Bueno dime si funciona?

Pues en el tercer módulo aparece un “8”.

Pongo el Sketch:

#include "TM1637.h"
#include <TM1637Display.h>

#define CLK 2 // Pin CLK
#define DIO 3 // Pin DIO
TM1637 tm1637(CLK,DIO);
const uint8_t SEG_GRADOS = {SEG_A | SEG_B | SEG_F | SEG_G};

void setup()
{
tm1637.init(); // Inicializa modulo
tm1637.set(0); // Brillo, 0 (minimo) a 7 (maximo)
tm1637.point(POINT_OFF); // Apaga dos puntos
}

void loop()
{
tm1637.display(0, 2);     //el número 2
tm1637.display(1, 4);     //el número 4
tm1637.display(2, SEG_GRADOS ); //Muestra un "8"
tm1637.display(3, 0x0c);  //la letra C
}

Agregar que he estado haciendo pruebas, si pongo SEG_A aparece un 1, con SEG_B aparece un 2, con SEG_C pone un 4…

Estas son las definiciones de SEG_X

#define SEG_A   0b00000001
#define SEG_B   0b00000010
#define SEG_C   0b00000100
#define SEG_D   0b00001000
#define SEG_E   0b00010000
#define SEG_F   0b00100000
#define SEG_G   0b01000000

No entiendo como SEG_A accione un 1 y asi los demás?

Lo consulté en los Foros de Electrónica, y uno de los compañeros "dió en el clavo". Hay que utilizar la función setSegments().

Como referencia la página FabricaDIgital. Utilizan un array con 4 valores correspondientes cada uno a un módulo del TM

Lo probé y he logrado que se enciendan los segmentos ABFG del tercer módulo con "0b01100011"

Entonces no viste el ejemplo de la librería?

https://github.com/avishorp/TM1637/blob/master/examples/TM1637Test/TM1637Test.ino

Ahi estaba, pensé que lo habías visto, es verdad también que mi sigerencia de código estaba incompleta

Supuse que probarías el ejemplo y apreciarías las novedades que tiene.

Bueno, tema resuelto.

Gracias, pero aguarda un poco para dar por cerrado el post, he hecho unas pruebitas y aparece el dígito correcto en el tercer módulo, pero tengo que rehacer casi todo el sketch, lo mismo como suele ser habitual me aparecen nuevas preguntas. Por ejemplo, que aunque creo que entiendo como controlarlo, es que debo manejar cuatro TM1637 con distintas temperaturas.

Pues podemos darlo por resuelto, aunque tengo dos preguntas, al final de este post.

Por si a alguien puede servirle pongo el Sketch para encender dos TM1637:

#include <TM1637Display.h>

#define CLK_Agua 2
#define DIO_Agua 3
#define CLK_Suelo 4
#define DIO_Suelo 5
#define Numero0 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F
#define Numero1 SEG_B|SEG_C
#define Numero2 SEG_A|SEG_B|SEG_G|SEG_E|SEG_D
#define Numero3 SEG_A|SEG_B|SEG_G|SEG_C|SEG_D
#define Numero4 SEG_F|SEG_G|SEG_B|SEG_C
#define Numero5 SEG_A|SEG_F|SEG_G|SEG_C|SEG_D
#define Numero6 SEG_A|SEG_F|SEG_G|SEG_C|SEG_D|SEG_E
#define Numero7 SEG_A|SEG_B|SEG_C
#define Numero8 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G
#define Numero9 SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G
#define LetraGrados  SEG_A|SEG_B|SEG_F|SEG_G
#define LetraC  SEG_A|SEG_F|SEG_E|SEG_D

TM1637Display display1(CLK_Agua, DIO_Agua); //Creando un objeto
TM1637Display display2(CLK_Suelo, DIO_Suelo);

const uint8_t TemperaturaAgua[] = {Numero2,Numero4,LetraGrados,LetraC}; 
const uint8_t TemperaturaSuelo[] = {Numero2,Numero5,LetraGrados,LetraC};

void setup() 
{
 display1.setBrightness(0);  // brillo 0 a 7
 display2.setBrightness(0);
}

void loop() 
{
 display1.setSegments(TemperaturaAgua);
 display2.setSegments(TemperaturaSuelo);
}

1.- Es útil introducir un delay() o utilizar millis() mientras no haya cambios en los valores de los displays?

2.- Hay una manera mas “elegante” de poner todos los #define? Parece un bloque poco estético al principio del sketch, jeje

1.- Es útil introducir un delay() o utilizar millis() mientras no haya cambios en los valores de los displays?

2.- Hay una manera mas "elegante" de poner todos los #define? Parece un bloque poco estético al principio del sketch, jeje

Tu sabes como estan hechos algunos códigos por dentro?

El define no molesta, no se ve y es mucho mas estetico que poner

los números estan hechos en muchos sitios de displays de leds 7 segmemntos mira este link de Prometec

byte  Digit[10][8] =                // Arduino UNO va muy justo de memoria. Por eso lo
{                                   // definimos como byte y no como int
   { 1,1,1,1,1,1,0,0 },    // 0   
   { 0,1,1,0,0,0,0,0 },    // 1
   { 1,1,0,1,1,0,1,0 },    // 2
   { 1,1,1,1,0,0,1,0 },    // 3
   { 0,1,1,0,0,1,1,0 },    // 4
   { 1,0,1,1,0,1,1,0 },    // 5
   { 1,0,1,1,1,1,1,0 },    // 6
   { 1,1,1,0,0,0,0,0 },    // 7
   { 1,1,1,1,1,1,1,0 },    // 8
   { 1,1,1,0,0,1,1,0 }     // 9
};

Ahora este modo es mas como el que estas usando

// Segmentos que componen cada número 
// Para CC.
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 
0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111};
// Para CA. descomentar las 2 líneas que siguen.
// const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
// 0b0000010, 0b1111000, 0b0000000, 0b0010000};

Como ves CA Common Anode y CC Common Catode estan invertidos. mira el 0 = 0b0111111 es tu definición

#define Numero0 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F

puesta de este modo

#define Numero0 0b0000 0001|0b0000 0010|0b0000 0100|0b0000 1000|0b0001 0000|0b0010 0000|0b0100 0000 que sumados dan 0b0111111