(SOLUCIONADO)Saber el nombre del código cargado actualmente en la placa ???

Hola a todos:

A veces es un problema no recordar de un día a otro que ultimo codigo subí a la placa.

Estuve buscando por el foro la forma de: Saber cuando conecto, el ultimo código que tengo cargado en la placa.

No he encontrado nada (ademas de poner un pegatina escrita encima :slight_smile: ).

Se me ha ocurrido esta sencilla solución: (si sabéis algo mejor, no dudéis en enviarlo)

void setup() {
 
}

void loop()
 
{

Serial.println("TITULO: TU CODIGO");
delay(100);

etiqueta:

//Insertar aqui tu codigo.

goto etiqueta;

}

Si lo sitúas bien, se imprime el titulo una sola vez al principio.

Ocupa algo de memoria, pero si no vas corto no importa a cambio de poder identificar el ultimo código que has subido.

Saludos !!

Hola,
En lugar de ponerlo en el loop, ponlo en el setup.

Setup suena a configuración pero lo que hace es ejecutarse una sola vez al arrancar, lo que pongas dentro no es necesario que sean cosas de configuración.

GRACIAS rodripelto !!

Ya suponía que seguramente había una solución mas sencilla !!!!

Saludos !!! :slight_smile: :slight_smile: :slight_smile: y Karma para el caballero !!!

No entiendo y si lo cambias como sabres que versión es?

pon una etiqueta digamos

#define TITULO   "Control Temperatura"
#define VERSION "0.45"

y luego

void setup() {

    char buffer[40];
    sprintf(buffer,"Titulo: %s Version : %s", TITULO, VERSION);
    Serial.println(buffer);
}

Es lo mismo que planteas pero ahora se ve de que hablas

Yo adopté una técnica de un amigo que es muy simple...

Carpeta y luego dentro subcarpetas con la fecha indefectiblemente cada fecha tiene una versión diferente y jamas MODIFICO la anterior.
La copio y sigo a partir de Ahi.

Mejor que:

Serial.println("TITULO: TU CODIGO");

Es usar la macro F( ). Es un poco más lento, no se va a notar, pero ahorra memoria:

Serial.println(F("TITULO: TU CODIGO"));

No se copia la cadena en RAM para luego mostrarla, sino que se muestra obteniendo los datos directamente de la memoria de programa (ver Arduino en español: PROGMEM).

Gracias surbyte y Ignorante Absoluto (no tan ignorante !!!) :slight_smile:

Probare vuestras sugerencias y ya os explicare .....

La que hizo rodripleto: la probé y funcionó bien

Saludos y Karma para los dos !!!

Hasta pronto !!!!

.

Hola todos en especial a surbyte y a Ignorante Absoluto:

He hecho pruebas con vuestras sugerencias con el resultado:

La de Ignorante Absoluto: Funciona correctamente.

La de surbyte: Compila, sube el código, pero no imprime nada en el monitor ni funciona el codigo.

Os envío tal como ha quedado el código según indicaciónes de surbyte:

/*
*  RATA -DESPLAZAMIENTO  LUCES ACTIVADO POR PULSADOR
**  
* Al activar pulsador provoca  el encendido y apagado de una serie de leds
* quedando apagados al final, esperando una nueva pulsacion.
* Mientras este pulsado repetira la cadena.
* SE REFLEJA EN EL MONITOR EL CAMBIO.
* 
* =====================  ==============================
*/

      #define TITULO   "A_RATA_POR_PULSADOR_MSexperxxx"
      #define VERSION "0.3"


      int leds[]={6,7,8,9,10,11};
      int tiempo = 200;
      int pulsador = 2;
      int n = 0;
      int pulsadorVale = 0;
      
      void setup()
  {
   Serial.begin(9600);
   char buffer[40];
    sprintf(buffer,"Titulo: %s Version : %s", TITULO, VERSION);
    Serial.println(buffer);   
      
      for(n=0;n<6;n++)
  {
      pinMode(leds[n],OUTPUT);
  }
      pinMode(pulsador,INPUT);
      
  }
      void Pantalla()// ============ funcion ===================
  {
      Serial.print("  PULSADOR:");
      Serial.print(pulsadorVale);
      
      delay(500);
   } // ============================ funcion =====================
      void desplazamiento()// ============= funcion ==================
   {
      for(n=0;n<6;n++)
   {
      digitalWrite(leds[n],HIGH);
      delay(tiempo);
      digitalWrite(leds[n],LOW);
      delay(tiempo);
   }
   } // ============================ funcion ===========================
      
      void loop()
   {
      pulsadorVale = digitalRead(pulsador);
      
      Pantalla();
      if (pulsadorVale == 1)
   {
      desplazamiento();
   }
      
   }
      
      // ======================= FIN =======================

