Convertire variabile in nome

ok funziona tutto, ho sistemato anche la rosa dei venti con una migliore precisione dei gradi che avevo fatto ad occhio.
provato adesso non ho riscontrato nessun difetto.

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#include <NMEAGPS.h>
#include <NeoSWSerial.h>
#define I2C_ADDRESS 0x3C
#define RST_PIN -1
#define MAX_CHARS 24

#define RX_pin 5
#define TX_pin 4
#define SHOW_INTERVAL 1
#define GPS_baud 9600
SSD1306AsciiWire oled;
NMEAGPS gps;
gps_fix fix;
float  odo, Speed, alt, Dist, h, maxs = 0;

char bussola [3]; //  2 caratteri lettere punti cardinali

unsigned long tmp, var = 0;
int secondi, minuti = 0, ore = 0, fct = 2, fcl = 1;
NeoGPS::Location_t    lastLoc, base;
bool stScan = true, lastLocOK = false;

static NeoSWSerial gpsPort(RX_pin, TX_pin);
static constexpr int INITIAL_SHOW  = (2 * SHOW_INTERVAL) - 1;
int show          = INITIAL_SHOW;
const int   LED_PIN  = 3;
const float SPEED_LIMIT = 0.1; 
void disp(int c, int r)
{
  oled.clear();
  oled.setCursor(c, r);
}
void setup() {
  
  pinMode (LED_PIN, OUTPUT);
  Serial.begin(9600);
  gpsPort.begin(GPS_baud);
  Wire.begin();
  oled.begin(&SH1106_128x64, I2C_ADDRESS);
  oled.setFont(ZevvPeep8x16);
  oled.displayRemap(true);//reverse lcd
  
  oled.clear();
 
  const int cs_sd = 2;
  if (!SD.begin (cs_sd)) {
    oled.clear();
    disp(65, 2);
    oled.print("SD");//if you read this mean SD is not present
    delay(10000);
    oled.clear();
    return;
  }
 
  File data = SD.open("L.csv", FILE_WRITE);
  data.println("");
  data.println("D  H  T  La  Lo  K  D  A  V  B" );
  data.close();
}
void loop() {
  tmp = (millis() / 1000);
  secondi = tmp - (var * 10) + fct;
  if (secondi > 60) {
    secondi = secondi - 60;
  }
  if (secondi == 60) {
    minuti = minuti + 1;
    var = var + 6;
  }
  if (((minuti == 10) || (minuti == 20) || (minuti == 30) || (minuti == 40) || (minuti == 50) || (minuti == 60)) && (secondi == 1))   {
    fct = fct + fcl;
  }
  if (minuti >= 60) {
    minuti = 0;
    ore = ore + 1;
  }
  if (ore >= 24) {
    ore = 0;
  }
  if (gps.available( gpsPort )) {
    gps_fix fix = gps.read();
    show = (show + 1) % SHOW_INTERVAL;
    if (fix.valid.speed && (fix.speed_kph() > SPEED_LIMIT)) {
      digitalWrite( LED_PIN, HIGH );
    } else {
      digitalWrite( LED_PIN, LOW );
       }
    if (fix.valid.location) {
      if (lastLocOK) {
        odo += fix.location.DistanceKm( lastLoc );
        Speed = fix.speed_kph();
      }
      lastLoc   = fix.location;
      lastLocOK = true;
      if (stScan) {
        stScan = false;
        base   = fix.location;
      } else {
        Dist = ( fix.location.DistanceKm( base ) );
      }
    }
      
    if ( Speed > maxs)          maxs = Speed;
    if (fix.valid.heading )     h = fix.heading() ;
    
    if (fix.valid.altitude) {
        alt = fix.altitude();
       
    }
    // punti cardinali gradi bussola  (float head) convertiti in lettere (bussola)
        if ((h > 338 && h < 360) || (h > 0 && h < 22)) {
       strcpy( bussola, "N ") ;
    }

    if (h > 23 && h < 67) {
     strcpy  ( bussola, "NE") ;
    }
    if (h > 68 && h < 112) {
    strcpy( bussola, "E ") ;
    }
    if (h > 113 && h < 157) {
     strcpy ( bussola, "SE") ;
    }
    if (h > 158 && h < 202) {
     strcpy ( bussola, "S ") ;
    }
    if (h > 203 && h < 247) {
     strcpy   ( bussola, "SO") ;
    }
    if (h > 248 && h < 292) {
     strcpy  ( bussola,"O ") ;
    }
    if (h > 293 && h < 337) {
     strcpy  ( bussola, "NO") ;
    }

    if (show == 0) {
      char displayBufffer[MAX_CHARS];
     
      oled.setCursor(0, 0);
      snprintf(displayBufffer, MAX_CHARS, "Km:%2d.%1d",  (int)odo, (int)(odo * 100) % 100);
      oled.println(displayBufffer);
      oled.setCursor(65, 0);
      snprintf(displayBufffer, MAX_CHARS, "Di:%2d.%1d",  (int)Dist, (int)(Dist * 100) % 100);
      oled.println(displayBufffer);
      snprintf(displayBufffer, MAX_CHARS, "Ve:%2d.%1d", (int)Speed, (int)(Speed * 10) % 10);
      oled.println(displayBufffer);
      oled.setCursor(65, 2);
      snprintf(displayBufffer, MAX_CHARS, "Vm:%2d.%1d", (int)maxs, (int)(maxs * 10) % 10);
      oled.println(displayBufffer);
      snprintf(displayBufffer,MAX_CHARS, "Al:%2d.%1d", (int)alt, (int)(alt * 100) % 100);
      oled.println(displayBufffer);
      oled.setCursor(65, 4);
      snprintf(displayBufffer, MAX_CHARS, "He:%s\n",bussola);  //punti cardinali bussola scritti sul display
      oled.println(displayBufffer);
      snprintf(displayBufffer, MAX_CHARS, "%d:%d:%d ", (int)ore, (int)minuti, (int)secondi);
      oled.println(displayBufffer);
      oled.setCursor(65, 6);
      snprintf(displayBufffer, MAX_CHARS, "He:%2d.%1d", (int)h, (int)(h * 100) % 100);
      oled.println(displayBufffer);
    }
    File data = SD.open("L.csv", FILE_WRITE);
    data.print(fix.dateTime.hours + 2);
    data.print(":");
    data.print(fix.dateTime.minutes);
    data.print("  ");
    data.print(fix.dateTime.date);
    data.print("/");
    data.print(fix.dateTime.month);
    data.print("  ");
    data.print(ore);
    data.print(":");
    data.print(minuti);
    data.print(":");
    data.print(secondi);
    data.print("  ");
    data.print(fix.latitude(), 6);
    data.print("  ");
    data.print(fix.longitude(), 6);
    data.print("  ");
       
    data.print(odo);
    data.print("  ");
    data.print(Dist);
    data.print("  ");
    data.print(alt);
    data.print("  "); 
    data.print(Speed);
    data.print("  ");
    data.print(h);
    data.print("  ");
    
    data.close();
  }
}