si puo creare istanza pubblica di una classe in una subroutine?

buongiorno a tutti,

questo è il mio primo post in questo forum, ho cercato nei vecchi post ma non ho trovato risposta a questo quesito:

vorrei creare una istanza pubblica di una classe nella routine setup() di arduino Ide, è possibile?

Ho provato ma sembra che venga creata come privata e tutti i riferimenti alla classe , presenti nelle altre routines, risultano out of scope e il compilatore mi da errore

‘xxxxx’ was not declared in this scope.

se invece creo l’istanza prima della routine void Setup(), la classe risulta pubblica ma non posso inizializzarla correttamente perchè mi servono alcuni dati immessi da input e/o dalla memoria eeprom, che posso recuperare solo nella routine di setup.

grazie

Se ti serve una variabile pubblica (di qualsiasi tipo) puo definirla appunto globale prima del setup e la vedi ovunque:

int globale = 10;

void setup()
{
 ...
}

void loop()
{
  globale = 20;
}

grazie per la risposta, ma io facevo riferimento ad una classe non ad una variabile.

il problema è che creando l’istanza di una classe che ha dei parametri di inizializzazione, se questi parametri vengono definiti nella routine di setup, la devo creare nella routine di setup, ma cosi è privata, oppure la creo prima e la modifico nel setup.

il problema si pone quando la classe non espone dei metodi di modifica dei parametri utilizzati nella creazione dell’istanza.

Chiamala come vuoi ma sempre una variabile è :slight_smile: hai provato così:

TuaClasse globale;

void setup()
{
   TuaClasse locale(5);
   globale = locale;
   prova();
}

void prova()
{
  globale.qualcosa();
}

Grazie mille!
è molto piu semplice di quanto mi aspettassi.

ora compila senza errori.

#include <Stepper.h>

struct Mysettigs{
   int Steps
   int Ratio
   int rpm
   int driver
};

Mysettings Settings;           

//crea istanza pubblica della classe 
Stepper motore1(200,2, 3);  //stepxturn, pin1, pin2

void setup()
{
int stepxturn;

EEPROM.get(Settings);           //read values into setting struct

stepxturn =Settings.Steps * Settings.Ratio * driver;       // driver=1 full =2 half =4 1/4 step 8 1/8 step

Stepper motore1locale(stepxturn,2,3);

motore1=motore1locale;

}