Problema con struttura dati

Salve, ho fatto questo codice e ci sbatto la testa da almeno 2 giorni ma non riesco a capire il perchè mi genera questi errori:

struct Zone_t {
int AnalogPin;
int pinMatrix[3];
int firstRead[8];
int AnalogRead[8];
int Matrix[8][3];

void setPinMatrix(int pin0, int pin1, int pin2, int AnalogPin){

pinMatrix[0] = pin0;
pinMatrix[1] = pin1;
pinMatrix[2] = pin2;
AnalogPin = AnalogPin;
Matrix = {
{LOW,LOW,LOW},
{LOW,LOW,HIGH},
{LOW,HIGH,LOW},
{LOW,HIGH,HIGH},
{HIGH,LOW,LOW},
{HIGH,LOW,HIGH},
{HIGH,HIGH,LOW},
{HIGH,HIGH,HIGH}
};
}
void initialize(){
for(int i = 0; i<3; i++){
pinMode(pinMatrix*, OUTPUT);*

  • }*

  • readInput();*

  • for(int j =0; j< 8;j++){*

  • firstRead[j] = AnalogRead[j];*

  • }*

  • }*

  • void readInput(){*

  • for(int i = 0; i<8; i++){*

  • for(int j = 0; j<3; j++){*
    _ digitalWrite(pinMatrix[j], Matrix*[j]);_
    _
    }*_
    _ AnalogRead = analogRead(AnalogPin);_

* }*
* }*
* boolean comp(){*
* int f=0;*
* for(int i = 0;i < 8; i++){*
if(firstRead == AnalogRead*){*
* f++;*
* }*
* }*
* return f==8;*
* }*
};[/quote]
L’errore è questo:
> Sensor.c:15: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘attribute’ before ‘{’ token
questo struct si trova in un file .c che includo facendo un semplicissimo #include “miofile.c”
e che si trova nella stessa cartella… per favore aiutatemi…

Stavo per andare a dormire quando ho visto il tuo post, quindi.... :sleeping: Non è che si capisce molto quello che vuoi fare, cioè ci sono altri errori che spunteranno fuori anche sistemando la struct.

Comunque: struct newtypename { type membername; type membername; type membername; ecc... };

La parentesi { apre un blocco di codice che devi chiudere con } e struct in particolare richiede il punto e virgola alla fine.

Crei variabile di tipo Zone_t con

Zone_t zone0;

Accedi ai membri di zone0 così:

zone0.AnalogPin = 2;
zone0.AnalogRead[0] = -10;

Poi si tratta di C++ non di C, quindi: Zone anziché Zone_t. I membri della struct sono variabili e li chiami con la iniziale minuscola ecc, insomma in camelCase, analogPin ecc

Spero di averti illuminato. Ciao.

La parentesi di chiusura è a fine codice, questa struttura dati, include anche metodi all'interno... ho provato a togliere il "_t" ma c'è sempre lo stesso errore!

Ora che sono più sveglio, capisco di che si tratta. Il problema è nella inizializzazione della array Matrix che non viene accettata. Risolvi inizializzando la matrice sul posto in cui la dichiari.

struct Zone_t {
  int AnalogPin;
  int pinMatrix[3];
  int firstRead[8];
  int AnalogRead[8];

  int Matrix[8][3] = {
                          {LOW,LOW,LOW}
                        , {LOW,LOW,HIGH}
                        , {LOW,HIGH,LOW}
                        , {LOW,HIGH,HIGH}
                        , {HIGH,LOW,LOW}
                        , {HIGH,LOW,HIGH}
                        , {HIGH,HIGH,LOW}
                        , {HIGH,HIGH,HIGH}
                    };

In merito a _t non è che funziona se c'è o meno il _t, si tratta di una convenzione adottata dai programmatori, per leggere e comprendere facilmente il codice. Il rischio è per me che continuando a visionare codice che non adatta le convenzione mi imbastardisco, cioè come si dice praticando lo zoppo...

Ciao.

Non cambia nulla... ho inizializzato come mi hai detto ma da lo stesso errore... D:

Ti ho suggerito una inizializzazione non supportata dallo standard usato da Arduino, ciò è solo possibile con C++11. Quindi inizializza Matrix nel modo convensionale da dentro la funzione.

Matrix[0][0] = LOW;
    Matrix[0][1] = LOW;
    Matrix[0][2] = LOW;
    // ecc

Se anche così non va cerca altri problemi, perché ho provato e funziona.

PS: l'inizializzazione che hai usato è valida per inizializzare array e strutture a compile-time e non a run-time. A partire da C++11 è valida in entrambe i casi.

Ciao.