Pages: [1]   Go Down
Author Topic: Problema utilizzo strutture  (Read 395 times)
0 Members and 1 Guest are viewing this topic.
Genova
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (http://playground.arduino.cc/Code/ResourceFriendlyStructs), per dichiarare la struttura

Code:
// 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:

Code:
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:
Code:
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 - downloaded 8 times.)
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 87
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao, il problema sta che devi mettere i prototipi che restituiscono il tipo in un file di header, separato, oppure potresti mettere
Code:
struct color{
float red;
float green;
float blue;
};
e usare struct color nel programma (più brutto)

fammi sapere se ti funziona smiley


P.S. guarda la voce faq di questa pagina --> http://playground.arduino.cc/Code/Struct
--
Leonid
« Last Edit: April 19, 2013, 03:39:00 pm by LeonidRusnac » Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 87
Posts: 4956
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my name is IGOR, not AIGOR

Genova
Offline Offline
Full Member
***
Karma: 0
Posts: 114
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vi ringrazio decisamente! smiley 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ò smiley

Vi ringrazio ancora
ciao

Luca
Logged

Pages: [1]   Go Up
Jump to: