Help new person dim led smothly according to temp

Im still new to arduino, so bear with me here.
I’m creating a program to change the color of an rgb led according to the tempture recived by a dalas one wire temp senser. I was wondering if anyone could help me make this code dim the led more smothly, as that is beyond my level. I think mabey putting the code to get the tempture in a loop. Sorry for any code messiness, it is still a WIP. Here is the code:

#include <OneWire.h>

/*Takes the tempture from a DS18B20
 *and dims a RGB led to reflect the
 *current tempture. based off of 
 *the OneWire libary example for 
 *the DS18B20

OneWire  ds(8);  // on pin 10
int Red=3; // Red led pin
int Blue=6; // Blue Led pin
int R; // Value for red led
int B; // Value for blue led

void setup(void) {
  // initialize inputs/outputs
  // start serial port

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
  int Temp;
  if ( ! {
      //Serial.print("No more addresses.\n");

 // Serial.print("R=");  //R=28 Not sure what this is
  for( i = 0; i < 8; i++) {
    //Serial.print(addr[i], HEX);
   // Serial.print(" ");

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");

  if ( addr[0] != 0x28) {
      Serial.print("Device is not a DS18S20 family device.\n");

  ds.write(0x44,1);         // start conversion, with parasite power on at the end

  delay(750);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();;
  ds.write(0xBE);         // Read Scratchpad

 // Serial.print("P=");
  //Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] =;
    //Serial.print(data[i], HEX);
    //Serial.print("  ");
  Temp=(data[1]<<8)+data[0];//take the two bytes from the response relating to temperature

  Temp=Temp>>4;//divide by 16 to get pure celcius readout

  //next line is Fahrenheit conversion
  Temp=Temp*1.8+32; // comment this line out to get celcius

  Serial.print("T=");//output the temperature to serial port
    Serial.print("  ");
    if (Temp<90) // Tells if there should be any blue or not
    B=map(Temp, 32, 90, 255, 0); // Finds correct level of blue
      B=0; // Makes its so blue is off if it shouldn't be on
    if (Temp>60) // Tells if there should be any red or not
    R=map(Temp, 100, 60, 255, 0); // Finds correct level of red
      R=0;  // Makes its so red is off if it shouldn't be on
    analogWrite(Red, R); // Outputs Red level to red led
    analogWrite(Blue, B); // Outputs Blue level to blue led

  //Serial.print(" CRC=");
  //Serial.print( OneWire::crc8( data, 8), HEX);

I googled the hell out of it, but it is beyond my level.

You could look at code for a rolling average, either by maintaining a history of readings in an array, or simply by subtracting a fraction off a running total, and adding in the same fraction of each new reading.

runningTotal = (runningTotal - (runningTotal / timeConstant)) + (newReading / timeConstant);

The problem is getting past the delay required for the the OneWire libary to work right.

Anyone got any ideas to get past that?

Break the delay down into shorter phases, and use the phases to smooth your transitions

That is something I came across, but dont understand how to do. Mostly because i only know one meathod of smothing, and that is the add on, delay, add on, delay, ect... meathod. Could you please give some sample code of what you mean?

Have a look at the blink without delay example for a means of delaying but still allowing the processor to do other things

Ill try that. time to break out the ice cube. Wrapped in tissue.