#include <Arduino.h>
#include <IRremote.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#include <DHT.h>
Servo myservo; // create servo object to control a servo
int servoValue = 30; // variable to read the value from the analog pin
char buffer[40];
#define DHTPIN 14 // DHT 22 pin
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino
float humid; //Stores humidity value
float temp; //Stores temperature value
long previousMillis = 0;
long interval = 5000;
#define PIN_RECEIVER 13 // Signal Pin of IR receiver
#define PIN_RELAY1 2
#define PIN_RELAY2 3
#define PIN_RELAY3 4
#define PIN_RELAY4 5
#define PIN_SERVO 6
bool triggerRelay1 = 1;
bool triggerRelay2 = 0;
bool triggerRelay3 = 0;
bool triggerRelay4 = 0;
IRrecv receiver(PIN_RECEIVER);
String value;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void setup() {
// put your setup code here, to run once:
Serial.begin(115200); // Any baud rate should work
Serial.println(F("Hello Arduino\n"));
pinMode(PIN_RELAY1, OUTPUT);
pinMode(PIN_RELAY2, OUTPUT);
pinMode(PIN_RELAY3, OUTPUT);
pinMode(PIN_RELAY4, OUTPUT);
digitalWrite(PIN_RELAY1, triggerRelay1);
digitalWrite(PIN_RELAY2, triggerRelay2);
digitalWrite(PIN_RELAY3, triggerRelay3);
digitalWrite(PIN_RELAY4, triggerRelay4);
receiver.enableIRIn(); // Start the receiver
dht.begin();
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
myservo.attach(PIN_SERVO); // attaches the servo on pin PIN_)SERVO to the servo object
myservo.write(servoValue);
}
void loop() {
// put your main code here, to run repeatedly:
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
Serial.println(value);
receiver.resume(); // Receive the next value
//Serial.println(receiver.decodedIRData.command);
//Serial.println(receiver.decodedIRData.decodedRawData);
//Serial.println(receiver.decodedIRData.decodedRawData, HEX);
//Serial.println(translateIR());
// Send string value from translateIR. Keep it a lenght of five.
// Send this value with 433 MHz transmitter
lcd.begin(16, 2);
lcd.print("Hello World!");
// update temperature and humidity
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval){
previousMillis = currentMillis;
CheckTemp();
}
}
}
void CheckTemp()
{
Serial.println("temperature check");
//delay(2000);
//Read data and store it to variables hum and temp
humid = dht.readHumidity();
temp= dht.readTemperature();
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
//Print temp and humidity values to serial monitor
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
String translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 162:
value = "POWER";
Serial.println(F("Resetting Arduino"));
delay(200);
resetFunc(); //call reset
break;
case 226:
value = "MENU";
break;
case 34:
value = "TEST";
break;
case 2:
value = "PLUS";
// Servo up (CW)
servoValue += 1;
if (servoValue > 180) {servoValue = 180;}
myservo.write(servoValue);
sprintf(buffer, "Servo value is %d", servoValue);
Serial.println(buffer);
break;
case 194:
value = "BACK";
break;
case 224:
value = "PREV";
// Servo down (CCW) by 10 moves
servoValue -= 10;
if (servoValue < 0) {servoValue = 0;}
myservo.write(servoValue);
sprintf(buffer, "Servo value is %d", servoValue);
Serial.println(buffer);
break;
case 168:
value = "PLAY";
break;
case 144:
value = "NEXT";
// Servo up (CW) by 10 moves
servoValue += 10;
if (servoValue > 180) {servoValue = 180;}
myservo.write(servoValue);
sprintf(buffer, "Servo value is %d", servoValue);
Serial.println(buffer);
break;
case 104:
value = "num 0";
triggerRelay1 = 0;
triggerRelay2 = 0;
triggerRelay3 = 0;
triggerRelay4 = 0;
digitalWrite(PIN_RELAY1, triggerRelay1);
digitalWrite(PIN_RELAY2, triggerRelay2);
digitalWrite(PIN_RELAY3, triggerRelay3);
digitalWrite(PIN_RELAY4, triggerRelay4);
servoValue = 0;
myservo.write(servoValue);
break;
case 152:
value = "MINUS";
// Servo down (CCW)
servoValue -= 1;
if (servoValue < 0) {servoValue = 0;}
myservo.write(servoValue);
sprintf(buffer, "Servo value is %d", servoValue);
Serial.println(buffer);
break;
case 176:
value = "key C";
break;
case 48:
value = "num 1";
triggerRelay1 = !triggerRelay1;
Serial.print("trigger for Relay 1 is ");
Serial.println(triggerRelay1);
digitalWrite(PIN_RELAY1, triggerRelay1);
break;
case 24:
value = "num 2";
triggerRelay2 = !triggerRelay2;
Serial.print("trigger for Relay 2 is ");
Serial.println(triggerRelay2);
digitalWrite(PIN_RELAY2, triggerRelay2);
break;
case 122:
value = "num 3";
triggerRelay3 = !triggerRelay3;
Serial.print("trigger for Relay 3 is ");
Serial.println(triggerRelay3);
digitalWrite(PIN_RELAY3, triggerRelay3);
break;
case 16:
value = "num 4";
triggerRelay4 = !triggerRelay4;
Serial.print("trigger for Relay 4 is ");
Serial.println(triggerRelay4);
digitalWrite(PIN_RELAY4, triggerRelay4);
break;
case 56:
value = "num 5";
break;
case 90:
value = "num 6";
break;
case 66:
value = "num 7";
break;
case 74:
value = "num 8";
break;
case 82:
value = "num 9";
break;
default:
value = "other " + receiver.decodedIRData.command;
}
return value;
}
/*void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 162:
lcdPrint("POWER");
break;
case 226:
lcdPrint("MENU");
break;
case 34:
lcdPrint("TEST");
break;
case 2:
lcdPrint("PLUS");
break;
case 194:
lcdPrint("BACK");
break;
case 224:
lcdPrint("PREV.");
break;
case 168:
lcdPrint("PLAY");
break;
case 144:
lcdPrint("NEXT");
break;
case 104:
lcdPrint("num: 0");
break;
case 152:
lcdPrint("MINUS");
break;
case 176:
lcdPrint("key: C");
break;
case 48:
lcdPrint("num: 1");
break;
case 24:
lcdPrint("num: 2");
break;
case 122:
lcdPrint("num: 3");
break;
case 16:
lcdPrint("num: 4");
break;
case 56:
lcdPrint("num: 5");
break;
case 90:
lcdPrint("num: 6");
break;
case 66:
lcdPrint("num: 7");
break;
case 74:
lcdPrint("num: 8");
break;
case 82:
lcdPrint("num: 9");
break;
default:
lcd.clear();
lcd.print(receiver.decodedIRData.command);
lcd.print(" other button");
}
}
void lcdPrint(char* text)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("button pressed:");
lcd.setCursor(0, 1);
lcd.print(text);
lcd.print(" code: ");
lcd.print(receiver.decodedIRData.command);
}
*/