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
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int Temp;
if ( !ds.search(addr)) {
//Serial.print("No more addresses.\n");
ds.reset_search();
return;
}
// 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");
return;
}
if ( addr[0] != 0x28) {
Serial.print("Device is not a DS18S20 family device.\n");
return;
}
ds.reset();
ds.select(addr);
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.select(addr);
ds.write(0xBE); // Read Scratchpad
// Serial.print("P=");
//Serial.print(present,HEX);
//Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
//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(Temp);
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
}
else
{
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
}
else
{
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);
Serial.println();
}