Facebook
From Grzegorz Pączkowski, 4 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 279
  1. #include "U8glib.h"
  2. #include "dht.h"
  3. #include <stdio.h>
  4. #define dht_apin 7
  5. #define N 23
  6. dht DHT;
  7. char linia1[20], linia2[20];
  8. unsigned char bufor [N];
  9. int PM25 =20, PM10 =20;
  10. int wartoscPM25(unsigned char *thebuf);
  11. int wartoscPM10(unsigned char *thebuf);
  12. char sprawdzLancuch(unsigned char *thebuf, char leng);
  13. U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI 1.3
  14. //U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI 0.96
  15. void draw(void) {
  16. u8g.setFont(u8g_font_helvR10); u8g.drawStr(10, 12, "Temp: "); u8g.drawStr(10, 27, "Wilg: ");
  17. u8g.setFont(u8g_font_helvR10); u8g.drawStr(10, 43, "PM2.5: "); u8g.drawStr(10, 59, "PM10: ");
  18. u8g.setFont(u8g_font_helvR10);
  19. u8g.setPrintPos(60, 12); u8g.print(DHT.temperature, 0); u8g.drawStr(90, 12, "C");
  20. u8g.setPrintPos(60, 27); u8g.print(DHT.humidity, 0); u8g.drawStr(90, 27, "%");
  21. u8g.setPrintPos(60, 43); u8g.print((linia1,"PM2.5 = %d ug/m3",PM25));u8g.drawStr(90, 43, "ug");
  22. u8g.setPrintPos(60, 59); u8g.print((linia2,"PM10 = %d ug/m3",PM10));u8g.drawStr(90, 59, "ug");
  23. }
  24. void setup(void) {
  25. }
  26. void loop(void)
  27. {
  28. if(Serial.find(0x42))
  29. Serial.readBytes(bufor,N);
  30. if(bufor[0] == 0x4d){
  31. if(sprawdzLancuch(bufor,N)){
  32. PM25=wartoscPM25(bufor);
  33. PM10=wartoscPM10(bufor); }}
  34. DHT.read22(dht_apin); // Read apin on DHT11 or DHT22}
  35. u8g.firstPage(); do { draw();
  36. }
  37. while( u8g.nextPage() );
  38. delay(500);
  39. }
  40. int wartoscPM25(unsigned char *buf) // generacja wartosci PM2,5
  41. {
  42. int PM25v;
  43. PM25v=((buf[11]<<8) + buf[12]);
  44. return PM25v;
  45. }
  46. int wartoscPM10(unsigned char *buf) // generacja wartosci PM10
  47. {
  48. int PM10v;
  49. PM10v=((buf[13]<<8) + buf[14]);
  50. return PM10v;
  51. }
  52. bool sprawdzLancuch(unsigned char *buf, int dlugosc) // sprawdzenie poprawności lancucha
  53. {
  54. bool flaga=0;
  55. int suma=0;
  56. for(int i=0; i<(dlugosc-2); i++){
  57. suma+=buf[i];
  58. }
  59. suma=suma + 0x42;
  60. if(suma == ((buf[dlugosc-2]<<8)+buf[dlugosc-1]))
  61. {
  62. suma = 0;
  63. flaga = 1;
  64. }
  65. return flaga;
  66. }