Ejemplo n.º 1
0
        //plot data from circular buffer
        private void DoSomething()
        {
            int num = 0;

            while (working)
            {
                if (!CoordenaDados.circularBufferEMG.IsEmpty)
                {
                    int buff;
                    int n = CoordenaDados.circularBufferEMG.SamplesToRead;

                    for (int i = 0; i < n; i++)
                    {
                        num++;
                        if (num >= 200)
                        {
                            Disconnect();
                            break;
                        }
                        buff = CoordenaDados.HandleEMG();

                        resultadoEMG[i] = buff;
                    }
                }
            }
            calculos();
            Console.WriteLine("EMG encerrado! ");
        }
Ejemplo n.º 2
0
        double t       = 0; //tempo atual
        //plot data from circular buffer
        private void DoSomething()
        {
            while (working)
            {
                if (!CoordenaDados.circularBufferEMG.IsEmpty) //se o buffer não está vazio podemos remover dados
                {
                    float buff;
                    int   samples = CoordenaDados.circularBufferEMG.SamplesToRead; //numero de amostras disponíveis
                    for (int i = 0; i < samples; i++)
                    {
                        buff = CoordenaDados.HandleEMG() / 205.0f; //retira um valor do buffer circular

                        //verifica se está no modo coleta ou calibração
                        switch (calibra)
                        {
                        //modo calibração
                        case "calibrando":
                            if (num < tam)     //se ainda não chegou na quantidade de amotras/ tempo suficiente
                            {
                                tc += 1.0f / sampFreq;
                                resultadoEMG[num] = buff;                                                                //insere o valor no vetor
                                file.WriteLine(buff.ToString());                                                         //armazena em arquivo
                                this.chart2.BeginInvoke(new Action(() => this.chart2.Series[0].Points.AddXY(tc, buff))); //plota o valor
                                num++;
                            }
                            else
                            {
                                calculos();       //efetua a media e o desvio padrão para calcular o limiar
                                Disconnect();     //fecha as conexões com a porta e para de receber dados
                            }
                            break;

                        //modo coleta
                        case "coletando":
                            file.WriteLine(buff.ToString());     //armazena o dado no arquivo
                            //se o sinal ultrapassou o limiar e o estado mudou
                            if (buff > limiar)
                            {
                                estadoAtualEMG = true;
                            }
                            else
                            {
                                estadoAtualEMG = false;
                            }
                            //se os estados são diferentes e se encontram acima do limiar
                            if (estadoAnteriorEMG != estadoAtualEMG && estadoAtualEMG)
                            {
                                SendKeys.SendWait(" ");    //envia a tecla espaço
                            }
                            estadoAnteriorEMG = estadoAtualEMG;
                            //t += 1.0f / sampFreq; //contagem do tempo de plotagem
                            //this.chart1.BeginInvoke(new Action(() => this.chart1.Series[0].Points.AddXY(t,buff))); //plota o valor
                            //caminhando com o gráfico
                            if (t > chart1.ChartAreas[0].AxisX.Maximum)
                            {
                                chart1.Invoke(new Action(() => chart1.ChartAreas[0].AxisX.Maximum = chart1.ChartAreas[0].AxisX.Maximum + 0.1));
                                chart1.Invoke(new Action(() => chart1.ChartAreas[0].AxisX.Minimum = chart1.ChartAreas[0].AxisX.Minimum + 0.1));
                            }
                            break;
                        }
                    }
                }
            }
            //terminado o processo...
            //salva o tempo final da coleta
            string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);

            file.WriteLine(timestamp);
            file.Close();//fecha o arquivo
            Console.WriteLine("EMG encerrado! ");
        }