/**
Arduino Tea maker
by vitronics
Copyright (C) 2023, vitronics.
*/
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
/* Display */
LiquidCrystal_I2C lcd(0X27, 20, 4);
/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'.', '0', '=', '/'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
void showStartupMessage() {
lcd.setCursor(4, 0);
lcd.print("Welcome!");
delay(1000);
lcd.setCursor(0, 2);
String message = " Tea Maker v1.0";
for (byte i = 0; i < message.length(); i++) {
lcd.print(message[i]);
delay(100);
}
delay(500);
}
void showWaitScreen() {
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("Loading menu");
lcd.setCursor(13, 1);
for (byte i = 0; i < 6; i++) {
delay(1000);
lcd.print("*");
//delay(100);
}
}
// Define tea flavors and their corresponding actions
const int TEA_GREEN = 1;
const int TEA_BLACK = 2;
const int TEA_HERBAL = 3;
const int TEA_CAPPUCCINO = 4;
const int TEA_MILK = 5;
const int TEA_GINGER = 6;
const int TEA_LATTE = 7;
const int TEA_CLOVE = 8;
const int HOT_WATER = 9;
int currentPage = 1; // Initial page
// Define the pins connected to components (e.g., motors, heaters, etc.)
const int GREEN_TEA_PIN = 10;
const int BLACK_TEA_PIN = 11;
const int HERBAL_TEA_PIN = 12;
const int CAPPUCCINO_TEA_PIN = 14;
const int MILK_TEA_PIN = 15;
const int GINGER_TEA_PIN = 16;
const int LATTE_TEA_PIN = 17;
const int CLOVE_TEA_PIN = 18;
const int HOT_WATER_PIN = 19;
void setup() {
Serial.begin(115200);
Wire.begin();
lcd.init();
lcd.backlight();
showStartupMessage();
delay(100);
lcd.clear();
showWaitScreen();
delay(100);
lcd.clear();
printMenu();
//delay(10);
pinMode(GREEN_TEA_PIN, OUTPUT);
pinMode(BLACK_TEA_PIN, OUTPUT);
pinMode(HERBAL_TEA_PIN, OUTPUT);
pinMode(HERBAL_TEA_PIN, OUTPUT);
pinMode(CAPPUCCINO_TEA_PIN, OUTPUT);
pinMode(MILK_TEA_PIN, OUTPUT);
pinMode(GINGER_TEA_PIN, OUTPUT);
pinMode(LATTE_TEA_PIN, OUTPUT);
pinMode(CLOVE_TEA_PIN, OUTPUT);
pinMode(HOT_WATER_PIN, OUTPUT);
}
void loop() {
char key = keypad.getKey(); // Read the keypad
if (key) {
if (key == '+') {
nextPage();
}
else if (key == '-') {
previousPage();
}
else {
int selectedTea = key - '0';
switch (selectedTea) {
case TEA_GREEN:
prepareGreenTea();
break;
case TEA_BLACK:
prepareBlackTea();
break;
case TEA_HERBAL:
prepareHerbalTea();
break;
case TEA_CAPPUCCINO:
prepareCappuccinoTea();
break;
case TEA_MILK:
prepareMilkTea();
break;
case TEA_GINGER:
prepareGingerTea();
break;
case TEA_LATTE:
prepareLatteTea();
break;
case TEA_CLOVE:
prepareCloveTea();
break;
case HOT_WATER:
prepareHotWater();
break;
default:
break;
}
}
}
}
void nextPage() {
currentPage++;
if (currentPage > 2) { // Adjust the number of pages as needed
currentPage = 1;
printMenu();
}
}
void previousPage() {
currentPage--;
if (currentPage < 1) { // Adjust for the first page
currentPage = 2; // Adjust the number of pages as needed
printMenu();
}
}
void printMenu() {
//Serial.println("----- Tea Machine Menu -----");
if (currentPage == 1) {
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
}
if (currentPage == 2) {
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("4. Capuccino Tea");
lcd.setCursor(0,2);
lcd.print("5. Milk Tea");
lcd.setCursor(0,3);
lcd.print("6. Ginger Tea");
}
else if(currentPage == 3){
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("7. Latte Tea");
lcd.setCursor(0,2);
lcd.print("8. Clove Tea");
lcd.setCursor(0,3);
lcd.print("9. Hot water");
}
//Serial.println("---------------------------");
}
void prepareGreenTea() {
// Actions to prepare green tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Green tea selected");
digitalWrite(GREEN_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Green tea Ready");
digitalWrite(GREEN_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Green tea selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Green Tea Ready!");
}
void prepareBlackTea() {
// Actions to prepare black tea
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Black tea selected");
digitalWrite(BLACK_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Black tea Ready");
digitalWrite(BLACK_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print(" ---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
Serial.println("Black tea selected. Preparing Black Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Black Tea Ready!");
}
void prepareHerbalTea() {
// Actions to prepare herbal tea
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Herbal tea selected");
digitalWrite(HERBAL_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Herbal tea Ready");
digitalWrite(HERBAL_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
Serial.println("Herbal tea selected. Preparing Herbal Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Herbal Tea Ready!");
}
void prepareCappuccinoTea() {
// Actions to prepare Cappuccino tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cappuccino tea selected");
digitalWrite(CAPPUCCINO_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Cappuccino tea Ready");
digitalWrite(CAPPUCCINO_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Green tea selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Green Tea Ready!");
}
void prepareMilkTea() {
// Actions to prepare Milk tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Milk tea selected");
digitalWrite(MILK_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Milk tea Ready");
digitalWrite(MILK_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Green tea selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Green Tea Ready!");
}
void prepareGingerTea() {
// Actions to prepare Ginger tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ginger tea selected");
digitalWrite(GINGER_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ginger tea Ready");
digitalWrite(GINGER_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Ginger tea selected. Preparing Green Tea...");
//delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Ginger Tea Ready!");
}
void prepareLatteTea() {
// Actions to prepare Latte tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Latte tea selected");
digitalWrite(LATTE_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Latte tea Ready");
digitalWrite(LATTE_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Latte tea selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Latte Tea Ready!");
}
void prepareCloveTea() {
// Actions to prepare Clove tea (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Clove tea selected");
digitalWrite(CLOVE_TEA_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Green tea Ready");
digitalWrite(CLOVE_TEA_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Clove tea selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Clove Tea Ready!");
}
void prepareHotWater() {
// Actions to prepare Hot water (e.g., turn on motors, heaters, etc.)
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hot water selected");
digitalWrite(HOT_WATER_PIN, HIGH);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hot Water Ready");
digitalWrite(HOT_WATER_PIN, LOW);
delay(1000);
lcd.clear();
lcd.print("---TEA MENU---");
lcd.setCursor(0,1);
lcd.print("1. Green Tea");
lcd.setCursor(0,2);
lcd.print("2. Black Tea");
lcd.setCursor(0,3);
lcd.print("3. Herbal Tea");
//lcd.clear();
Serial.println("Hot Water selected. Preparing Green Tea...");
delay(5000); // Simulating preparation time (5 seconds)
Serial.println("Hot Water Ready!");
}