Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

#include<Servo.

h>

#define SENSOR_WATER_LEVEL A0
#define SENSOR_IR 4

#define ACTUATOR_WATER_PUMP 2
#define ACTUATOR_SERVO 3

Servo servo;

unsigned int posisi = 0;


unsigned int limitPosisi[2] = {0, 90};
/*
parameter 0 = sudut servo tertutup
parameter 90 = sudut servo terbuka

note:
jangkauan servo mulai dari sudut 0 hingga 180 derajat
sudut bisa diubah sesuai kebutuhan
*/

unsigned int limitValue[2] = {0, 500};


/*
parameter 0 = nilai terendah air dapat deteksi oleh sensor
parameter 1023 = nilai tertinggi air dapat dideteksi oleh sensor

note:
batas bawah 0 dan batas atas 1023, bisa diubah sesuai kebutuhan
*/

unsigned int waterValue;


bool foodValue;

bool stateServo;
unsigned long prevMillis = 0;
const long interval = 500;
unsigned long currMillis;
void setup()
{
pinMode(SENSOR_IR, INPUT);

pinMode(ACTUATOR_WATER_PUMP, OUTPUT);

servo.attach(ACTUATOR_SERVO);
Serial.begin(9600);
}

void loop()
{

waterValue = analogRead(SENSOR_WATER_LEVEL);

foodValue = digitalRead(SENSOR_IR);

readWater(waterValue, limitValue[0], limitValue[1]);


readFood(foodValue, limitPosisi[0], limitPosisi[1]);
}

void readWater(unsigned int value, unsigned int limitLower, unsigned int limitUpper)
{
if (value <= limitLower)digitalWrite(ACTUATOR_WATER_PUMP, LOW);
else if ((value > limitLower) && (value < limitUpper))digitalWrite(ACTUATOR_WATER_PUMP, LOW);
else if (value >= limitUpper)digitalWrite(ACTUATOR_WATER_PUMP, HIGH);
}

void readFood(bool irValue, unsigned int limitLower, unsigned int limitUpper)


{
currMillis = millis();
if ((currMillis - prevMillis) >= interval)
{
prevMillis = currMillis;
if (irValue)
{
if (stateServo)
{
servo.write(limitUpper);
stateServo = false;
}
else
{
servo.write(limitLower);
stateServo = true;
}
}
else
{
servo.write(limitLower);
}
}
}

You might also like