Tal vez me falta algo…

Saludos !!!

Punto número uno: estás definiendo buffer con un tamaño de 40 bytes, mientras que en el ejemplo que has puesto la cadena que estás metiendo dentro de buffer es de 53 bytes, con lo que es muy probable que te esté “machacando” los valores de otras variables, corrompiéndolas. Esto es lo que se conoce como desbordamiento de buffer. Lo probé y me hacía “cosas raras”.

Punto número dos: ¿para qué tanto rodeo? Si hace lo mismo, te dejas de complicaciones y ahorras RAM si pones:

    Serial.print("Titulo: ");
    Serial.print(TITULO);
    Serial.print("  Version: ");
    Serial.println(VERSION);

En lugar de:

    char buffer[40];
    sprintf(buffer,"Titulo: %s  Version: %s", TITULO, VERSION);
    Serial.println(buffer);

Punto número tres: ¿Sabías que puedes poner un literal de cadena “troceada” en varios literales de cadena consecutivos, sin poner ningún operador en medio, sólo espacios, tabuladores o saltos de línea? Así que lo anterior se podría poner así (y daría como resultado el mismo programa):

    Serial.print("Ti"        "t"      "ul"         "o: ");
    Serial.print(TITULO);
    Serial.print("  Ver"
                       "sion: ");
    Serial.println(VERSION);

Así que, teniendo en cuenta que TITULO y VERSON no son más que literales de cadena como lo son "Titulo: " y " Version: ", podemos poner un único literal de cadena formado por cuatro literales de cadena consecutivos, uno detrás de otro. Pues hagámoslo y la cosa quedará tal que así:

    Serial.println("Titulo: " TITULO "  Version: " VERSION);

Punto número cuatro: Gracias por agradecerme la sugerencia. Pero, ¿para qué te ha servido si no la has usado para nada? No veo el uso de la macro F( ) por ningún lado. Así que úsala:

    Serial.println(F("Titulo: " TITULO "  Version: " VERSION));

Compara cuanto ocupa el programa y cuanta RAM consume antes y después del cambio, viendo la información que te da al finalizar cada compilación, y me dices cual te convence más.

Resumiendo, quita las tres líneas:

    char buffer[40];
    sprintf(buffer,"Titulo: %s  Version: %s", TITULO, VERSION);
    Serial.println(buffer);

y pon en su lugar la línea:

    Serial.println(F("Titulo: " TITULO "  Version: " VERSION));

Es “más seguro”. Y ahorrarás memoria de programa y RAM.

Hola IgnoranteAbsoluto (se me hace raro llamarte así, que modesto eres !!! :slight_smile: ) )

La cuestion: Tal vez no me he explicado con claridad.

Tu sugerencia de utilización de la macro F(), si la he utilizado y ha funcionado perfectamente, es la prueba de surbyte que no he sabido aplicar.

Gracias y efusivos Karma !!!!.

Punto número dos: ¿para qué tanto rodeo? Si hace lo mismo, te dejas de complicaciones y ahorras RAM si pones:

Cual es el problema de usar RAM cuando no tienes problema en hacerlo?
Son estilos Ignorante. Si estas en situación de usar mucha RAM entiendo que hay que andar con cautela pero de lo contrario nada me inhabilita en usarlo.

Ademas ese buffer de 40 bytes se vuelve a usar en cada ocasión que lo amedite. Para mi es una forma muy rápida de ordenar las salidas de datos.

Gracias surbyte

por la ultima puntualización.

Creo que entre todos se ha resuelto la cuestión.

Karma para el amigo !!!

Saludos !!!

Hola amigos

Añadiendo algún dato más al tema :

Se puede redactar el código así:

void setup()

{                
      Serial.begin(9600);  

      
       Serial.println(__FILE__);  // Escribe en pantalla el path y el TITULO del CODIGO    
               

       Serial.println(__DATE__);   //  Fecha de hoy  

}

FILE y DATE en MAYUSCULAS y dobles__guiones__ bajos !!.

Saludos !!

.