C# Problema per riempire una stuttura dati

lunedì 19 gennaio 2009 - 22.53

Alex500 Profilo | Newbie

Salve a tutti,
mi sono iscritto spinto da una necessità a cui non sono riuscito a porre rimedio nemmeno chiedendo ad alcuni compagni di corso. Mi chiamo Alessandro e sto scrivendo un programma per la tesi in cui ricevo dati da un sensore e li elaboro attraverso alcuni algoritmi per riconoscere il movimento.
Il problema è questo: il sensore invia dati sottoforma di strisciate contenenti 9 valori in binario ognuno di 16 bit (in id e i valori degli otto singoli sensori che lo compongono), appena ricevuti li converto in int e salvo i singoli dati in una struttura apposita e quest'ultima viene inserita in una finestra più ampia che poi sarà data in pasto agli eventuali algoritmi di elaborazione. In proatica questa finestra una volta riempita dovrebbe contenere una serie di strisciate ( circa 500 ) con molti valori differenti. Il problema è che appena aggiungo una nuova strisciata di dati questa sovrascrive anche le strisciate precedentemente inserite !!! Ho implementato la finestra con due tecniche diverse ( un array e una List<T>) ma da sempre lo stesso problema...

Questa è la struttura che riceve i dati e riempie la finestra (chiamata winSample2 )
....
for (int i = 0; i < size; i++)
AP[i] = pH.port.ReadByte();

appoggio[0] = ((AP[0] * 256) + AP[1]);

//cont parte da 2 che è il primo dato effettivo del sensore
for (cont = 2, cont2 = 0; cont < size; cont += 2, cont2++)
{
bH = 0;
bL = 0;

bH = AP[cont];
bL = AP[cont + 1];
int TempH = bH * 256;
int somma = TempH + bL;

//sottrae hai valori convertiti le medie trovate: non scalo zeroStart perche il primo elemento dell'array
//appoggio è stato gestito prima del for
appoggio[cont / 2] = somma - zeroStart[cont2];
}

//La strisciata ricevuta coi dati convertiti in interi, viene salvata nella struttura dati SingleLine
//The single data-converted flow is being saved into the SingleLine struct.

sample = new SingleLine();

sample.Id = appoggio[0];
sample.MagnetoX = appoggio[1];
sample.MagnetoY = appoggio[2];
sample.AccelX = appoggio[3];
sample.AccelY = appoggio[4];
sample.AccelZ = appoggio[5];
sample.Pitch = appoggio[6];
sample.Roll = appoggio[7];
sample.Yaw = appoggio[8];


winSample2.adds(sample); //QUI AVVIENE IL BUG
winSampleCount++;

e queste sono le due implementazioni di WinSample2 ( una è commentata, ma danno entrambe lo stesso identico problema..)

public class WinSampler
{
#region Finestra creata con List

//private List<SingleLine> list;


//public WinSampler(int dimension)
//{
// list = new List<SingleLine>(dimension);
//}


//public List<SingleLine> SampleList
//{
// get { return list; }
// set { list = value; }
//}

#endregion

#region Finestra con Array

SingleLine[] list;

int i = 0;

public WinSampler(int dimension)
{
list = new SingleLine[dimension];
}

public void adds(SingleLine obj)
{
if (i < list.Length)
list[i] = obj;

i++;
}

public void clean()
{
for (int c = 0; c < list.Length; c++)
{
list[c] = null;
}

i = 0;
}

public SingleLine[] SampleList
{
get { return list; }
set { list = value; }
}

#endregion
}

Se qualcuno può aiutarmi o darmi consigli gliene sarò molto grato. Grazie mille a tutti ! Se servono altre info chiedete pure.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5