#include <Arduino.h>
#include <Servo.h>
#include <IRremote.h>
const int receiverPin = 2;
const int servoLeftPin = 9;
const int servoRightPin = 10;
byte step = 0;
bool nextStep = false;
bool commandReceived = false;
unsigned long prevMillis = 0;
#define DROP_INTERVAL 2 // Time in seconds
Servo leftSide;
Servo rightSide;
IRrecv receiver(receiverPin);
void translateIR();
void moveServo(byte move);
void setup()
{
Serial.begin(9600);
leftSide.write(90);
rightSide.write(90);
leftSide.attach(servoLeftPin);
rightSide.attach(servoRightPin);
receiver.enableIRIn();
}
void loop()
{
// Checks received an IR signal
if (receiver.decode())
{
translateIR();
receiver.resume(); // Receive the next value
}
if (step == 4)
{
if ((millis() - prevMillis) >= (DROP_INTERVAL * 1000UL))
{
Serial.print("step = ");
Serial.println(step);
moveServo(4);
step = 0;
}
}
switch (step)
{
case 0:
if (commandReceived == true)
{
if (nextStep == false)
{
nextStep = true;
moveServo(0);
prevMillis = millis();
}
else
{
if ((millis() - prevMillis) >= (DROP_INTERVAL * 1000UL))
{
nextStep = false;
commandReceived = false;
moveServo(1);
}
}
}
break;
case 1:
if (commandReceived == true)
{
if (nextStep == false)
{
nextStep = true;
moveServo(2);
prevMillis = millis();
}
else
{
if ((millis() - prevMillis) >= (DROP_INTERVAL * 1000UL))
{
nextStep = false;
commandReceived = false;
step = 4;
moveServo(3);
prevMillis = millis();
}
}
}
break;
default:
break;
}
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command)
{
case 48:
Serial.println("Button pressed: 1");
step = 0;
commandReceived = true;
break;
case 24:
Serial.println("Button pressed: 2");
commandReceived = true;
step = 1;
break;
default:
Serial.print("Other button: ");
Serial.println(receiver.decodedIRData.command);
}
}
void moveServo(byte move)
{
Serial.print("move = ");
Serial.println(move);
switch (move)
{
case 0:
leftSide.write(180);
break;
case 1:
leftSide.write(90);
break;
case 2:
rightSide.write(0);
break;
case 3:
rightSide.write(90);
break;
case 4:
leftSide.write(180);
rightSide.write(0);
break;
default:
break;
}
}