Witam, jak w temacie
Piszę program do obsługi czujników temperatury na układzie DS18S20
Mam tylko problem z odczytem
Kiedy wykonuję funkcję odczytu w pętli nie ma z tym problemu, ale niestety nie potrafię nic zrobić z danymi bo te zmieniają swoją wartość (od 0 do 89) z każdym "cyklem".
Wygląda to jak na filmie
Kod wyglądał mniej/więcej tak:
serialPort1.PortName = "Com1"; //Numer portu
serialPort1.BaudRate = 19200; //Ustalenie prędkości połączenia
serialPort1.Open(); //Otwarcie portu
serialPort1.DataBits = 8;
if (serialPort1.IsOpen == true)
{
for (int a = 1; a < 10; a++)
{
RxString = serialPort1.ReadExisting();
labelT1.Text = RxString;
labelT1.Refresh();
System.Threading.Thread.Sleep(200);
}
Byłoby wszystko w porządku, ale jak widać wyświetlane dane "migają" i nic nie potrafię z nimi zrobić (zapisać do zmiennej itd.) - za to mają prawidłową długość 89 bajtów.
Znowu dla tego kodu:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace DS18s20
{
public partial class Form1 : Form
{
public string RxString;
double[] tablica;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "Com1";
serialPort1.BaudRate = 19200;
serialPort1.Open();
serialPort1.DataBits = 8;
}
private void DisplayText(object sender, EventArgs e)
{
if (RxString.Length > 1)
{
label1.Text = RxString;
if (RxString.Length == 89)
{
label3.Text = RxString.Substring(1, 33);
}
label2.Text = Convert.ToString(RxString.Length);
label1.Refresh();
label2.Refresh();
label3.Refresh();
Thread.Sleep(1900);
}
}// Reakcja na otrzymywane dane
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
} // Odebranie danych i przypisanie ich pod zmienną RxString i wywołanie funkcji "DisplayText"
//do kontrolki serialPort1 przypisuje funkcję "serialPort_DataReceived" w zakłądce events>DataRecived
}
}
Dane mają różną długość :-/
Widać to na filmie
Ktoś podpowie co mogę z tym zrobić?
Dodam, że nie programuję na co dzień.
Jest to mój pierwszy program w C#
Za pomoc z góry dziękuję
Pozdrawiam, Krzysiek