-261x173.jpg)
2015-09-11 00:00:00
/*************************************************** DFRobot SEN0186 Weather Station Weather Station + DFRobot LCD Shield *************************************************** This example outputs data from the DFRobot Weather Station kit (SEN0186) to a DFRobot LCD12864 shield (DFR0287) Updated 2016-01-18 By Matt GNU Lesser General Public License. See <http://www.gnu.org/licenses/> for details. All above must be included in any redistribution ****************************************************/ /***********Notice and Troubleshooting*************** For help and info visit the wiki: https://www.dfrobot.com/wiki/index.php?title=Weather_Station_with_Anemometer/Wind_vane/Rain_bucket_SKU:SEN0186 https://www.dfrobot.com/wiki/index.php?title=LCD12864_Shield_SKU:DFR0287 For any other problems, post on the DFRobot forum or email [email protected] ****************************************************/ #include "U8glib.h" //invoke library //LCD U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8 void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_trixel_square); //line pixel references #define line1 05 #define line2 12 #define line3 19 #define line4 26 #define line5 33 #define line6 40 #define line7 47 #define line8 55 //column pixel references #define cola 0 #define colb 85 #define colc 110 //Temperature u8g.drawStr(cola, line1, "Temperature:"); u8g.setPrintPos(colb, line1); u8g.print(Temperature()); u8g.setPrintPos(colc, line1); u8g.print("°C"); //Humidity u8g.drawStr(cola, line2, "Humidity:" ); u8g.setPrintPos(colb, line2); u8g.print(Humidity()); u8g.setPrintPos(colc, line2); u8g.print("%"); //Wind Direction u8g.drawStr(cola, line3, "Wind direction:"); //compass directions if (WindDirection() == 0) { u8g.setPrintPos(colb, line3); u8g.print("North"); } else if (WindDirection() == 45) { u8g.setPrintPos(colb, line3); u8g.print("North East"); } else if (WindDirection() == 90) { u8g.setPrintPos(colb, line3); u8g.print("East"); } else if (WindDirection() == 135) { u8g.setPrintPos(colb, line3); u8g.print("South East"); } else if (WindDirection() == 180) { u8g.setPrintPos(colb, line3); u8g.print("South"); } else if (WindDirection() == 225) { u8g.setPrintPos(colb, line3); u8g.print("South West"); } else if (WindDirection() == 270) { u8g.setPrintPos(colb, line3); u8g.print("West"); } else if (WindDirection() == 315) { u8g.setPrintPos(colb, line3); u8g.print("North West"); } //Wind Speed Average/min u8g.drawStr(cola, line4, "Average wind speed/min:"); u8g.setPrintPos(colb, line4); u8g.print(WindSpeedAverage()); u8g.setPrintPos(colc, line4); u8g.print("m/s"); //max wind speed 5 mins u8g.drawStr(cola, line5, "Max wind speed (5 min):"); u8g.setPrintPos(colb, line5); u8g.print(WindSpeedMax()); u8g.setPrintPos(colc, line5); u8g.print("m/s"); //rainfall (one hour) u8g.drawStr(cola, line6, "Rainfall (1 hour):"); u8g.setPrintPos(colb, line6); u8g.print(RainfallOneHour()); u8g.setPrintPos(colc, line6); u8g.print("mm"); //rainfall (24 hours) u8g.drawStr(cola, line7, "Rainfall (24 hours):"); u8g.setPrintPos(colb, line7); u8g.print(RainfallOneDay()); u8g.setPrintPos(colc, line7); u8g.print("mm"); //barometric pressure u8g.drawStr(cola, line8, "Barometric pressure:"); u8g.setPrintPos(colb, line8); u8g.print(BarPressure()); u8g.setPrintPos(colc, line8); u8g.print("hPa"); } char databuffer[35]; double temp; void getBuffer() //Get weather status data { int index; for (index = 0; index < 35; index ++) { if (Serial.available()) { databuffer[index] = Serial.read(); if (databuffer[0] != 'c') { index = -1; } } else { index --; } } } int transCharToInt(char *_buffer, int _start, int _stop) //char to int? { int _index; int result = 0; int num = _stop - _start + 1; int _temp[num]; for (_index = _start; _index <= _stop; _index ++) { _temp[_index - _start] = _buffer[_index] - '0'; result = 10 * result + _temp[_index - _start]; } return result; } int WindDirection() //Wind Direction { return transCharToInt(databuffer, 1, 3); } float WindSpeedAverage() //air Speed (1 minute) { temp = 0.44704 * transCharToInt(databuffer, 5, 7); return temp; } float WindSpeedMax() //Max air speed (5 minutes) { temp = 0.44704 * transCharToInt(databuffer, 9, 11); return temp; } float Temperature() //Temperature ("C") { temp = (transCharToInt(databuffer, 13, 15) - 32.00) * 5.00 / 9.00; return temp; } float RainfallOneHour() //Rainfall (1 hour) { temp = transCharToInt(databuffer, 17, 19) * 25.40 * 0.01; return temp; } float RainfallOneDay() //Rainfall (24 hours) { temp = transCharToInt(databuffer, 21, 23) * 25.40 * 0.01; return temp; } int Humidity() //Humidity { return transCharToInt(databuffer, 25, 26); } float BarPressure() //Barometric Pressure { temp = transCharToInt(databuffer, 28, 32); return temp / 10.00; } void setup() { Serial.begin(9600); u8g.setContrast(0); // Config the contrast to the best effect u8g.setRot180();// rotate screen, if required // set SPI backup if required //u8g.setHardwareBackup(u8g_backup_avr_spi); // assign default color value if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255, 255, 255); } } void loop() { getBuffer(); //Begin! Serial.print("Wind Direction: "); Serial.print(WindDirection()); Serial.println(" "); Serial.print("Average Wind Speed (One Minute): "); Serial.print(WindSpeedAverage()); Serial.println("m/s "); Serial.print("Max Wind Speed (Five Minutes): "); Serial.print(WindSpeedMax()); Serial.println("m/s"); Serial.print("Rain Fall (One Hour): "); Serial.print(RainfallOneHour()); Serial.println("mm "); Serial.print("Rain Fall (24 Hour): "); Serial.print(RainfallOneDay()); Serial.println("mm"); Serial.print("Temperature: "); Serial.print(Temperature()); Serial.println("C "); Serial.print("Humidity: "); Serial.print(Humidity()); Serial.println("% "); Serial.print("Barometric Pressure: "); Serial.print(BarPressure()); Serial.println("hPa"); Serial.println(""); Serial.println(""); //LCD output u8g.firstPage(); do { draw(); } while ( u8g.nextPage() ); // rebuild the picture after some delay delay(500); }
#include "U8glib.h" //invoke library
//LCD U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8
void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.setFont(u8g_font_trixel_square);
//line pixel references #define line1 05 #define line2 12 #define line3 19 #define line4 26 #define line5 33 #define line6 40 #define line7 47 #define line8 55 //column pixel references #define cola 0 #define colb 85 #define colc 110
//Temperature u8g.drawStr(cola, line1, "Temperature:"); u8g.setPrintPos(colb, line1); u8g.print(Temperature()); u8g.setPrintPos(colc, line1); u8g.print("°C");
//Wind Direction u8g.drawStr(cola, line3, "Wind direction:"); //compass directions if (WindDirection() == 0) { u8g.setPrintPos(colb, line3); u8g.print("North"); } else if (WindDirection() == 45) { u8g.setPrintPos(colb, line3); u8g.print("North East"); } else if (WindDirection() == 90) { u8g.setPrintPos(colb, line3); u8g.print("East"); } else if (WindDirection() == 135) { u8g.setPrintPos(colb, line3); u8g.print("South East"); } else if (WindDirection() == 180) { u8g.setPrintPos(colb, line3); u8g.print("South"); } else if (WindDirection() == 225) { u8g.setPrintPos(colb, line3); u8g.print("South West"); } else if (WindDirection() == 270) { u8g.setPrintPos(colb, line3); u8g.print("West"); } else if (WindDirection() == 315) { u8g.setPrintPos(colb, line3); u8g.print("North West"); }
char databuffer[35]; double temp; void getBuffer() //Get weather status data { int index; for (index = 0; index < 35; index ++) { if (Serial.available()) { databuffer[index] = Serial.read(); if (databuffer[0] != 'c') { index = -1; } } else { index --; } } } int transCharToInt(char *_buffer, int _start, int _stop) //char to int? { int _index; int result = 0; int num = _stop - _start + 1; int _temp[num]; for (_index = _start; _index <= _stop; _index ++) { _temp[_index - _start] = _buffer[_index] - '0'; result = 10 * result + _temp[_index - _start]; } return result; } int WindDirection() //Wind Direction { return transCharToInt(databuffer, 1, 3); } float WindSpeedAverage() //air Speed (1 minute) { temp = 0.44704 * transCharToInt(databuffer, 5, 7); return temp; } float WindSpeedMax() //Max air speed (5 minutes) { temp = 0.44704 * transCharToInt(databuffer, 9, 11); return temp; } float Temperature() //Temperature ("C") { temp = (transCharToInt(databuffer, 13, 15) - 32.00) * 5.00 / 9.00; return temp; } float RainfallOneHour() //Rainfall (1 hour) { temp = transCharToInt(databuffer, 17, 19) * 25.40 * 0.01; return temp; } float RainfallOneDay() //Rainfall (24 hours) { temp = transCharToInt(databuffer, 21, 23) * 25.40 * 0.01; return temp; } int Humidity() //Humidity { return transCharToInt(databuffer, 25, 26); } float BarPressure() //Barometric Pressure { temp = transCharToInt(databuffer, 28, 32); return temp / 10.00; }
u8g.setContrast(0); // Config the contrast to the best effect u8g.setRot180();// rotate screen, if required // set SPI backup if required //u8g.setHardwareBackup(u8g_backup_avr_spi); // assign default color value if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255, 255, 255); } }
void loop() { getBuffer(); //Begin! Serial.print("Wind Direction: "); Serial.print(WindDirection()); Serial.println(" "); Serial.print("Average Wind Speed (One Minute): "); Serial.print(WindSpeedAverage()); Serial.println("m/s "); Serial.print("Max Wind Speed (Five Minutes): "); Serial.print(WindSpeedMax()); Serial.println("m/s"); Serial.print("Rain Fall (One Hour): "); Serial.print(RainfallOneHour()); Serial.println("mm "); Serial.print("Rain Fall (24 Hour): "); Serial.print(RainfallOneDay()); Serial.println("mm"); Serial.print("Temperature: "); Serial.print(Temperature()); Serial.println("C "); Serial.print("Humidity: "); Serial.print(Humidity()); Serial.println("% "); Serial.print("Barometric Pressure: "); Serial.print(BarPressure()); Serial.println("hPa"); Serial.println(""); Serial.println(""); //LCD output u8g.firstPage(); do { draw(); } while ( u8g.nextPage() ); // rebuild the picture after some delay delay(500); }