// #include <SoftwareSerial.h>
// SoftwareSerial EEBlue(0, 1); // RX | TX
#include <IRremote.h>
#define PIN_RECEIVER A0
IRrecv receiver(PIN_RECEIVER);
// defining the pins used for each drink, you can changes this depending how you connect the pumps and the drinks.
int Vodka = 2;
int Cointreau = 3;
int CranberryJuice = 4;
int GrapeJuice = 5;
int LimeJuice = 6;
int CleaningWater = 7;
int Blender = 8;
int Discharge = 9;
int state = 0;
int interval = 500;
// Function declaration for ConcurrentMix
void ConcurrentMix(
int DelayTimeVodka, int DelayTimeCointreau, int DelayTimeCranberryJuice,
int DelayTimeGrapeJuice, int DelayTimeLimeJuice, int DelayTimeCleaningWater,
int DelayTimeBlender, int DelayTimeDischarge , bool includeCleaningWater);
void setup()
{
// Start the remote control receiver
receiver.enableIRIn();
Serial.begin(9600);
Serial.println("The bluetooth gates are open.\
Connect to HC-05 from any other bluetooth device with 1234 as pairing key!");
// Set pin 2-9 to output pins to drive the relay board
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
void loop()
{
if (Serial.available() > 0)
{ // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
Serial.println(state);
}
// In the absense of the bluetooth controller, I have used an IR remote control for controlling the system.
// Checks received an IR signal
if (receiver.decode()) {
state = receiver.decodedIRData.command;
Serial.println(state);
receiver.resume();
// Receive the next value
}
// Cocktails:
// 1. Cosmopolitan (vodka, Cointreau, Cranberry, Lime)
if (state == "cos" || state == 48)
{
Serial.println("Cosmopolitan in the making");
ConcurrentMix(4000, 5000, 3000, 0, 1000, 0, 4000, 8000,false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// 2. Vodka- cranberry (Vodka, Cranberry)
if (state == "vkc" || state == 24)
{
Serial.println("Vodka- cranberry in the making");
ConcurrentMix(3000, 0, 2000, 0, 0, 0, 2000, 1500, false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// 3. Vodka Sidecar (vodka, Cointreau, lime)
if (state == "vsc" || state == 122)
{
Serial.println("Vodka- Sidecar in the making");
ConcurrentMix(8000, 8000, 0, 0, 8000, 0, 3000, 800, false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// 4. Seabreeze (Vodka, Grapefruit, Cranberry)
if (state == "sb" || state == 16)
{
Serial.println("Seabreeze in the making");
ConcurrentMix(800, 0, 800, 800, 0, 0, 800, 800, false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// 5. GreyHound (Vodka, Grapefruit)
if (state == "gh" || state == 56)
{
Serial.println("GreyHound in the making");
ConcurrentMix(800, 0, 0, 800, 0, 0, 800, 800, false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// 6. Cape codder (Vodka, cranberry)
if (state == "cc" || state == 90)
{
Serial.println("Cape codder in the making");
ConcurrentMix(800, 0, 800, 0, 0, 0, 800, 800, false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
// Perform Cleaning
if (state == 'x' || state == 176)
{
Serial.println("Perform Cleaning");
ConcurrentMix(0, 0, 0, 0, 0, 1000, 4000, 3000, true);
}
// Set-up all (intial first time after cleaning)
if (state == "u" || state == 104)
{
Serial.println("Set-up All");
ConcurrentMix(800, 800, 800, 800, 800, 0, 0, 0,false);
// Vodka, Cointreau, CranberryJuice, GrapeJuice, LimeJuice, CleaningWater, Blender, Discharge
}
}
void ConcurrentMix(
int DelayTimeVodka, int DelayTimeCointreau, int DelayTimeCranberryJuice,
int DelayTimeGrapeJuice, int DelayTimeLimeJuice, int DelayTimeCleaningWater,
int DelayTimeBlender, int DelayTimeDischarge, bool includeCleaningWater) {
state = 0;
delay(2000);
// All ingredient pumps are activated concurrently
digitalWrite(Vodka, HIGH);
digitalWrite(Cointreau, HIGH);
digitalWrite(CranberryJuice, HIGH);
digitalWrite(GrapeJuice, HIGH);
digitalWrite(LimeJuice, HIGH);
// Check if CleaningWater should be included
if (includeCleaningWater) {
digitalWrite(CleaningWater, HIGH);
}
// Concurrent dispensing of ingredients
delay(DelayTimeVodka);
digitalWrite(Vodka, LOW);
delay(DelayTimeCointreau);
digitalWrite(Cointreau, LOW);
delay(DelayTimeCranberryJuice);
digitalWrite(CranberryJuice, LOW);
delay(DelayTimeGrapeJuice);
digitalWrite(GrapeJuice, LOW);
delay(DelayTimeLimeJuice);
digitalWrite(LimeJuice, LOW);
// Turn off CleaningWater if included
if (includeCleaningWater) {
digitalWrite(CleaningWater, LOW);
}
// Delay after dispensing ingredients
delay(2000);
// Sequential cleaning cycle
// Turn off Blender and Discharge for cleaning
digitalWrite(Blender, LOW);
digitalWrite(Discharge, LOW);
// Cleaning Water runs for the specified time
digitalWrite(CleaningWater, HIGH);
delay(DelayTimeCleaningWater);
digitalWrite(CleaningWater, LOW); // Turn off CleaningWater
// Blender operates after cleaning water
delay(100);
digitalWrite(Blender, HIGH);
delay(DelayTimeBlender);
digitalWrite(Blender, LOW);
// Discharge pump operates after blender
delay(100);
digitalWrite(Discharge, HIGH);
delay(DelayTimeDischarge);
digitalWrite(Discharge, LOW);
Serial.println("Drink is done!");
state = 0;
// Notify MIT App Inventor when processing is complete
Serial.println("Done");
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
r1:1
r1:2
led2:A
led2:C
r2:1
r2:2
led3:A
led3:C
r3:1
r3:2
led4:A
led4:C
r4:1
r4:2
led5:A
led5:C
r5:1
r5:2
led6:A
led6:C
r6:1
r6:2
led7:A
led7:C
r7:1
r7:2
ir1:GND
ir1:VCC
ir1:DAT
led8:A
led8:C