#include "Arduino.h"
#include "ESP8266.h"
#include "dweet.h"
#include "PIR.h"
#include "Servo.h"
#include "PiezoSpeaker.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ESP_RX 10
#define ESP_TX 11
#define PIR_SIG 4
#define SERVOSM_SIG 3
#define SPEAKER_POS 2
#define TEMP_SENSOR_PIN 8
#define LED_PIN 9
const int servoRestPosition = 20;
const int servoTargetPosition = 150;
unsigned int hoorayLen = 6;
unsigned int hoorayMelody[] = {NOTE_C4, NOTE_E4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
unsigned int hoorayNoteDurations[] = {8, 8, 8, 4, 8, 4};
unsigned int comeLength = 3;
unsigned int comeMelody[] = {NOTE_C5, NOTE_G5, NOTE_C5};
unsigned int comeNoteDurations[] = {8, 8, 8};
ESP8266 wifi(ESP_RX, ESP_TX);
Servo servo;
PIR pir(PIR_SIG);
PiezoSpeaker piezoSpeaker(SPEAKER_POS);
OneWire oneWire(TEMP_SENSOR_PIN);
DallasTemperature sensors(&oneWire);
int pirCounter = 0;
const char* SSID = "WIFI-SSID";
const char* PASSWORD = "PASSWORD";
char* const inputToken = "YOURTOKEN_input";
char* const outputToken = "YOURTOKEN_output";
Dweet dweet(&wifi, inputToken, outputToken);
const float tempThreshold = 30.0;
void setup() {
Serial.begin(9600);
Serial.println("start");
if (!wifi.init(SSID, PASSWORD)) {
Serial.println(F("Wifi Init failed. Check configuration."));
while (true);
}
servo.attach(SERVOSM_SIG);
servo.write(servoRestPosition);
delay(100);
servo.detach();
pinMode(LED_PIN, OUTPUT);
sensors.begin();
}
void loop() {
bool pirVal = pir.read();
dweet.setDweet("pir", pirVal);
dweet.setDweet("pirCounter", pirCounter);
dweet.sendDweetKeys();
if (pirVal) {
pirCounter++;
servo.attach(SERVOSM_SIG);
servo.write(servoTargetPosition);
delay(500);
servo.write(servoRestPosition);
delay(500);
servo.detach();
piezoSpeaker.tone(400, 500);
delay(500);
piezoSpeaker.playMelody(hoorayLen, hoorayMelody, hoorayNoteDurations);
delay(500);
}
// Check temperature
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(temperature);
if (temperature > tempThreshold) {
digitalWrite(LED_PIN, HIGH);
piezoSpeaker.tone(1000, 500);
delay(500);
} else {
digitalWrite(LED_PIN, LOW);
}
dweet.receiveDweetEvents();
if (strcmp(dweet.getValue(), "servo") == 0) {
Serial.println(F("servo was pressed!"));
servo.attach(SERVOSM_SIG);
servo.write(servoTargetPosition);
delay(500);
servo.write(servoRestPosition);
delay(500);
servo.detach();
} else if (strcmp(dweet.getValue(), "PiezoSpeaker") == 0) {
Serial.println(F("PiezoSpeaker was pressed!"));
piezoSpeaker.tone(400, 500);
delay(500);
piezoSpeaker.playMelody(hoorayLen, hoorayMelody, hoorayNoteDurations);
delay(500);
} else if (strcmp(dweet.getValue(), "playGame") == 0) {
Serial.println(F("Playing Game!"));
while (!pir.read()) {
piezoSpeaker.playMelody(comeLength, comeMelody, comeNoteDurations);
delay(500);
}
servo.attach(SERVOSM_SIG);
servo.write(servoTargetPosition);
delay(1000);
servo.write(servoRestPosition);
delay(1000);
servo.detach();
piezoSpeaker.playMelody(hoorayLen, hoorayMelody, hoorayNoteDurations);
delay(100);
}
}