#include #include #include // Arduino pins #define LCD_LINES 2 // number of lines in your display #define DOUT_PIN 7 // Dout pin #define STR_PIN 6 // Strobe pin #define CLK_PIN 5 // Clock pin #define ONE_WIRE_BUS 12 //sensor pin OneWire oneWire(ONE_WIRE_BUS); //Reference: http://milesburton.com/wiki/index.php?title=Dallas_Temperature_Control_Library DallasTemperature sensors(&oneWire); //create object to control an LCD. LCD3Wire lcd = LCD3Wire(LCD_LINES, DOUT_PIN, STR_PIN, CLK_PIN); //Function converts float to char array to display on LCD char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify); void setup(void) { // initialize LCD3Wire and Dallas Temperature libs lcd.init(); sensors.begin(); } void loop(void) { float temp; //var for measured temperature char buff[10]; //buffer for floatToString function sensors.requestTemperatures(); //send command to measure temperature //Since we have single device on the bus the index is 0. temp = sensors.getTempCByIndex(0); //get measured temperature from device 0 lcd.cursorTo(2,0); //move cursor at the beginning of the second row on LCD lcd.printIn(floatToString(buff,temp,3,0,false)); //print string on LCD lcd.print(0xDF);// put degree sign lcd.print('C'); //indicate Celsius scale } // floatToString.h // // Tim Hirzel // tim@growdown.com // March 2008 // float to string // char * floatToString(char * outstr, float value, int places, int minwidth, bool rightjustify) { // this is used to write a float value to string, outstr. oustr is also the return value. int digit; float tens = 0.1; int tenscount = 0; int i; float tempfloat = value; int c = 0; int charcount = 1; int extra = 0; // make sure we round properly. this could use pow from , but doesn't seem worth the import // if this rounding step isn't here, the value 54.321 prints as 54.3209 // calculate rounding term d: 0.5/pow(10,places) float d = 0.5; if (value < 0) d *= -1.0; // divide by ten for each decimal place for (i = 0; i < places; i++) d/= 10.0; // this small addition, combined with truncation will round our values properly tempfloat += d; // first get value tens to be the large power of ten less than value if (value < 0) tempfloat *= -1.0; while ((tens * 10.0) <= tempfloat) { tens *= 10.0; tenscount += 1; } if (tenscount > 0) charcount += tenscount; else charcount += 1; if (value < 0) charcount += 1; charcount += 1 + places; minwidth += 1; // both count the null final character if (minwidth > charcount){ extra = minwidth - charcount; charcount = minwidth; } if (extra > 0 and rightjustify) { for (int i = 0; i< extra; i++) { outstr[c++] = ' '; } } // write out the negative if needed if (value < 0) outstr[c++] = '-'; if (tenscount == 0) outstr[c++] = '0'; for (i=0; i< tenscount; i++) { digit = (int) (tempfloat/tens); itoa(digit, &outstr[c++], 10); tempfloat = tempfloat - ((float)digit * tens); tens /= 10.0; } // if no places after decimal, stop now and return // otherwise, write the point and continue on if (places > 0) outstr[c++] = '.'; // now write out each decimal place by shifting digits one by one into the ones place and writing the truncated value for (i = 0; i < places; i++) { tempfloat *= 10.0; digit = (int) tempfloat; itoa(digit, &outstr[c++], 10); // once written, subtract off that digit tempfloat = tempfloat - (float) digit; } if (extra > 0 and not rightjustify) { for (int i = 0; i< extra; i++) { outstr[c++] = ' '; } } outstr[c++] = '\0'; return outstr; }