Fala galera,
to com um probleminha ao usar umas classes do JFreeChart para a geração de gráficos em tempo real. Minha aplicação faz uso de uma Placa de Aquisição de dados. Existe uma função que me retorna 100 amostras de um sinal senoidal de frequencia 100 Hz. se eu utilizar a classes de série de tempo para gerar estaticamente o grafico do sinal eu consigo uma representação perfeita do sinal, no entanto eu preciso de uma representação dinâmica, em tempo real. Qd eu uso as classes para a geração de gráficos dinâmicos, o sinal mostrado no gráfico aparece todo retorcido, diferente da imagem de uma senoide. No entanto os limites superior e inferior da senoide são respeitados no gráfico. Sempre que eu aumento ou dominuo a amplitude do sinal o programa responde na mesma hra atualizando a amplitude do mesmo. Gostaria de saber o que pode estar errado, infelizmente não tem como postar aki as imagens dos gráficos.
A parte principal do código relativo à geração dinamica está listada abaixo:
class DataGenerator extends Timer implements ActionListener {
/**
* Constructor.
*
* @param interval the interval (in milliseconds)
*/
short[] wTotalBoards = new short[1] ;
short[] wAddrTimer = new short[1] ;
short[] wAddrCtrl = new short[1] ;
short[] wAddrDio = new short[1] ;
short[] wAddrAdda = new short[1] ;
short[] wStatus = new short[1] ;
int[] dwLowAlarm = new int[1] ;
int[] dwHighAlarm = new int[1] ;
float[] fVal = new float[1000] ;
TesteDll td = new TesteDll();
short res1 = td.P1602_DriverInit(wTotalBoards);
short r = td.P1602_ActiveBoard((short)0); // ativa a placa
short res2 = td.P1602_GetConfigAddressSpace((short) 0,wAddrTimer,wAddrCtrl,wAddrDio,wAddrAdda);
short res3 = td.P1602_SetChannelConfig((short)0, (short)0x00);
short res4 = td.P1602_DelayUs((short)3);
DataGenerator(int interval) {
super(interval, null);
addActionListener(this);
}
/**
* Adds a new free/total memory reading to the dataset.
*
* @param event the action event.
*/
public void actionPerformed(ActionEvent event) {
// long f = Runtime.getRuntime().freeMemory();
short res5 = td.P1602_AdsPacer(fVal, (short)100,(short)800);
for(int i=0;i<100;i++){
//double t = (double)fVal[i];
System.out.println("fVal: "+fVal[i]);
addTotalObservation((double)fVal[i]);
}
}
}
A classe acima é um timer que de 10 em 10 milisegundo faz a atualização do gráfico colocando novos valores de amostragem do sinal obtidos a partir da função “P1602_AdsPacer”