Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DallasTemperature.h>
- #include <LiquidCrystal.h>
- #include <ClickButton.h>
- #include <OneWire.h>
- #include <Wire.h>
- #include <SPI.h>
- #include <DHT.h>
- // De lijst met muzieknoten
- #define NOTE_B0 31
- #define NOTE_C1 33
- #define NOTE_CS1 35
- #define NOTE_D1 37
- #define NOTE_DS1 39
- #define NOTE_E1 41
- #define NOTE_F1 44
- #define NOTE_FS1 46
- #define NOTE_G1 49
- #define NOTE_GS1 52
- #define NOTE_A1 55
- #define NOTE_AS1 58
- #define NOTE_B1 62
- #define NOTE_C2 65
- #define NOTE_CS2 69
- #define NOTE_D2 73
- #define NOTE_DS2 78
- #define NOTE_E2 82
- #define NOTE_F2 87
- #define NOTE_FS2 93
- #define NOTE_G2 98
- #define NOTE_GS2 104
- #define NOTE_A2 110
- #define NOTE_AS2 117
- #define NOTE_B2 123
- #define NOTE_C3 131
- #define NOTE_CS3 139
- #define NOTE_D3 147
- #define NOTE_DS3 156
- #define NOTE_E3 165
- #define NOTE_F3 175
- #define NOTE_FS3 185
- #define NOTE_G3 196
- #define NOTE_GS3 208
- #define NOTE_A3 220
- #define NOTE_AS3 233
- #define NOTE_B3 247
- #define NOTE_C4 262
- #define NOTE_CS4 277
- #define NOTE_D4 294
- #define NOTE_DS4 311
- #define NOTE_E4 330
- #define NOTE_F4 349
- #define NOTE_FS4 370
- #define NOTE_G4 392
- #define NOTE_GS4 415
- #define NOTE_A4 440
- #define NOTE_AS4 466
- #define NOTE_B4 494
- #define NOTE_C5 523
- #define NOTE_CS5 554
- #define NOTE_D5 587
- #define NOTE_DS5 622
- #define NOTE_E5 659
- #define NOTE_F5 698
- #define NOTE_FS5 740
- #define NOTE_G5 784
- #define NOTE_GS5 831
- #define NOTE_A5 880
- #define NOTE_AS5 932
- #define NOTE_B5 988
- #define NOTE_C6 1047
- #define NOTE_CS6 1109
- #define NOTE_D6 1175
- #define NOTE_DS6 1245
- #define NOTE_E6 1319
- #define NOTE_F6 1397
- #define NOTE_FS6 1480
- #define NOTE_G6 1568
- #define NOTE_GS6 1661
- #define NOTE_A6 1760
- #define NOTE_AS6 1865
- #define NOTE_B6 1976
- #define NOTE_C7 2093
- #define NOTE_CS7 2217
- #define NOTE_D7 2349
- #define NOTE_DS7 2489
- #define NOTE_E7 2637
- #define NOTE_F7 2794
- #define NOTE_FS7 2960
- #define NOTE_G7 3136
- #define NOTE_GS7 3322
- #define NOTE_A7 3520
- #define NOTE_AS7 3729
- #define NOTE_B7 3951
- #define NOTE_C8 4186
- #define NOTE_CS8 4435
- #define NOTE_D8 4699
- #define NOTE_DS8 4978
- // FSM staten
- #define STATE_PURPLE 0
- #define STATE_WHITE 1
- #define STATE_BLACK 2
- // Pin Definities
- #define TEMPERATUUR 2 // [D2] Temp Sensor op Digitale Pin 2
- #define DHTPIN 3 // [D3] DHT Sensor op Digitale Pin 3
- const int ledPin = 8; // LED gaat aan en uit op de melodie
- const int speakerPin = 10; // Piezo buzzer op pin 110
- #define DHTTYPE DHT11 // DHT 11
- LiquidCrystal lcd(9);
- // Temperatuur Sensor aanzetten
- DHT dht(DHTPIN, DHTTYPE);
- // Temperatuur sensor (one wire protocol)
- OneWire oneWire(TEMPERATUUR);
- DallasTemperature sensors(&oneWire);
- DeviceAddress Probe02 = { 0x28, 0xD6, 0x56, 0xD2, 0x05, 0x00, 0x00, 0x52 };
- // Variabelen
- int fsm_state;
- float doeltemp = 30;
- int function = 0;
- boolean exitmenu = false;
- unsigned long timer; // De timer
- unsigned long timer2; // De timer
- // De knoppen
- const int links1 = 5;
- const int rechts1 = 4;
- const int onder1 = 7;
- ClickButton linksknop(links1, LOW);
- ClickButton rechtsknop(rechts1, LOW);
- ClickButton onderknop(onder1, LOW);
- void setup()
- {
- // Setup button timers (alles in milliseconden / ms)
- linksknop.debounceTime = 20; // Debounce timer in ms
- linksknop.multiclickTime = 250; // Time limit for multi clicks
- linksknop.longClickTime = 1000; // Time until long clicks register
- rechtsknop.debounceTime = 20; // Debounce timer in ms
- rechtsknop.multiclickTime = 250; // Time limit for multi clicks
- rechtsknop.longClickTime = 1000; // Time until long clicks register
- onderknop.debounceTime = 20; // Debounce timer in ms
- onderknop.multiclickTime = 250; // Time limit for multi clicks
- onderknop.longClickTime = 2000; // Time until long clicks register
- // Beide pins als outputs opgeven
- pinMode(ledPin, OUTPUT);
- pinMode(speakerPin, OUTPUT);
- Serial.begin(9600); // Stel de Baud rate in voor de Seriele monitor
- Wire.begin();
- timer = millis(); // start timer
- // sensoren zoeken en detecteren/controleren
- dht.begin();
- sensors.begin();
- // Resolutie instellen
- sensors.setResolution(Probe02, 10);
- delay(1000); //sensor de tijd geven
- // sensors.requestTemperatures(); // Temperaturen uitlezen
- lcd.begin (16,2); // 16x2 LCD
- // Om de temperatuur of de luchtvochtigheid te kunnen meten zijn 250 milliseconden nodig.
- float h = dht.readHumidity();
- // Read temperature as Celsius (the default)
- float t = dht.readTemperature();
- // Testen of de sensor het doet
- if (isnan(h) || isnan(t))
- {
- Serial.println("Failed to read from DHT sensor!");
- lcd.print("DHT11 Faalt");
- return;
- }
- lcd.print("RAW Thermometer");
- delay(1000);
- while (exitmenu == false)
- {
- // Update de status van de knoppen
- linksknop.Update();
- rechtsknop.Update();
- onderknop.Update();
- if (linksknop.clicks != 0) function = linksknop.clicks;
- if (rechtsknop.clicks != 0) function = rechtsknop.clicks;
- if (onderknop.clicks != 0) function = onderknop.clicks;
- lcd.setCursor(0,0); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print("Doeltemperatuur");
- lcd.setCursor(0,1); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print(" ");
- lcd.print(doeltemp);
- lcd.print((char)223);
- lcd.print("C ");
- if(linksknop.clicks == 1)
- {
- doeltemp = doeltemp + 1;
- }
- if(linksknop.clicks == 2)
- {
- doeltemp = doeltemp + 10;
- }
- if(function == -1 && linksknop.depressed == true)
- {
- doeltemp = doeltemp + 0.50;
- function = 0;
- }
- if(rechtsknop.clicks == 1)
- {
- doeltemp = doeltemp - 1;
- }
- if(rechtsknop.clicks == 2)
- {
- doeltemp = doeltemp - 10;
- }
- if(function == -1 && rechtsknop.depressed == true)
- {
- doeltemp = doeltemp - 0.50;
- function = 0;
- }
- if (doeltemp > 100)
- {
- doeltemp = 30;
- }
- if (doeltemp < 0)
- {
- doeltemp = 30;
- }
- if(function == -1 && onderknop.depressed == true)
- {
- exitmenu = true;
- function = 0;
- break;
- }
- }
- }
- void loop()
- {
- linksknop.Update();
- rechtsknop.Update();
- onderknop.Update();
- if (linksknop.clicks != 0) function = linksknop.clicks;
- if (rechtsknop.clicks != 0) function = rechtsknop.clicks;
- if (onderknop.clicks != 0) function = onderknop.clicks;
- if(linksknop.clicks == 1)
- {
- fsm_state = STATE_BLACK;
- }
- if(rechtsknop.clicks == 1)
- {
- fsm_state = STATE_WHITE;
- }
- if(onderknop.clicks == 1)
- {
- fsm_state = STATE_PURPLE;
- function = 0;
- }
- float Sensor = sensors.getTempC(Probe02);
- // Om de temperatuur of de luchtvochtigheid te kunnen meten zijn 250 milliseconden nodig.
- float h = dht.readHumidity();
- // Read temperature as Celsius (the default)
- float t = dht.readTemperature();
- // Temperatuur in graden Celsius weergeven(isFahreheit = false)
- float hic = dht.computeHeatIndex(t, h, false);
- if ((millis()-timer) >= 601)
- {
- // timed out
- timer += 601;// reset timer by moving it along to the next interval
- sensors.requestTemperatures(); // Temperaturen uitlezen
- }
- /*
- // Printen naar Serial vertraagd de werking van het apparaat !!! Dus alleen voor debugging gebruiken!
- Serial.println("Kamer Temp | Kamer vochtigheid |Sensor Temp"); // print dit naar Serial
- Serial.println(F("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------"));
- Serial.print(t); // Print temperatuur van Sensor DHT11 naar Serial
- Serial.print(" *C");
- Serial.print(F("\t")); // 1 tab
- Serial.print(h); // Print de luchtvochtigheid naar Serial
- Serial.print(" %\t\t"); // Weergeven in procenten en een tab geven
- Serial.println(Sensor); // Print temperatuur van Sensor 3 naar Serial
- */
- // FSM states
- switch(fsm_state)
- {
- case STATE_PURPLE:
- lcd.setCursor(0,0); // Zet het volgende neer op de eerste lijn vanaf het eerste blok
- lcd.print("Temp. Doeltemp.");
- lcd.setCursor(0,1); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print(Sensor);
- lcd.print((char)223);
- lcd.print("C ");
- lcd.print(doeltemp);
- lcd.print((char)223);
- lcd.print("C ");
- if (Sensor == doeltemp)
- {
- alarm();
- }
- break;
- case STATE_WHITE:
- lcd.setCursor(0,0); // Zet het volgende neer op de eerste lijn vanaf het eerste blok
- lcd.print("Kamer ");
- lcd.print(t);
- lcd.print((char)223);
- lcd.print("C");
- lcd.print(" ");
- lcd.setCursor(0,1); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print("temperatuur ");
- break;
- case STATE_BLACK:
- lcd.setCursor(0,0); // Zet het volgende neer op de eerste lijn vanaf het eerste blok
- lcd.print("Luchtvochtigheid");
- lcd.setCursor(0,1); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print(h);
- lcd.print(" % ");
- break;
- }
- }
- void alarm()
- {
- lcd.setCursor(0,0); // Zet het volgende neer op de eerste lijn vanaf het eerste blok
- lcd.print("Gewenste temp. ");
- lcd.setCursor(0,1); // Zet het volgende neer op de tweede lijn vanaf het eerste blok
- lcd.print("bereikt");
- lcd.print(" ");
- lcd.print(doeltemp);
- lcd.print((char)223);
- lcd.print("C");
- lcd.print(" ");
- song();
- }
- void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds) //code for working out the rate at which each note plays and the frequency.
- {
- digitalWrite(ledPin, HIGH);
- int x;
- long delayAmount = (long)(1000000/frequencyInHertz);
- long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
- for (x=0;x<loopTime;x++)
- {
- digitalWrite(speakerPin,HIGH);
- delayMicroseconds(delayAmount);
- digitalWrite(speakerPin,LOW);
- delayMicroseconds(delayAmount);
- }
- digitalWrite(ledPin, LOW);
- delay(20);
- }
- void song() //here is where all the notes for the song are played.
- {
- beep(speakerPin, NOTE_D5, 100); // beep( -PIN OF SPEAKER-, -THE NOTE WANTING TO BE PLAYED-, -DURATION OF THE NOTE IN MILISECONDS- )
- delay(80);
- beep(speakerPin, NOTE_F5, 100);
- delay(80);
- beep(speakerPin, NOTE_D6, 200);
- delay(250);
- beep(speakerPin, NOTE_D5, 100);
- delay(80);
- beep(speakerPin, NOTE_F5, 100);
- delay(80);
- beep(speakerPin, NOTE_D6, 200);
- delay(250);
- beep(speakerPin, NOTE_E6, 200);
- delay(200);
- beep(speakerPin, NOTE_F6, 100);
- delay(100);
- beep(speakerPin, NOTE_E6, 100);
- delay(80);
- beep(speakerPin, NOTE_F6, 100);
- delay(80);
- beep(speakerPin, NOTE_E6, 100);
- delay(80);
- beep(speakerPin, NOTE_C6, 100);
- delay(80);
- beep(speakerPin, NOTE_A5, 100);
- delay(300);
- beep(speakerPin, NOTE_A5, 200);
- delay(100);
- beep(speakerPin, NOTE_D5, 200);
- delay(100);
- beep(speakerPin, NOTE_F5, 100);
- delay(100);
- beep(speakerPin, NOTE_G5, 100);
- delay(100);
- beep(speakerPin, NOTE_A5, 100);
- delay(500);
- beep(speakerPin, NOTE_A5, 200);
- delay(100);
- beep(speakerPin, NOTE_D5, 200);
- delay(100);
- beep(speakerPin, NOTE_F5, 100);
- delay(100);
- beep(speakerPin, NOTE_G5, 100);
- delay(100);
- beep(speakerPin, NOTE_E5, 100);
- delay(500);
- beep(speakerPin, NOTE_D5, 100);
- delay(80);
- beep(speakerPin, NOTE_F5, 100);
- delay(80);
- beep(speakerPin, NOTE_D6, 200);
- delay(250);
- beep(speakerPin, NOTE_D5, 100);
- delay(80);
- beep(speakerPin, NOTE_F5, 100);
- delay(80);
- beep(speakerPin, NOTE_D6, 200);
- delay(250);
- beep(speakerPin, NOTE_E6, 200);
- delay(200);
- beep(speakerPin, NOTE_F6, 100);
- delay(100);
- beep(speakerPin, NOTE_E6, 100);
- delay(80);
- beep(speakerPin, NOTE_F6, 100);
- delay(80);
- beep(speakerPin, NOTE_E6, 100);
- delay(80);
- beep(speakerPin, NOTE_C6, 100);
- delay(80);
- beep(speakerPin, NOTE_A5, 100);
- delay(300);
- beep(speakerPin, NOTE_A5, 200);
- delay(100);
- beep(speakerPin, NOTE_D5, 200);
- delay(100);
- beep(speakerPin, NOTE_F5, 100);
- delay(100);
- beep(speakerPin, NOTE_G5, 100);
- delay(100);
- beep(speakerPin, NOTE_A5, 300);
- delay(100);
- beep(speakerPin, NOTE_A5, 200);
- delay(100);
- beep(speakerPin, NOTE_D5, 300);
- delay(2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement