#include <Wire.h>
#include <stdio.h>
#include <stdlib.h>
#include <Servo.h>
int led = 9;
int buzzer = 7;
int temprature = A0;
int trigPin = 6;
int echoPin = 5;
int servoPin = 11;
int counter = 0;
const float minPh = 4.0;
boolean phFlag = false;
int brightness = 0;
Servo servo;
char degree = 176;
const float BETA = 3950;
int tempCounter = 0;
boolean tempFlag = false;
float cels;
int pos = 0;
boolean waterLevelFlag = false;
extern "C" {
void chip_init();
void phController(void *chip_data);
}
void setup(){
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(temprature, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(servoPin);
Serial.begin(9600);
}
void light(){
if(counter < 21600)
brightness = 255;
else if (counter < 64800)
brightness = 0;
else
brightness = 128;
digitalWrite(led, brightness);
}
void heater(int tempCounter){
servo.write(180);
if (tempCounter == (counter -3)){
cels += 0.5;
Serial.print("in heater Temperature: ");
Serial.print(cels);
Serial.println(degree);
tempFlag = false;
if (cels > 24){
servo.write(0);
Serial.println("Heater is Off now");
delay(5000);
}
}
}
void temp() {
int analogValue = analogRead(A0);
if (tempFlag == false)
cels = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// cels ++;
Serial.print("Temperature: ");
Serial.print(cels);
Serial.println(degree);
if(cels < 24){
heater(tempCounter);
if (!tempFlag)
tempCounter = counter;
Serial.println("Heater is ON now");
tempFlag = true;
}
else{
tempFlag = false;
Serial.println("Heater is Off now");
servo.write(0);
}
}
int readPh() {
float pH = analogRead(A1);
return (int) pH;
}
void phController() {
phFlag = false;
int ph = readPh();
Serial.print("PH : ");
Serial.println(ph, 1);
if (ph < minPh) {
phFlag = true;
Serial.println("The water is polluted. Turn on the aquarium purifier");
}
}
void waterLevel(){
waterLevelFlag = false;
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
Serial.print("Water Level is : ");
Serial.println(distance);
if (distance <= 240) {
waterLevelFlag = true;
Serial.println("The aquarium water level is too low, take care of it as soon as possible");
}
}
void loop(){
if (counter >= 172800)
counter = 0;
light();
temp();
if(counter % 3600 == 0)
waterLevel();
if(counter % 1200 == 0)
phController();
if(tempFlag == true && phFlag == true && waterLevelFlag == true){
tone(7, 220, 100);
Serial.println("The aquarium is in a bad condition");
}
counter++;
delay(500);
}