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 è
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;
}