De maneira conveniente, o gráfico seria simples com dois step's apenas (Verdadeiro ou Falso), por isso, mudei o código um pouco tratando de conectar o LDR na porta analógica. O LDR é analógico por natureza e pouco linear por isso pode-se estimar o nível de iluminamento utilizando o simples LDR conectado na porta analógica. Atendo-se ao objetivo do software não me preocupei muito em realizar a interpolação matemática dos pontos pelo software - que deixo para outro post mais oportuno - e sim conversão dos dados para excel.
Para apresentar os dados usei uma estrutura muito conhecida dos programadores em .NET, o DataSet. Proveniente do ADO.NET o DataSet é uma estrutura de conexão com banco de dado, através do DataSet você pode "importar" um banco de dados para local e manipulá-lo sem necessitar de grandes códigos. Além disso, o que me agrada bastante, é a possibilidade de salvar o arquivo em um *.xml através de um único comando e depois carregá-lo em outro software na mesma estrutura de tabelas. Realmente o que eu uso código não o DataSet em si, mas sim o DataTable - uma tabela do DataSet - com essa tabela basta associar como fonte da estrutura DataGridView que já se organiza na tela permitindo a visualização dos dados, como foi feito no software.
Além da tabela, fiz no programa uma maneira de implementar de forma gráfica, o que trata de algo bem interessante visto que um gráfico torna o resultado mais palpável e evidente. Para implementação usei a maneira mais simples que encontrei na internet - através do Chart do.NET - que funciona de maneira bem similar a forma utilizada para apresentar os dados na tela do programa. Cria-se uma área gráfica (ChartAreas) atribui a ela uma série de dados (uma série porque só salvamos um dado) e associa a área gráfica delimitada no programa.
Este é o código para apresentar a tabela de valores e o gráfico na tela. Para baixar projeto do Visual Studio clique aqui.
Como o Rubens pediu eu construí também uma parte para converter o arquivo para excel usando uma dll do excel mesmo - isso implica que terá que ter o excel instalado para que o programa funcione (presumo eu, não fiz nenhum teste) no mesmo projeto (Projeto).
'Abre o arquivoDim objReader As StreamReader = New StreamReader(openFileDialog.FileName)Dim strContents As String = objReader.ReadToEnd()objReader.Close()'Cria o gráfico e o eixo onde será colocado os dadosChart1.ChartAreas(0).Name = "Gráfico"Chart1.Series.Add("Lux")Chart1.Series("Lux").ChartType = SeriesChartType.LineChart1.Series("Lux").ChartArea = "Gráfico"'Cria uma tabela de dados para apresentar no DataGridViewmyTable = New Data.DataTablemyTable.TableName = "Data"'Associa a tabela "Data" a coluna de tempoDim timeColum As New DataColumn()timeColum.ColumnName = "Tempo"timeColum.Namespace = "Tempo"If Not myTable.Columns.Contains(timeColum.Namespace) ThenmyTable.Columns.Add(timeColum)End If'Associa também a tabela "Data" a coluna de dadosDim valueColum As New DataColumn()valueColum.Namespace = "Valor"valueColum.ColumnName = "Valor"If Not myTable.Columns.Contains(valueColum.Namespace) ThenmyTable.Columns.Add(valueColum)End If'Desmonata o arquivo de texto em linhasDim arrayContents As String() = strContents.Split(vbLf)'Para cada Linha processa os dadosFor i As Integer = 0 To arrayContents.Length - 2'Se a linha é valida, ou seja, tem pelo menos os caracteres da data correta' os 18 primeiros caracteres ex.: 06/17/2012 14:08:10If arrayContents(i).Length = 23 Then'Cria uma nova linha tipada da tabelaDim newRow As DataRow = myTable.NewRow'Separa a data de um lado e o dado na outra colunanewRow.Item(0) = arrayContents(i).Substring(1, 18)newRow.Item(1) = arrayContents(i).Split(vbTab)(1)'Adiciona a tabelamyTable.Rows.Add(newRow)'Adiciona o dado ao gráfico convertendo-o para doubleChart1.Series("Lux").Points.AddXY(arrayContents(i).Substring(1, 18), _CType(arrayContents(i).Split(vbTab)(1), Double))End IfNextDataGridView1.DataSource = myTable
Para o código funcionar deve-se adicionar o Microsoft.Office.Interop.Excel do .NET. Oc comentários estão em inglês porque encontrei esse código na internet e fiz alguns pequenos ajuste, se desejar encontrar a origem coloque no google algum trecho, realmente esqueci de onde veio o código...
' various variablesDim row As IntegerDim col As IntegerDim rowCount As IntegerDim colCount As IntegerDim cell As StringDim rowcell As Integer' Excel VariablesDim excelApp As New Excel.ApplicationDim excelBook As Excel.Workbook = excelApp.Workbooks.AddDim excelWorksheet As Excel.Worksheet = _CType(excelBook.Worksheets(1), Excel.Worksheet)' get count of rows and count of columnsrowCount = myTable.Rows.Count()colCount = myTable.Columns.Count()' add the column headingsFor col = 0 To colCount - 1row = 1cell = GetExcelColumn(col) & row.ToStringexcelWorksheet.Range(cell).Value = "Data"'excelWorksheet.Range(cell).ColumnWidth = "Valor"Next' now add the data elementsFor row = 0 To rowCount - 1rowcell = row + 2For col = 0 To colCount - 1cell = GetExcelColumn(col) & rowcell.ToStringexcelWorksheet.Range(cell).Value = myTable.Rows(row).Item(col).ToStringNextNext' turn off wait cursorMe.Cursor = Cursors.Default' view the spread sheetexcelApp.Visible = TrueexcelBook.SaveAs(myStream.ToString(), _Excel.XlFileFormat.xlXMLSpreadsheet, _AccessMode:=Excel.XlSaveAsAccessMode.xlNoChange)
Para salvar pela interface digite o nome do arquivo com extensão xls, por exemplo: teste.xls.
Acredito que o post tenha sido bem útil e tenha ajudado bastante, para finalizar, deixo os link para fazer download dos dois projetos do VS2010, do programa do Netduino Plus e do Código para interpretar os dados do cartão.
Muito bom Victor,
ResponderExcluirValeu a força