Advertisement
Hanneman

RAW Thermometer

Jan 15th, 2016
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.13 KB | None | 0 0
  1. #include <DallasTemperature.h>
  2. #include <LiquidCrystal.h>
  3. #include <ClickButton.h>
  4. #include <OneWire.h>
  5. #include <Wire.h>
  6. #include <SPI.h>
  7. #include <DHT.h>
  8.  
  9. // De lijst met muzieknoten
  10. #define NOTE_B0  31
  11. #define NOTE_C1  33
  12. #define NOTE_CS1 35
  13. #define NOTE_D1  37
  14. #define NOTE_DS1 39
  15. #define NOTE_E1  41
  16. #define NOTE_F1  44
  17. #define NOTE_FS1 46
  18. #define NOTE_G1  49
  19. #define NOTE_GS1 52
  20. #define NOTE_A1  55
  21. #define NOTE_AS1 58
  22. #define NOTE_B1  62
  23. #define NOTE_C2  65
  24. #define NOTE_CS2 69
  25. #define NOTE_D2  73
  26. #define NOTE_DS2 78
  27. #define NOTE_E2  82
  28. #define NOTE_F2  87
  29. #define NOTE_FS2 93
  30. #define NOTE_G2  98
  31. #define NOTE_GS2 104
  32. #define NOTE_A2  110
  33. #define NOTE_AS2 117
  34. #define NOTE_B2  123
  35. #define NOTE_C3  131
  36. #define NOTE_CS3 139
  37. #define NOTE_D3  147
  38. #define NOTE_DS3 156
  39. #define NOTE_E3  165
  40. #define NOTE_F3  175
  41. #define NOTE_FS3 185
  42. #define NOTE_G3  196
  43. #define NOTE_GS3 208
  44. #define NOTE_A3  220
  45. #define NOTE_AS3 233
  46. #define NOTE_B3  247
  47. #define NOTE_C4  262
  48. #define NOTE_CS4 277
  49. #define NOTE_D4  294
  50. #define NOTE_DS4 311
  51. #define NOTE_E4  330
  52. #define NOTE_F4  349
  53. #define NOTE_FS4 370
  54. #define NOTE_G4  392
  55. #define NOTE_GS4 415
  56. #define NOTE_A4  440
  57. #define NOTE_AS4 466
  58. #define NOTE_B4  494
  59. #define NOTE_C5  523
  60. #define NOTE_CS5 554
  61. #define NOTE_D5  587
  62. #define NOTE_DS5 622
  63. #define NOTE_E5  659
  64. #define NOTE_F5  698
  65. #define NOTE_FS5 740
  66. #define NOTE_G5  784
  67. #define NOTE_GS5 831
  68. #define NOTE_A5  880
  69. #define NOTE_AS5 932
  70. #define NOTE_B5  988
  71. #define NOTE_C6  1047
  72. #define NOTE_CS6 1109
  73. #define NOTE_D6  1175
  74. #define NOTE_DS6 1245
  75. #define NOTE_E6  1319
  76. #define NOTE_F6  1397
  77. #define NOTE_FS6 1480
  78. #define NOTE_G6  1568
  79. #define NOTE_GS6 1661
  80. #define NOTE_A6  1760
  81. #define NOTE_AS6 1865
  82. #define NOTE_B6  1976
  83. #define NOTE_C7  2093
  84. #define NOTE_CS7 2217
  85. #define NOTE_D7  2349
  86. #define NOTE_DS7 2489
  87. #define NOTE_E7  2637
  88. #define NOTE_F7  2794
  89. #define NOTE_FS7 2960
  90. #define NOTE_G7  3136
  91. #define NOTE_GS7 3322
  92. #define NOTE_A7  3520
  93. #define NOTE_AS7 3729
  94. #define NOTE_B7  3951
  95. #define NOTE_C8  4186
  96. #define NOTE_CS8 4435
  97. #define NOTE_D8  4699
  98. #define NOTE_DS8 4978
  99.  
  100. // FSM staten
  101. #define STATE_PURPLE  0
  102. #define STATE_WHITE   1
  103. #define STATE_BLACK   2
  104.  
  105. // Pin Definities
  106. #define TEMPERATUUR         2      // [D2] Temp Sensor op Digitale Pin 2
  107. #define DHTPIN              3      // [D3] DHT Sensor op Digitale Pin 3
  108. const int ledPin = 8;              // LED gaat aan en uit op de melodie
  109. const int speakerPin = 10;         // Piezo buzzer op pin 110
  110. #define DHTTYPE DHT11              // DHT 11
  111.    
  112. LiquidCrystal lcd(9);
  113.  
  114. // Temperatuur Sensor aanzetten
  115. DHT dht(DHTPIN, DHTTYPE);
  116.        
  117. // Temperatuur sensor (one wire protocol)
  118. OneWire oneWire(TEMPERATUUR);
  119. DallasTemperature sensors(&oneWire);
  120. DeviceAddress Probe02 = { 0x28, 0xD6, 0x56, 0xD2, 0x05, 0x00, 0x00, 0x52 };
  121.  
  122. // Variabelen
  123. int fsm_state;
  124. float doeltemp = 30;
  125. int function = 0;
  126. boolean exitmenu = false;
  127. unsigned long timer; // De timer
  128. unsigned long timer2; // De timer
  129.  
  130. // De knoppen
  131. const int links1 = 5;
  132. const int rechts1 = 4;
  133. const int onder1 = 7;
  134.  
  135. ClickButton linksknop(links1, LOW);
  136. ClickButton rechtsknop(rechts1, LOW);
  137. ClickButton onderknop(onder1, LOW);
  138.  
  139. void setup()
  140. {
  141.  
  142.   // Setup button timers (alles in milliseconden / ms)
  143.   linksknop.debounceTime     = 20;   // Debounce timer in ms
  144.   linksknop.multiclickTime   = 250;  // Time limit for multi clicks
  145.   linksknop.longClickTime    = 1000; // Time until long clicks register
  146.   rechtsknop.debounceTime    = 20;   // Debounce timer in ms
  147.   rechtsknop.multiclickTime  = 250;  // Time limit for multi clicks
  148.   rechtsknop.longClickTime   = 1000; // Time until long clicks register
  149.   onderknop.debounceTime     = 20;   // Debounce timer in ms
  150.   onderknop.multiclickTime   = 250;  // Time limit for multi clicks
  151.   onderknop.longClickTime    = 2000; // Time until long clicks register
  152.  
  153.   // Beide pins als outputs opgeven
  154.   pinMode(ledPin, OUTPUT);
  155.   pinMode(speakerPin, OUTPUT);
  156.        
  157.   Serial.begin(9600);       // Stel de Baud rate in voor de Seriele monitor
  158.        
  159.   Wire.begin();
  160.  
  161.   timer = millis(); // start timer
  162.  
  163.   // sensoren zoeken en detecteren/controleren
  164.   dht.begin();
  165.   sensors.begin();
  166.  
  167.   // Resolutie instellen
  168.   sensors.setResolution(Probe02, 10);
  169.  
  170.   delay(1000); //sensor de tijd geven
  171.  
  172.   // sensors.requestTemperatures();  // Temperaturen uitlezen
  173.  
  174.   lcd.begin (16,2);   // 16x2 LCD
  175.  
  176.   // Om de temperatuur of de luchtvochtigheid te kunnen meten zijn 250 milliseconden nodig.
  177.   float h = dht.readHumidity();
  178.   // Read temperature as Celsius (the default)
  179.   float t = dht.readTemperature();
  180.  
  181.   // Testen of de sensor het doet
  182.   if (isnan(h) || isnan(t))
  183.   {
  184.     Serial.println("Failed to read from DHT sensor!");
  185.     lcd.print("DHT11 Faalt");  
  186.     return;
  187.   }
  188.  
  189.   lcd.print("RAW Thermometer");  
  190.   delay(1000);
  191.     while (exitmenu == false)
  192.   {
  193.    // Update de status van de knoppen
  194.   linksknop.Update();
  195.   rechtsknop.Update();
  196.   onderknop.Update();
  197.  
  198.   if (linksknop.clicks != 0) function = linksknop.clicks;
  199.   if (rechtsknop.clicks != 0) function = rechtsknop.clicks;
  200.   if (onderknop.clicks != 0) function = onderknop.clicks;
  201.  
  202.   lcd.setCursor(0,0);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  203.   lcd.print("Doeltemperatuur");
  204.   lcd.setCursor(0,1);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  205.   lcd.print("    ");
  206.   lcd.print(doeltemp);
  207.   lcd.print((char)223);
  208.   lcd.print("C         ");
  209.  
  210.   if(linksknop.clicks == 1)
  211.   {
  212.     doeltemp = doeltemp + 1;
  213.   }
  214.   if(linksknop.clicks == 2)
  215.   {
  216.     doeltemp = doeltemp + 10;
  217.   }
  218.   if(function == -1 && linksknop.depressed == true)
  219.   {
  220.     doeltemp = doeltemp + 0.50;
  221.     function = 0;
  222.   }
  223.   if(rechtsknop.clicks == 1)
  224.   {
  225.     doeltemp = doeltemp - 1;
  226.   }
  227.   if(rechtsknop.clicks == 2)
  228.   {
  229.     doeltemp = doeltemp - 10;
  230.   }
  231.   if(function == -1 && rechtsknop.depressed == true)
  232.   {
  233.     doeltemp = doeltemp - 0.50;
  234.     function = 0;
  235.   }
  236.  
  237.   if (doeltemp > 100)
  238.   {
  239.     doeltemp = 30;
  240.   }
  241.   if (doeltemp < 0)
  242.   {
  243.     doeltemp = 30;
  244.   }
  245.   if(function == -1 && onderknop.depressed == true)
  246.   {
  247.     exitmenu = true;
  248.     function = 0;
  249.     break;  
  250.   }
  251.   }
  252. }
  253.  
  254. void loop()
  255. {
  256.   linksknop.Update();
  257.   rechtsknop.Update();
  258.   onderknop.Update();
  259.  
  260.   if (linksknop.clicks != 0) function = linksknop.clicks;
  261.   if (rechtsknop.clicks != 0) function = rechtsknop.clicks;
  262.   if (onderknop.clicks != 0) function = onderknop.clicks;
  263.  
  264.   if(linksknop.clicks == 1)
  265.   {
  266.     fsm_state = STATE_BLACK;
  267.   }
  268.    if(rechtsknop.clicks == 1)
  269.   {
  270.     fsm_state = STATE_WHITE;
  271.   }
  272.   if(onderknop.clicks == 1)
  273.   {
  274.     fsm_state = STATE_PURPLE;
  275.     function = 0;
  276.   }
  277.      
  278.   float Sensor = sensors.getTempC(Probe02);
  279.  
  280.   // Om de temperatuur of de luchtvochtigheid te kunnen meten zijn 250 milliseconden nodig.
  281.   float h = dht.readHumidity();
  282.   // Read temperature as Celsius (the default)
  283.   float t = dht.readTemperature();
  284.  
  285.   // Temperatuur in graden Celsius weergeven(isFahreheit = false)
  286.   float hic = dht.computeHeatIndex(t, h, false);
  287.  
  288.   if ((millis()-timer) >= 601)
  289.   {
  290.     // timed out
  291.     timer += 601;// reset timer by moving it along to the next interval
  292.     sensors.requestTemperatures(); // Temperaturen uitlezen
  293.   }
  294.  
  295. /*
  296.   // Printen naar Serial vertraagd de werking van het apparaat !!! Dus alleen voor debugging gebruiken!
  297.  
  298.   Serial.println("Kamer Temp | Kamer vochtigheid |Sensor Temp");  // print dit naar Serial
  299.   Serial.println(F("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------"));
  300.   Serial.print(t);                         // Print temperatuur van Sensor DHT11 naar Serial
  301.   Serial.print(" *C");
  302.   Serial.print(F("\t"));                      // 1 tab
  303.   Serial.print(h);                          // Print de luchtvochtigheid naar Serial
  304.   Serial.print(" %\t\t");                   // Weergeven in procenten en een tab geven
  305.   Serial.println(Sensor);     // Print temperatuur van Sensor 3 naar Serial            
  306. */
  307.  
  308.    // FSM states
  309.   switch(fsm_state)
  310.   {
  311.            
  312.      case STATE_PURPLE:
  313.  
  314.                       lcd.setCursor(0,0);         // Zet het volgende neer op de eerste lijn vanaf het eerste blok
  315.                       lcd.print("Temp.  Doeltemp.");
  316.                       lcd.setCursor(0,1);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  317.                       lcd.print(Sensor);
  318.                       lcd.print((char)223);
  319.                       lcd.print("C  ");
  320.                       lcd.print(doeltemp);
  321.                       lcd.print((char)223);
  322.                       lcd.print("C         ");
  323.                       if (Sensor == doeltemp)
  324.                       {
  325.                         alarm();
  326.                       }      
  327.         break;
  328.    
  329.        case STATE_WHITE:
  330.  
  331.                       lcd.setCursor(0,0);         // Zet het volgende neer op de eerste lijn vanaf het eerste blok
  332.                       lcd.print("Kamer   ");
  333.                       lcd.print(t);
  334.                       lcd.print((char)223);
  335.                       lcd.print("C");
  336.                       lcd.print("          ");
  337.                       lcd.setCursor(0,1);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  338.                       lcd.print("temperatuur     ");
  339.           break;
  340.  
  341.         case STATE_BLACK:
  342.        
  343.                       lcd.setCursor(0,0);         // Zet het volgende neer op de eerste lijn vanaf het eerste blok
  344.                       lcd.print("Luchtvochtigheid");
  345.                       lcd.setCursor(0,1);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  346.                       lcd.print(h);
  347.                       lcd.print(" %          ");    
  348.           break;
  349.   }
  350. }
  351.  
  352. void alarm()
  353. {
  354.   lcd.setCursor(0,0);         // Zet het volgende neer op de eerste lijn vanaf het eerste blok
  355.   lcd.print("Gewenste temp.  ");
  356.   lcd.setCursor(0,1);         // Zet het volgende neer op de tweede lijn vanaf het eerste blok
  357.   lcd.print("bereikt");
  358.   lcd.print(" ");
  359.   lcd.print(doeltemp);
  360.   lcd.print((char)223);
  361.   lcd.print("C");
  362.   lcd.print("      ");
  363.                      
  364.   song();
  365. }
  366.  
  367. void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)  //code for working out the rate at which each note plays and the frequency.
  368. {
  369.   digitalWrite(ledPin, HIGH);
  370.   int x;    
  371.   long delayAmount = (long)(1000000/frequencyInHertz);
  372.   long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
  373.   for (x=0;x<loopTime;x++)  
  374.   {  
  375.     digitalWrite(speakerPin,HIGH);
  376.     delayMicroseconds(delayAmount);
  377.     digitalWrite(speakerPin,LOW);
  378.     delayMicroseconds(delayAmount);
  379.   }  
  380.   digitalWrite(ledPin, LOW);
  381.   delay(20);
  382. }      
  383.  
  384. void song()  //here is where all the notes for the song are played.
  385. {      
  386.   beep(speakerPin, NOTE_D5, 100);  //   beep( -PIN OF SPEAKER-, -THE NOTE WANTING TO BE PLAYED-, -DURATION OF THE NOTE IN MILISECONDS- )
  387.   delay(80);
  388.   beep(speakerPin, NOTE_F5, 100);
  389.   delay(80);
  390.   beep(speakerPin, NOTE_D6, 200);
  391.   delay(250);
  392.  
  393.   beep(speakerPin, NOTE_D5, 100);
  394.   delay(80);
  395.   beep(speakerPin, NOTE_F5, 100);
  396.   delay(80);
  397.   beep(speakerPin, NOTE_D6, 200);
  398.   delay(250);
  399.  
  400.   beep(speakerPin, NOTE_E6, 200);
  401.   delay(200);
  402.   beep(speakerPin, NOTE_F6, 100);
  403.   delay(100);
  404.   beep(speakerPin, NOTE_E6, 100);
  405.   delay(80);
  406.   beep(speakerPin, NOTE_F6, 100);
  407.   delay(80);
  408.   beep(speakerPin, NOTE_E6, 100);
  409.   delay(80);
  410.   beep(speakerPin, NOTE_C6, 100);
  411.   delay(80);
  412.   beep(speakerPin, NOTE_A5, 100);
  413.   delay(300);
  414.  
  415.   beep(speakerPin, NOTE_A5, 200);
  416.   delay(100);
  417.   beep(speakerPin, NOTE_D5, 200);
  418.   delay(100);
  419.   beep(speakerPin, NOTE_F5, 100);
  420.   delay(100);
  421.   beep(speakerPin, NOTE_G5, 100);
  422.   delay(100);
  423.   beep(speakerPin, NOTE_A5, 100);
  424.   delay(500);
  425.  
  426.   beep(speakerPin, NOTE_A5, 200);
  427.   delay(100);
  428.   beep(speakerPin, NOTE_D5, 200);
  429.   delay(100);
  430.   beep(speakerPin, NOTE_F5, 100);
  431.   delay(100);
  432.   beep(speakerPin, NOTE_G5, 100);
  433.   delay(100);
  434.   beep(speakerPin, NOTE_E5, 100);
  435.   delay(500);
  436.  
  437.   beep(speakerPin, NOTE_D5, 100);
  438.   delay(80);
  439.   beep(speakerPin, NOTE_F5, 100);
  440.   delay(80);
  441.   beep(speakerPin, NOTE_D6, 200);
  442.   delay(250);
  443.  
  444.   beep(speakerPin, NOTE_D5, 100);
  445.   delay(80);
  446.   beep(speakerPin, NOTE_F5, 100);
  447.   delay(80);
  448.   beep(speakerPin, NOTE_D6, 200);
  449.   delay(250);
  450.  
  451.   beep(speakerPin, NOTE_E6, 200);
  452.   delay(200);
  453.   beep(speakerPin, NOTE_F6, 100);
  454.   delay(100);
  455.   beep(speakerPin, NOTE_E6, 100);
  456.   delay(80);
  457.   beep(speakerPin, NOTE_F6, 100);
  458.   delay(80);
  459.   beep(speakerPin, NOTE_E6, 100);
  460.   delay(80);
  461.   beep(speakerPin, NOTE_C6, 100);
  462.   delay(80);
  463.   beep(speakerPin, NOTE_A5, 100);
  464.   delay(300);
  465.  
  466.   beep(speakerPin, NOTE_A5, 200);
  467.   delay(100);
  468.   beep(speakerPin, NOTE_D5, 200);
  469.   delay(100);
  470.   beep(speakerPin, NOTE_F5, 100);
  471.   delay(100);
  472.   beep(speakerPin, NOTE_G5, 100);
  473.   delay(100);
  474.   beep(speakerPin, NOTE_A5, 300);
  475.   delay(100);
  476.   beep(speakerPin, NOTE_A5, 200);
  477.   delay(100);
  478.   beep(speakerPin, NOTE_D5, 300);
  479.   delay(2000);
  480. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement