//move car left,right,backward,forward
//turn on the fan when the temperature exceeds a certain point
//use gps, probably print the longitude,latitude save them on SD card
//make a led which can follow the temperature
#include <DIYables_IRcontroller.h>
#include <DHT.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <SD.h>
#define Relay_FAN 13
#define IR_Reciver 12
#define ENA 11
#define IN1 10
#define IN2 9
#define IN3 8
#define IN4 7
#define ENB 6
#define LED 5
#define SD_CS 4
#define GPS_RX 3
#define GPS_TX 2
#define DHT_Pin 1
DIYables_IRcontroller_17 IRcontroller(IR_Reciver,200);
DHT dht(DHT_Pin,DHT11);
TinyGPSPlus gps;
SoftwareSerial serialGPS(GPS_RX,GPS_TX);
File myFile;
void setup() {
Serial.begin(9600);
pinMode(Relay_FAN,OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(ENA, HIGH);
digitalWrite(ENB, HIGH);
dht.begin();
serialGPS.begin(9600);
SD.begin(SD_CS);
}
void loop() {
Key17 key = IRcontroller.getKey();
if(key != KEY::NONE){
switch(key){
case KEY17::KEY_UP:
car_moveForward();
break;
case KEY17::KEY_DOWN:
car_moveBackward();
break;
case KEY17::KEY_LEFT:
car_turnLeft();
break;
case KEY17::KEY_RIGHT:
car_turnRight();
break;
case KEY17::KEY_OK:
car_stop();
break;
}
}
float temp_CS = dht.readTemperature();
int led_analog_value = map(temp_CS > 0 ? temp_CS : 0,0,40,0,255);
analogWrite(LED,led_analog_value);
if(temp_CS > 25){
digitalWrite(Relay_FAN, HIGH);
}
else{
digitalWrite(Relay_FAN, LOW);
}
if(serialGPS.available()){
if(gps.encode(serialGPS.read())){
if(gps.location.isValid()){
double lat = gps.location.lat();
double lng = gps.location.lng();
myFile = SD.open("GPS.txt",FILE_WRITE);
myFile.print("Latitude: ");
myFile.println(lat);
myFile.print("Longitude: ");
myFile.println(lng);
myFile.close();
}
}
}
}
void car_moveForward(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void car_moveBackward(){
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void car_turnLeft(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void car_turnRight(){
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void car_stop(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}