Problema utilizzo strutture

Ciao a tutti, vi scrivo oggi per chiedervi un aiuto per l'utilizzo delle strutture. Vi spiego il mio problema... Sto cercando di modificare le funzioni per la gestione del sensore di colore ADJD-S311-CR999 (datasheet http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/LightImaging/datasheetCR999.pdf) che ho trovato in rete (https://www.sparkfun.com/datasheets/Sensors/Imaging/adjd_s311_cr99_example.pde). Sto cercando di far ritornare alla funzione che effettua l'effettiva misura di colore una struttura contenente le tre componenti RGB, per mia comodità.
Ho inserito questa parte di codice, seguendo la mia esperienza di programmazione in C++ ed un documento trovato sul Playground (Arduino Playground - ResourceFriendlyStructs), per dichiarare la struttura

// definizione di un nuovo tipo: color -> struttura contenente gli elementi red, green, blue
typedef struct
{
  float red;
  float green;
  float blue;
}color;

e ho modificato la funzione di misura in questo modo:

color getColor ()
{
  static color RGB; // struttura dove vengono memorizzate le componenti RGB
  int clearGain = getClearGain();
  set_gain(REG_INT_CLEAR_LO,clearGain);
  int colorGain = getColorGain();
  set_gain(REG_INT_RED_LO,colorGain);
  set_gain(REG_INT_GREEN_LO,colorGain);
  set_gain(REG_INT_BLUE_LO,colorGain);

  // reset delle componenti RGB
  int cc = 0;
  int red=0;
  int green=0;
  int blue=0;


  // calcolo della media fra 4 valori
  for (int i=0; i<4 ;i ++) 
  {
  performMeasurement();
  cc +=get_readout(REG_DATA_CLEAR_LO);
  red +=get_readout(REG_DATA_RED_LO);
  green +=get_readout(REG_DATA_GREEN_LO);
  blue +=get_readout(REG_DATA_BLUE_LO);
  }


  cc/=4;
  red /=4;
  green /=4;
  blue /=4;
  
  RGB.red = (float)red*redFactor;
  RGB.green = (float)green*greenFactor;
  RGB.blue = (float)blue*blueFactor;
  // ritorno delle componenti RGB
  return RGB;
}

quando provo a compilare lo sketch, però, ottengo questo errore:

test_libreria_colore___return_struct:32: error: 'color' does not name a type

Non riesco a capire, però, quale sia il problema... Probabilmente è una stupidaggine ma purtroppo non riesco ad individuarlo... Potete darmi una mano?
Utilizzo l'IDE 1.5.1r2... Allego anche l'interezza del codice.

Ringrazio anticipatamente tutti
Luca

test_libreria_colore___return_struct.ino (5.16 KB)

ciao, il problema sta che devi mettere i prototipi che restituiscono il tipo in un file di header, separato, oppure potresti mettere

struct color{
float red;
float green;
float blue;
};

e usare struct color nel programma (più brutto)

fammi sapere se ti funziona :slight_smile:

P.S. guarda la voce faq di questa pagina --> Arduino Playground - Struct Resource

Leonid

Ovvero hai sbagliato la sintassi:

  1. struct color{ float red; float green; float blue; };
  2. struct { float red; float green; float blue; } color ;

La 1 definisce una struttura di tipo color che potrai usare come se fosse il "tipo" per delle variabili.
La 2 definisce una tipo di struttura senza nome e crei una variabile di nome color di quel tipo.

Infatti puoi anche fare tutto in un colpo solo

  1. struct TypeColor{ float red; float green; float blue; } c1, c2;
    Definisci un tipo struttura di nome TypeColor e crei due variabili di quel tipo chiamate c1 e c2

Vi ringrazio decisamente! :slight_smile: ora il compilatore non mi da errori, ho spostato la definizione del nuovo tipo in un file *.h... Immaginavo che il problema fosse nella sintassi ma non riuscivo a risolvere... Ora devo vedere se funziona... Ma penso di si... Appena metterò le mani su un Arduino libero lo proverò :slight_smile:

Vi ringrazio ancora
ciao

Luca