Please find attached find a working code based on the SoftwareSerial library. I have connected the SIG signal to the Arduino pin 2 & 3 and the RST signal to pin12.
#include <SoftwareSerial.h>
/====================================================
/ Connect MLX90614 SIG signal to Arduino pin 2 and 3
/====================================================/
SoftwareSerial Temp90(2, 3);
int LED=13; /* for the show */
int RESET=12;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(RESET,OUTPUT);
digitalWrite(RESET,HIGH);
delay(50);
digitalWrite(RESET,LOW);
delay(100);
digitalWrite(RESET,HIGH);
Temp90.begin(2400);
Serial.begin(115200);
delay(100);
Temp90.print(0,BYTE);
Temp90.print("!TEMc");
Temp90.print(0x5A,BYTE);
Temp90.print(7,BYTE);
digitalWrite(LED,HIGH);
delay(1000);
digitalWrite(LED,LOW);
pinMode(2,INPUT);
pinMode(3,INPUT);
delay(10);
}
//---------------------------------
void loop()
{
Acqu_Temp();
}
//----------------------------------
int Acqu_Temp()
{
static char rByte[10];
char rChar;
static int Read=0;
static int rcount=0;
int Temp1, Temp2, Temp3;
rChar = Temp90.read();
if (rChar == 'T') {
rByte[0]=rChar;
rChar=Temp90.read();
if(rChar=='E')
{
rByte[1]=rChar;
rChar=Temp90.read();
if(rChar=='M')
{
rByte[2]=rChar;
rByte[3]=Temp90.read();
rByte[4]=Temp90.read();
rByte[5]=Temp90.read();
Temp1 = rByte[4] + rByte[5]256;
Temp2 = (Temp1/100);
if (Temp12 < 27315) {
Temp3 = ((27315-(Temp12))/100);
}
else
Temp3 = (Temp1/1002)-273;
Serial.print("Temperature= ");
Serial.print(Temp3,DEC);
Serial.println(" Degrees Celsius");
}
}
}
digitalWrite(LED,HIGH);
delay(500);
digitalWrite(LED,LOW);
delay(500);
}