Jag hade svårt att hitta exakt vad som behövdes för att mäta temperatur så nu när det funkar tänkte jag dela med mig.
För att det skall funka så krävs drivern från Maxim
http://www.maxim-ic.com/products/ibutto ... /index.cfm
hmmm...formateringen sket sig men men thats life
Denna klassen är skapad i C# i VS ....Det är en singelton så det är bara att anropa
float temp = Temp.Instance.Temperature;
från sin egen klass.
Kod: Markera allt
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DalSemi.OneWire.Adapter;
using DalSemi.OneWire;
using System.Windows.Forms;
namespace UnaWire
{
public class TempSensor
{
private static TempSensor instance = null;
private Timer timer = null;
private PortAdapter adapter = null;
private float temperature = float.NaN;
private TempSensor()
{
SetSensor();
timer = new Timer();
timer.Interval = 1000;
timer.Enabled = true;
timer.Tick += new System.EventHandler(Timer_Tick);
}
public void SetSensor()
{
try
{
if (adapter == null)
{
adapter = AccessProvider.GetAdapter("{DS9490}", "USB1");
InitTemperatureConversion();
}
}
catch (Exception ex)
{
string failstr = ("Failure: " + ex.Message + "\n" + ex.StackTrace + "\n" + ((ex.InnerException != null) ? ex.InnerException.Message : ""));
adapter = null;
}
}
public float Temperature
{
get { return temperature; }
}
private void ReadTempAndInitConversion()
{
temperature = ReadTemperature();
InitTemperatureConversion();
}
private void InitTemperatureConversion()
{
if (adapter == null)
return;
try
{
adapter.BeginExclusive(true);
adapter.Reset();
//skip rom
adapter.PutByte(0xCC);
//read temp
adapter.PutByte(0x44);
adapter.EndExclusive();
}
catch (Exception ex)
{
string failstr = ("Failure: " + ex.Message + "\n" + ex.StackTrace + "\n" + ((ex.InnerException != null) ? ex.InnerException.Message : ""));
adapter = null;
}
}
private float ReadTemperature()
{
float temp = float.NaN;
if (adapter == null)
return temp;
try
{
adapter.BeginExclusive(true);
/*we only have one temp device but
otherwise we need the addresses
// clear any previous search restrictions
adapter.SetSearchAllDevices();
adapter.TargetAllFamilies();
adapter.Speed = OWSpeed.SPEED_REGULAR;
string str;
byte[] address = new byte[8];
if(adapter.GetFirstDevice(address, 0))
{
do // get subsequent 1-Wire device addresses
{
str = Print1WireHexAddress(address);
}
while(adapter.GetNextDevice(address, 0));
}*/
adapter.Reset();
adapter.PutByte(0xCC);
adapter.PutByte(0xBE);
byte[] data = new byte[9];
adapter.GetBlock(data, 9);
short t = (short)(data[0] | data[1] <<>
temp = 0.5f * (float)t - 0.25f + (float)(data[7] - data[6]) / (float)data[7];
adapter.EndExclusive();
}
catch (Exception ex)
{;
string failstr = ("Failure: " + ex.Message + "\n" + ex.StackTrace + "\n" + ((ex.InnerException != null) ? ex.InnerException.Message : ""));
adapter = null;
}
return temp;
}
private void Timer_Tick(object sender, EventArgs e)
{
//Once per second
ReadTempAndInitConversion();
}
public static TempSensor Instance
{
get{
if(instance == null)
instance = new TempSensor();
return instance;
}
}
}
}